cxf客户端访问方式
?
1.CXF是基于JAX-WS實(shí)現(xiàn)的,JAX-WS規(guī)范是一組XML web services的JAVA API,它使用戶無需編寫復(fù)雜的SOAP ENV,WSDL。在 JAX-WS中,一個(gè)遠(yuǎn)程調(diào)用可以轉(zhuǎn)換為一個(gè)基于XML的協(xié)議例如SOAP。在使用JAX-WS過程中,開發(fā)者不需要編寫任何生成和處理SOAP消息的代碼。JAX-WS的運(yùn)行時(shí)實(shí)現(xiàn)會(huì)將這些API的調(diào)用轉(zhuǎn)換成為對(duì)于SOAP消息。
在服務(wù)器端,用戶只需要通過Java語言定義遠(yuǎn)程調(diào)用所需要實(shí)現(xiàn)的接口SEI (service endpoint interface),并提供相關(guān)的實(shí)現(xiàn),通過調(diào)用JAX-WS的服務(wù)發(fā)布接口就可以將其發(fā)布為WebService接口。?
在客戶端,用戶可以通過JAX-WS的API創(chuàng)建一個(gè)代理(用本地對(duì)象來替代遠(yuǎn)程的服務(wù))來實(shí)現(xiàn)對(duì)于遠(yuǎn)程服務(wù)器端的調(diào)用。
2.使用CXF開發(fā)Webservice工程步驟:?
1).為CXF設(shè)置編譯和開發(fā)環(huán)境?
在http://cxf.apache.org/download.html 下載相應(yīng)的CXF包,/lib目錄下的jar 文件引入工程?
2).創(chuàng)建基于XCF的Webservice服務(wù)端工程。
3).編寫Webservice的客戶端程序,調(diào)用服務(wù)端服務(wù)。
3.CXF中的Factory:
CXF不但可以使用JAX-WS開發(fā)web服務(wù),也可以將POJO發(fā)布為web服務(wù),對(duì)于這兩種不同的方式,對(duì)應(yīng)的factory如下:
????????????????????? ?????????? 服務(wù)端???????????????????????? ????? 客戶端??
JAX-WS ???????????????????? JaxWsServerFactoryBean???????????? JaxWsProxyFactoryBean
POJO?????????????????????????? ServiceFactoryBean???????????????????? ClientProxyFactoryBean
?
4.CXF使用JAX-WS開發(fā)服務(wù)端:
(1).定義服務(wù)接口:
在接口上添加Webservice注解:@WebService。如:
package service; import javax.jws.WebService; @WebService public interface OrderProcess { String processOrder(Order order); }?
(2).實(shí)現(xiàn)服務(wù)接口:
在實(shí)現(xiàn)類上也添加Webservice注解:@WebService(endpointInterface =?服務(wù)接口全路徑,???serviceName =?對(duì)外發(fā)布的服務(wù)名)。如:
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).對(duì)外發(fā)布服務(wù):
//創(chuàng)建web服務(wù)工廠 JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); //設(shè)置服務(wù)類 factory.setServiceClass(服務(wù)接口實(shí)現(xiàn)類.class); //設(shè)置對(duì)外發(fā)布服務(wù)地址 factory.setAddress(對(duì)外發(fā)布的服務(wù)地址); //創(chuàng)建服務(wù) Server server = factory.create(); //啟動(dòng)服務(wù) server.start();?
?
5.CXF使用JAX-WS開發(fā)客戶端:
//創(chuàng)建web服務(wù)代理工廠?? JaxWsProxyFactoryBean?factory?=?new?JaxWsProxyFactoryBean();?? //設(shè)置要調(diào)用的web服務(wù)服務(wù)端發(fā)布地址?? factory.setAddress(web服務(wù)的發(fā)布地址);?? //設(shè)置要調(diào)用的web服務(wù)?? factory.setServiceClass(web服務(wù)接口.class);?? //創(chuàng)建web服務(wù)對(duì)象?? 服務(wù)接口?對(duì)象?=?(服務(wù)接口)?factory.create();?? 通過對(duì)象調(diào)用web服務(wù)的方法?? 6.CXF使用POJO開發(fā)服務(wù)端:?? 和使用JAX-WS開發(fā)方式前兩步完全一樣,第三步稍有不同如下:?? //創(chuàng)建web服務(wù)工廠?? ServiceFactoryBean?svrFactory?=?new?ServiceFactoryBean();?? //設(shè)置服務(wù)類?? svrFactory.setServiceClass(服務(wù)接口實(shí)現(xiàn)類.class);?? //設(shè)置對(duì)外發(fā)布服務(wù)地址?? svrFactory.setAddress(對(duì)外發(fā)布的服務(wù)地址);?? //創(chuàng)建服務(wù)?? Server?server?=?svrFactory.create();?? //啟動(dòng)服務(wù)?? server.start();?6.CXF使用POJO開發(fā)客戶端:
和JAX-WS方式除了代理工廠不同以外,其他均相同:
//創(chuàng)建web服務(wù)代理工廠?? ClientProxyFactoryBean?factory?=?new?ClientProxyFactoryBean();?? //設(shè)置要調(diào)用的web服務(wù)服務(wù)端發(fā)布地址?? factory.setAddress(web服務(wù)的發(fā)布地址);?? //設(shè)置要調(diào)用的web服務(wù)?? factory.setServiceClass(web服務(wù)接口.class);?? //創(chuàng)建web服務(wù)對(duì)象?? 服務(wù)接口?對(duì)象?=?(服務(wù)接口)?factory.create();?通過對(duì)象調(diào)用web服務(wù)的方法
7.CXF與Spring的集成:
(1).對(duì)工程引入spring支持。
(2).在web.xml文件中添加spring和CXF相應(yīng)的配置如下:
<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配置文件中導(dǎo)入CXF的相關(guān)配置如下:
<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配置文件中配置要發(fā)布的web服務(wù)如下:
<jaxws:endpoint id="……" implementor="服務(wù)接口實(shí)現(xiàn)類全路徑" address="/web服務(wù)發(fā)布地址(相對(duì)地址)" />?
8. 補(bǔ)償
使用CXF中的wsdl2java 生成client訪問代碼,其訪問方式也是一種,區(qū)別于以上。
引自:https://blog.csdn.net/chjttony/article/details/6196289
轉(zhuǎn)載于:https://www.cnblogs.com/redqueen/p/9897365.html
總結(jié)
以上是生活随笔為你收集整理的cxf客户端访问方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebSocket 详解
- 下一篇: Vue源码探究-事件系统