CXF开发

使用CXF开发Web Service服务器端:
每个Web Service组件需要2个部分:接口和实现类
1.开发一个Web Service业务接口。该接口要用@WebService业务接口。
2.开发一个Web Service实现类。实现类也需要用@WebService修饰。
3.使用Endpoint类的静态方法来发布WebService。

使用CXF开发Web Service客户端:
1.调用CXF提供的wsdl2java工具,根据WSDL文档生成相应的java代码。任何语言
  实现了Web Service,都需要提供、并暴露WSDL文档。
2.找到wsdl2java所生成类中,一个继承了Service的类,该类的实例可当成工厂来使用。
3.调用Service子类的实例的getXxxPort方法,返回远程Web Service的代理。

形参、返回值
1.当形参、返回值的类型是String、基本数据类型时,CXF肯定可以轻松地处理。
2.当形参、返回值类型是JavaBean式的复合类、List集合、数组等时CXF也可以很好的处理。
3.还有一些像Map、非JavaBean式的复合类、CXF是处理不了的。

在CXF开发中,如果遇到CXF无法处理的类型,需要程序自行处理。
处理思路是:提供一个转换器,该转换器负责把CXF搞不定的类型,转换CXF搞得定的类型。
1.使用@XmlJavaTypeAdapter修饰CXF无法处理的类型。使用该Annotation时,通过value属性指定一个转换器。
2.实现自己的转换器。实现转换器式,需要开发一个CXF搞得定的类型。

一次Web Service的调用----其实并不是方法调用,而是发送SOAP消息(即XML文档片段)

调用一次Web Service的本质:
1.客户端把调用方法参数,转换生成XML文档片段(SOAP消息,input消息)
2.通过网络,把XML文档片段传给服务器。
3.服务器接到XML文档片段。
4.服务器解析XML文档片段,提取其中的数据。并把数据转换调用Web Service所需要的参数值。
5.服务器执行方法。
6.把执行方法得到的返回值、再次转换生成XML文档片段(SOAP消息,output消息)。
7.通过网络、把XML文档片段传给客户端。
8.客户端接收到XML文档片段。
9.客户端解析XML文档片段,提取其中的数据。并把数据转换成调用Web Service的返回值。
从上面调用本质来看,要一个语言支持Web Service,唯一的要求是:该语言支持XML文档解析、生成、支持网络传输。
Web Service急需解决的问题:如何进行权限控制? 解决思路是:服务器端要求input消息总是携带有用户名、密码消息
----如果没有用户名、密码信息,直接拒绝调用。 如果不用CXF等框架,SOAP消息的生成、解析都是由程序员负责的,无论是添加用户名、密码信息,还是提取用户名、密码信息, 都可由程序员的代码完成。 如果用CXF等框架,SOAP消息的生成、解析都是CXF等框架来完成的。 拦截器: 为了让程序员能访问、并修改CXF框架所生成的SOAP消息,CXF提供了拦截器。 服务器端添加拦截器: 1.获取Endpoint的publish方法返回值。 2.调用该方法的返回的getInInterceptor、getOutInterceptor方法来 获取In、Out拦截器列表,接下来就可以添加拦截器了。 客户端添加拦截器: 1.调用ClientProxy的getClient方法。 2.调用该方法的返回的getInInterceptor、getOutInterceptor方法来 获取In、Out拦截器列表,接下来就可以添加拦截器了。 自定义拦截器: 需要实现Interceptor接口,实际上,我们一般会继承AbstractPhaseInterceptor。

Web应用的类加载路径有两类: A.WEB
-INF/classes目录 B.WEB-INF/lib目录下 CXF与Spring的整合: 可以在传统的Java EE应用的基础上添加一层Web Service层。 我们的Java EE应用就可以对外暴露Web Service, 这样就运行任何平台、任何语言编写的程序来调用这个Java EE应用。 在传统ssh项目基础上增加Web Service的步骤: 1.复制CXF的jar包。 2.在web.xml配置CXF的核心控制器:CXFServlet。 3.在Spring配置文件中导入CXF提供Schaema,XML配置文件。 4.在Spring配置文件中使用javaws:endpoint元素来暴露Web Service。 5.如果要添加拦截器。在javaws:endpoint元素里添加inInterceptor、outIntercepors子元素。

 生成客户端代码:

wsimport -s . -p com.test.ws.client http://localhost:8080/cxf_spring/webservice//HelloWorld?wsdl

wsdl2java http://localhost:8080/php?wsdl 

基于web的CXF依赖spring

调用webservice:如果不是spring项目,通过生成客户端代码来调用。如果是spring项目,只需要接口文件,通过

<jaxws:client id="helloClient"        address="http://127.0.0.1:9999/cxf2.4_spring_web/ws/helloworld"        serviceClass="com.itcast.cxf.first.IHelloWorld"> </jaxws:client>

原文地址:https://www.cnblogs.com/dapeng520/p/4621890.html