WebService学习笔记3——CXF基础

 

1.CXF是基于JAX-WS实现的,JAX-WS规范是一组XML web servicesJAVA API,它使用户无需编写复杂的SOAP ENV,WSDL。在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将这些API的调用转换成为对于SOAP消息。

在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI (service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。 
在客户端,用户可以通过JAX-WSAPI创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。

2.使用CXF开发Webservice工程步骤: 

1).CXF设置编译和开发环境 
http://cxf.apache.org/download.html 下载相应的CXF包,/lib目录下的jar 文件引入工程 
2).
创建基于XCFWebservice服务端工程
3).
编写Webservice的客户端程序,调用服务端服务。

3.CXF中的Factory

CXF不但可以使用JAX-WS开发web服务,也可以将POJO发布为web服务,对于这两种不同的方式,对应的factory如下:

                                 服务端                               客户端  

JAX-WS                      JaxWsServerFactoryBean             JaxWsProxyFactoryBean

POJO                           ServiceFactoryBean                     ClientProxyFactoryBean

4.CXF使用JAX-WS开发服务端:

(1).定义服务接口:

在接口上添加Webservice注解:@WebService。如

package service; import javax.jws.WebService; @WebService public interface OrderProcess { String processOrder(Order order); } 

(2).实现服务接口:

在实现类上也添加Webservice注解:@WebService(endpointInterface = 服务接口全路径,   serviceName = 对外发布的服务名)。如:

package service; import javax.jws.WebService; @WebService(endpointInterface = "service.OrderProcess",serviceName=”order”) public class OrderProcessImpl implements OrderProcess { public String processOrder(Order order) { return "hello world"+order; } } 

(3).对外发布服务:

//创建web服务工厂 JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); //设置服务类 factory.setServiceClass(服务接口实现类.class); //设置对外发布服务地址 factory.setAddress(对外发布的服务地址); //创建服务 Server server = factory.create(); //启动服务 server.start(); 

5.CXF使用JAX-WS开发客户端:

//创建web服务代理工厂 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); //设置要调用的web服务服务端发布地址 factory.setAddress(web服务的发布地址); //设置要调用的web服务 factory.setServiceClass(web服务接口.class); //创建web服务对象 服务接口 对象 = (服务接口) factory.create(); 通过对象调用web服务的方法 6.CXF使用POJO开发服务端: 和使用JAX-WS开发方式前两步完全一样,第三步稍有不同如下: //创建web服务工厂 ServiceFactoryBean svrFactory = new ServiceFactoryBean(); //设置服务类 svrFactory.setServiceClass(服务接口实现类.class); //设置对外发布服务地址 svrFactory.setAddress(对外发布的服务地址); //创建服务 Server server = svrFactory.create(); //启动服务 server.start(); 

6.CXF使用POJO开发客户端:

JAX-WS方式除了代理工厂不同以外,其他均相同:

//创建web服务代理工厂 ClientProxyFactoryBean factory = new ClientProxyFactoryBean(); //设置要调用的web服务服务端发布地址 factory.setAddress(web服务的发布地址); //设置要调用的web服务 factory.setServiceClass(web服务接口.class); //创建web服务对象 服务接口 对象 = (服务接口) factory.create(); 

通过对象调用web服务的方法

7.CXFSpring的集成:

(1).对工程引入spring支持。

(2).web.xml文件中添加springCXF相应的配置如下:

<web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value>spring配置文件路径</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <display-name>CXF Servlet</display-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/service/*</url-pattern> </servlet-mapping> </web-app> 

(3).spring配置文件中导入CXF的相关配置如下:

<import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 

(4).spring配置文件中配置要发布的web服务如下:

<jaxws:endpoint id="……" implementor="服务接口实现类全路径" address="/web服务发布地址(相对地址)" /> 

 

你可能感兴趣的:(spring,server,webservice,SOAP,web服务,interface)