程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> cxf-關於webservice怎麼做的問題

cxf-關於webservice怎麼做的問題

編輯:編程解疑
關於webservice怎麼做的問題

cxf實現的RESTful WebService如何做到設置token賦予不一樣的權限

最佳回答:


可以到apache官網上下載apache CXF 包,不知道你用什麼語言開發,去對應的地方下載就行啦!
1.apache CXF webService多系統交互服務,
2.從apache CXF 官網上下載CXF用到的java包
最少需要:cxf-2.7.18.jar ,neethi-3.0.3.jar,stax2-api-3.1.4.jar,woodstox-core-asl-4.4.1.jar,wsdl4j-1.6.3.jar,xmlschema-core-2.1.0.jar,將這些cxf的jar包放到webservice的項目中,然後項目通過building path引入這些jar包,
3.在項目的web.xml中引入CXF的servlet

CXFServlet

org.apache.cxf.transport.servlet.CXFServlet

1


CXFServlet

/ ws/*

啟動tomcat,
4.CXF服務端的配置文件: applicationContext-server.xml

1. <?xml version="1.0" encoding="UTF-8"?>  
2. <beans xmlns="http://www.springframework.org/schema/beans"  
3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
4.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
5.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
6.                        http://www.springframework.org/schema/beans/spring-beans.xsd  
7.                        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">  
8.     <!--   
9.         ***注意***   
10.         手動添加的內容:  
11.         xmlns:jaxws="http://cxf.apache.org/jaxws"  
12.         http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"  
13.      -->  
14.       
15.     <import resource="classpath:META-INF/cxf/cxf.xml" />  
16.     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />  
17.     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  
18.   
19.     <jaxws:endpoint id="helloService" implementor="com.test.server.HelloWorldServerImp" address="/helloService" />  
20.           
21. </beans>  
22. 5.將服務端的配置文件在spring的applicationcontext.xml文件引入cxf服務端配置文件,加載cxf配置文件,
23. < import resource ="com/test/server/applicationContext-server.xml"/>
24. 6.測試服務端的服務接口
25. http://localhost:8080/webService/ws/helloService?wsdl查看某一個接口的類
26. 

27. http://localhost:8080/webService/ws查看多個接口類
28. 

29. 7.

org.springframework.context.ApplicationContext ;spring的jar包提供應用上下文類,用於讀取.xml文件的屬性信息,
30. ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-client.xml" );
31. IHelloWorldServer helloService = (IHelloWorldServer) context.getBean( "client");
32. 8.客戶端調用服務端的異常 Could not find wsdl:binding operation info for web method sayHello,
33. 解決方法:在服務端的接口要添加
34. import javax.jws.WebService;
35. @WebService//否則就會包那個異常
36. 9.客戶端調用服務端的代碼
37. CXF通過運行時代理生成遠程服務的代理對象,在客戶端完成對webservice的訪問
package com.flyfox.client;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

import com.flyfox.service.IHelloWorldService;

public class HelloWorldServiceClient {

public static void main(String[] args) throws Exception {
//調用WebService
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(IHelloWorldService.class);
factory.setAddress("http://localhost:9000/helloWorld");

IHelloWorldService service = (IHelloWorldService) factory.create();
System.out.println("[result]" + service.sayHello("flyfox"));

}
}
小結:這種調用service的好處在於調用過程非常簡單,就幾行代碼就完成一個webservice的調用,但是客戶端也必須依賴服務器端的接口,這種調用方式限制是很大的,要求服務器端的webservice必須是java實現--這樣也就失去了使用webservice的意義
查看了官方的文檔後,發現其實是可以實現不依賴服務器端接口來完成調用的,如下
使用JaxWsDynamicClientFactory類,只要指定服務器端wsdl文件的位置,然後指定要調用的方法和方法的參數即可,so simple!!

package com.flyfox.client;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

import com.flyfox.service.IHelloWorldService;

public class HelloWorldServiceClient {

public static void main(String[] args) throws Exception {
//不依賴服務器端接口來完成調用的,也就是不僅僅能調用Java的接口
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();//創建客戶端工廠類

Client client = clientFactory.createClient("http://localhost:9000/helloWorld?wsdl");//通過客戶端的工廠類的createClient方法,參數是服務的wsdl地址,創建客戶端對象,Object[] result = client.invoke("sayHello", "KEVIN");//客戶端對象的invoke方法,參數是服務端的方法和方法的參數,返回一個結果數組
System.out.println(result[0]);
}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved