Java使用cxf發(fā)布及調(diào)用webservice接口的方法詳解
一、cxf發(fā)布webservice接口
添加maven依賴
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.4.3</version>
</dependency>這里的cxf-rt-transports-http-jetty依賴是內(nèi)置jetty容器發(fā)布webservice接口
創(chuàng)建服務端接口
@WebService
public interface UserService {
String getUserInfo(String name);
}@WebService
public class UserServiceImpl implements UserService {
@Override
public String getUserInfo(String name) {
return "我是" + name;
}
}public class test {
public static void main(String[] args) {
System.out.println("web service start");
UserService implementor = new UserServiceImpl();
String address = "http://127.0.0.1:8082/userService";
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
factoryBean.setAddress(address); // 設置暴露地址
factoryBean.setServiceClass(UserService.class); // 接口類
factoryBean.setServiceBean(implementor); // 設置實現(xiàn)類
factoryBean.create();
System.out.println("web service started");
System.out.println("web service started");
}
}啟動main方法,正常情況會發(fā)布成功
瀏覽器訪問http://127.0.0.1:8082/userService?wsdl 返回下面內(nèi)容說明發(fā)布成功

二、客戶端進行動態(tài)調(diào)用webservice接口
public static void main(String[] args) throws Exception {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://127.0.0.1:8082/userService?wsdl");
// namespace是命名空間,methodName是方法名
QName name = new QName("http://service.test.example.com/", "getUserInfo");
Object[] objects = client.invoke(name, "我沒收到反饋");
System.out.println(objects[0].toString());
}正常情況調(diào)用接口會返回成功
cxf的動態(tài)調(diào)用不適合傳遞自定義對象,需要傳遞自定義對象,需要使用靜態(tài)調(diào)用生成本地代碼
三、cxf靜態(tài)調(diào)用生成本地代碼
采用apache-cxf-3.4.3版本,jar包可到官網(wǎng)下載 http://cxf.apache.org/download.html
使用JAX-WS Proxy代理工廠方式開發(fā)客戶端,首先需要使用wsdl2java工具生成web service在本地的代理接口
1、配置環(huán)境變量
wsdl2java.bat在CXF根目錄\bin目錄下,使用之前需要配置CXF環(huán)境變量,CXF_HOME變量值為CXF根目錄,并在path中添加%CXF_HOME%\bin,如:


2、wsdl2java生成代理接口配置好環(huán)境變量后,打開CMD命令行窗口,將當前目錄切換到java工程src目錄下,命令行輸入如下格式命令,回車,即可根據(jù)wsdl生成服務端的代理接口。
wsdl2java -p ws.cxf -client http://127.0.0.1:8082/userService?wsdl

命令說明:
-p 指定代理接口所在包名,-client(生成客戶端) 后面的字符串聲明了服務接口的wsdl
public static void test() {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(UserService.class);
factory.setAddress("http://127.0.0.1:8082/userService");
Object object = factory.create();
UserService service = (UserService) object;
UserVO userVO = new UserVO();
userVO.setName("李師傅打開");
String userInfo = service.getUserInfo(userVO);
System.out.println(userInfo);
}3、第二種調(diào)用方法
ExecuteBindQSService executeBindQSService = new ExecuteBindQSService(ExecuteBindQSService.getWsdlLocation(WSDL_URL));
ExecutePtt executePtt = executeBindQSService.getExecuteBindQSPort();
//獲取代理,并設置日志攔截器,打印日志
Client client = ClientProxy.getClient(executePtt);
client.getInInterceptors().add(new LoggingInInterceptor());
client.getOutInterceptors().add(new LoggingOutInterceptor());
// 超時時間設置
HTTPConduit http = (HTTPConduit) clientProxy.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(Integer
.valueOf(webServiceConTimeout));
httpClientPolicy.setReceiveTimeout(Integer
.valueOf(webServiceRevTimeout));
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);
//調(diào)用方法執(zhí)行
Response response = executePtt.execute(request);4、關閉元素校驗
@EndpointProperty(key = “soap.no.validate.parts”, value = “true”)

四、使用的是apache的axis實現(xiàn)的
第二種訪問webservice的方法是通過idea生成客戶端代碼,訪問服務端接口向訪問本地接口一樣。使用的是apache的axis實現(xiàn)的。
以上就是Java使用cxf發(fā)布及調(diào)用webservice接口的方法詳解的詳細內(nèi)容,更多關于Java 使用cxf調(diào)用webservice接口的資料請關注腳本之家其它相關文章!
相關文章
關于@ComponentScan?TypeFilter自定義指定掃描bean的規(guī)則
這篇文章主要介紹了關于@ComponentScan?TypeFilter自定義指定掃描bean的規(guī)則,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
java.Net.UnknownHostException異常處理問題解決
這篇文章主要介紹了java.Net.UnknownHostException異常處理方法,問題原因是在系統(tǒng)的?/etc/Hostname中配置了主機名,而在/etc/hosts文件中沒有相應的配置,本文給大家詳細講解,需要的朋友可以參考下2023-03-03
Java Socket+mysql實現(xiàn)簡易文件上傳器的代碼
最近在做一個小項目,項目主要需求是實現(xiàn)一個文件上傳器,通過客戶端的登陸,把本地文件上傳到服務器的數(shù)據(jù)庫(本地的)。下面通過本文給大家分享下實現(xiàn)代碼,感興趣的朋友一起看看吧2016-10-10
解決Spring運行時報錯:Consider defining a bean o
該文章主要講述了在使用Spring框架時,如果遇到某個bean未找到的錯誤,應該在配置文件中定義該bean,解決方法是在對應的類上添加@Component注解2025-01-01

