CXF框架实现webservice教程

c#小王子 c#小王子 2021-11-02 765 Java



CXF框架实现webservice教程



1 使用 CXF 实现一个简单的 WEB SERVICE


首先介绍如何用 CXF 实现一个基本的 hello world


首先到 apache 官网去下载 CXF 的开发 jar 包


创建 cxf webservice 服务器端普通 java 项目,叫做 HelloCxfServer,把必须用到的 jar 文件通过构建路径引入,为了省事,可以直接把所有的 jar 引入


此处注意:如果是 jdk1.6 启动服务器会发生如下错误


JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from

jar:file:/E:/javaLib/cxf_all_jar/jaxb‐impl‐2.2.1.1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class)

needs 2.2 API. Use the endorsed directory mechanism to place jaxb‐api.jar in the bootstrap classloader.


这是由于 jdk1.6 的 jar 包和 cxf 的 jar 包冲突造成的,需要把 cxf lib 中的 endorsed 目录拷入到 D:\Program Files\Java\jdk1.6.0\jre\lib 目录下创建一个接口 HelloWorld 和一个实现类 HelloWorldImpl,只提供一个成员方法,叫做 sayHello,给接口和实现类添加注解@WebService,这是最基本的注解


/test/HellWorld.java 源码
package test;
import javax.jws.WebService;
@WebService
public interface HelloWorld {
String sayHello(String name);
}
/test/HelloWorldImpl.java 源码
package test;
import javax.jws.WebService;
@WebService
public class HelloWorldImpl implements HelloWorld {
@Override
public String sayHello(String name) {
System.out.println("sayHello方法被调用...");
return "hello," + name;
} 
} 


CXF 自带了一个 Web Service 容器 Jetty,这是一个 WEB 容器,类似于 tomcat,能够直接发布 web service,下面创建一个发布服务类 MainServer,执行这个类就会运行服务器,看到控制台输出日志信息,表示启动服务成功


/test/MainServier.java 源码
package test;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class MainServer {
public static void main(String[] args) {
//创建一个JaxWs服务器工厂
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
//设置发布类
factory.setServiceClass(HelloWorldImpl.class);
//设置服务发布的地址
factory.setAddress("http://localhost:6666/MyCxfService");
//根据设置创建一个服务器
Server server = factory.create();
//启动服务器
server.start();
} 
}


发布成功以后,可以通过浏览器去查看生成的 WSDL,在浏览器地址栏输入 http://localhost:6666/MyCxfService?wsdl ,效果如下:



下面创建访问 WebService 的客户端,可以重新创建一个项目,也可以就在这个项目里实现,我下面在同一个项目中创建一个类 HelloWorldCient


/test/HelloWorldClient.java 源码
package test;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean;
public class HelloWorldClient {
public static void main(String[] args) {
//创建一个JaxWs的代理工厂
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//设置访问地址
factory.setAddress("http://localhost:6666/MyCxfService");
//设置接口类型
factory.setServiceClass(HelloWorld.class);
//获得代理类实例
HelloWorld helloWorld = (HelloWorld) factory.create();
//调用方法
String str = helloWorld.sayHello("张三");
System.out.println(str);
} 
}

运行客户端,会看到控制台,输出:hello,张三


2 WSDL 结构分析


主要通过上一章生成的 WSDL,来对 WSDL 语言的标签进行解释Web Services Description Language 的缩写,是一个用来描述 Web 服务和说明如何与 Web 服务通信的 XML语言。为用户提供详细的接口说明书。查看刚才生成的 WSDL,可以分析出以下的知识点:


wsdl:definitions:根标签

属性 name="HelloWorldImplService":服务名称设置,HelloWorldImplService 系统自动按照类名生成的,

当然这个名字可以通过注解设置进行自定义

属性 targetNamespace="http://test/" :名称空间设置,默认会用反写包名作为名称空间,例如,包名是

com.icss.test,那么名称空间就是 http://test.icss.com/,通过注解设置也可以自定义


wsdl:types 元素: 使用某种语法(如 XML 模式)的数据类型定义(string、int),描述了接口中方法的参

数(输入参数)和返回值(输出参数)名称和类型

可以通过注解来给输入参数的名字和输出参数的名字进行自定义,默认是输出参数是 return 和第一个输

入参数是 arg0,被修改为 sayHelloResult 和 name

@WebService


public interface HelloWorld {

@WebResult(name="sayHelloResult")String sayHello(@WebParam(name="name")String name);

}


wsdl:message 元素:描述要传递的数据,web service 是把请求和响应都包装成一个 message 来传递,客户端把请求封装成 message 传递给服务器,而服务器把响应封装成 message 发送回客户端part 元素:消息参数


wsdl:portType/ Interface 元素:一个或多个端点支持的操作的抽象集。此名称已更改,因此可能会遇到两者中的任何一个。这个元素其实就是对应我们的接口。接口中的每一个方法被映射为一个 Operation元素


wsdl:binding 元素:特定端口类型的具体协议和数据格式规范,设置协议,一般都是 soap 协议


wsdl:service 元素:一个接口就是一个 portType,如果我们有很多接口,那么就组成一个 service,包含很多访问地址



【下载地址】

百度网盘链接:https://pan.baidu.com/s/1fXCkqeO8kMr1kbeewfh_EA

提取码:eb25


相关文章


使用-JFreeChart来创建基于web的图表

使用-JFreeChart来创建基于web的图表

XStream使用文档

XStream使用文档

WebService发布过程及常见问题

WebService发布过程及常见问题

webpack实战入门进阶调优分享

webpack实战入门进阶调优分享

weblogic调优参数及监控指标

weblogic调优参数及监控指标

weblogic节点管理

weblogic节点管理

weblogic管理控制台概述

weblogic管理控制台概述

weblogic-部署和启动

weblogic-部署和启动

WebLogic-Server-性能及调优-调优-Java-虚拟机

Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。

Velocity用户教程

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。

Velocity用户手册

Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。


文章热度: 166291
文章数量: 333
推荐阅读

FlashFXP绿色版网盘下载,附激活教程 1782

FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具

Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 1565

firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ

navicat for mysql中文绿色版网盘下载 1623

Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq

火车头采集器(旗舰版)绿色版网盘下载 1707

火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA

Photoshop(CS-2015-2023)绿色中文版软件下载 1824

安装文件清单(共46G)包含Window和Mac OS各个版本的安装包,从cs到cc,从绿色版到破解版,从安装文件激活工具,应有尽有,一次性打包。 Photoshop CC绿色精简版 Photoshop CS6 Mac版 Photoshop CC 2015 32位 Photoshop CC 2015 64位 Photoshop CC 2015 MAC版 Photoshop CC 2017 64位 Adobe Photoshop CC 2018 Adobe_Photoshop_CC_2018 Photoshop CC 2018 Win32 Photoshop CC 2018 Win64

知之

知之平台是全球领先的知识付费平台。提供各个领域的项目实战经验分享,提供优质的行业解决方案信息,来帮助您的工作和学习

使用指南 建议意见 用户协议 友情链接 隐私政策 Powered by NOOU ©2020 知之