cxf客户端访问方式
?
1.CXF是基于JAX-WS實現的,JAX-WS規范是一組XML web services的JAVA API,它使用戶無需編寫復雜的SOAP ENV,WSDL。在 JAX-WS中,一個遠程調用可以轉換為一個基于XML的協議例如SOAP。在使用JAX-WS過程中,開發者不需要編寫任何生成和處理SOAP消息的代碼。JAX-WS的運行時實現會將這些API的調用轉換成為對于SOAP消息。
在服務器端,用戶只需要通過Java語言定義遠程調用所需要實現的接口SEI (service endpoint interface),并提供相關的實現,通過調用JAX-WS的服務發布接口就可以將其發布為WebService接口。?
在客戶端,用戶可以通過JAX-WS的API創建一個代理(用本地對象來替代遠程的服務)來實現對于遠程服務器端的調用。
2.使用CXF開發Webservice工程步驟:?
1).為CXF設置編譯和開發環境?
在http://cxf.apache.org/download.html 下載相應的CXF包,/lib目錄下的jar 文件引入工程?
2).創建基于XCF的Webservice服務端工程。
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.CXF與Spring的集成:
(1).對工程引入spring支持。
(2).在web.xml文件中添加spring和CXF相應的配置如下:
<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服務發布地址(相對地址)" />?
8. 補償
使用CXF中的wsdl2java 生成client訪問代碼,其訪問方式也是一種,區別于以上。
引自:https://blog.csdn.net/chjttony/article/details/6196289
轉載于:https://www.cnblogs.com/redqueen/p/9897365.html
總結
以上是生活随笔為你收集整理的cxf客户端访问方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebSocket 详解
- 下一篇: 日常开发技巧:使用notify-send