1. 程式人生 > >CXF客戶端呼叫--HelloWorld!

CXF客戶端呼叫--HelloWorld!

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");

Object[] result = client.invoke("sayHello", "KEVIN");

System.out.println(result[0]);

}

}