Java調用WebService方法總結(7)--CXF調用WebService

CXF = Celtix + XFire,繼承了Celtix和XFire兩大開源項目的精華,是一個開源的,全功能的,容易使用的WebService框架。文中所使用到的軟件版本:Java 1.8.0_19一、CXF 3.2.11。html

一、準備

參考Java調用WebService方法總結(1)--準備工做java

二、調用

2.一、Client方式

public static void client(String param) {
    try {
        JaxWsDynamicClientFactory factroy = JaxWsDynamicClientFactory.newInstance();
        //DynamicClientFactory factroy = DynamicClientFactory.newInstance();
        Client client = factroy.createClient("http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl");
        Object[] results = client.invoke("toTraditionalChinese", param);
        System.out.println("client方式:" + results[0]);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

該方式須要用到以下jar文件,少jar文件會報各類各樣的錯誤。web

cxf-core-3.2.11.jar、cxf-rt-bindings-soap-3.2.11.jar、cxf-rt-databinding-jaxb-3.2.11.jar、cxf-rt-frontend-jaxws-3.2.11.jar、cxf-rt-frontend-simple-3.2.11.jar、cxf-rt-transports-http-3.2.11.jar、cxf-rt-wsdl-3.2.11.jar、stax2-api-3.1.4.jar、woodstox-core-5.0.3.jar、xmlschema-core-2.2.4.jar、wsdl4j-1.6.3.jar。這些jar文件在下載的CXF包裏都有。apache

2.二、wsdl2java方式

2.2.一、根據wsdl生成代碼

執行命令:api

%CXF_HOME%/bin/wsdl2java.bat -p com.inspur.ws.cxf -client http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl

-p 指定包名  -client 生成客戶端調用樣例框架

更多的參數說明詳見官方文檔:http://cxf.apache.org/docs/wsdl-to-java.htmlfrontend

2.2.一、用生成代碼的調用WebService

public static void wsdl2java(String param) {
    com.inspur.ws.cxf.TraditionalSimplifiedWebService service = new com.inspur.ws.cxf.TraditionalSimplifiedWebService();
    com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port = service.getTraditionalSimplifiedWebServiceSoap();
    String reuslt = port.toTraditionalChinese(param);
    System.out.println("wsdl2java方式:" + reuslt);
    
    com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port2 = service.getTraditionalSimplifiedWebServiceSoap12();
    reuslt = port2.toTraditionalChinese(param);
    System.out.println("wsdl2java方式2:" + reuslt);
}

2.三、Simple Frontend Client Proxy方式

這種方式須要服務端是CXF用Simple Frontend發佈的WebService。這裏用官網的demo來演示。ide

2.3.一、建立服務端

a、接口spa

package com.inspur.ws.cxf.server;

public interface HelloWorld {
    String sayHi(String text);
}

b、實現類code

package com.inspur.ws.cxf.server;

public class HelloWorldImpl implements HelloWorld {
    public String sayHi(String text) {
        return "Hello " + text;
    }
}

c、發佈服務

package com.inspur.ws.cxf.server;

import org.apache.cxf.frontend.ServerFactoryBean;

public final class Server {
    private Server() {
    }

    public static void startServer() throws Exception {
        HelloWorldImpl helloworldImpl = new HelloWorldImpl();
        ServerFactoryBean svrFactory = new ServerFactoryBean();
        svrFactory.setServiceClass(HelloWorld.class);
        svrFactory.setAddress("http://localhost:9000/Hello");
        svrFactory.setServiceBean(helloworldImpl);
        svrFactory.create();
    }

    public static void main(String args[]) throws Exception {
        startServer();
        System.out.println("Server ready...");

        Thread.sleep(5 * 60 * 1000);
        System.out.println("Server exiting");
        System.exit(0);
    }
}

發佈服務時會用到好多jar文件,若是少jar文件會報各類奇怪的錯誤;能夠把%CXF_HOME%/lib下的jar文件都拿過來,經過不斷刪除一些jar文件而後重啓發布服務看有沒有問題的方法來刪除多餘的jar文件。

2.3.二、客戶端

public static void clientProxyFactoryBean (String param) {
    ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
    factory.setServiceClass(HelloWorld.class);
    factory.setAddress("http://localhost:9000/Hello");
    HelloWorld serice = (HelloWorld) factory.create();
    System.out.println(serice.sayHi(param));
}

2.四、調用完整代碼

package com.inspur.ws;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

import com.inspur.ws.cxf.server.HelloWorld;

/**
 * CXF調用WebService
 *
 */
public class CXF {
    /**
     * Client方式
     * @param param
     */
    public static void client(String param) {
        try {
            JaxWsDynamicClientFactory factroy = JaxWsDynamicClientFactory.newInstance();
            //DynamicClientFactory factroy = DynamicClientFactory.newInstance();
            Client client = factroy.createClient("http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl");
            Object[] results = client.invoke("toTraditionalChinese", param);
            System.out.println("client方式:" + results[0]);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * wsdl2java方式
     * @param param
     */
    public static void wsdl2java(String param) {
        com.inspur.ws.cxf.TraditionalSimplifiedWebService service = new com.inspur.ws.cxf.TraditionalSimplifiedWebService();
        com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port = service.getTraditionalSimplifiedWebServiceSoap();
        String reuslt = port.toTraditionalChinese(param);
        System.out.println("wsdl2java方式:" + reuslt);
        
        com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port2 = service.getTraditionalSimplifiedWebServiceSoap12();
        reuslt = port2.toTraditionalChinese(param);
        System.out.println("wsdl2java方式2:" + reuslt);
    }
    
    /**
     * Simple Frontend Client Proxy方式
     * @param param
     */
    public static void clientProxyFactoryBean (String param) {
        ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
        factory.setServiceClass(HelloWorld.class);
        factory.setAddress("http://localhost:9000/Hello");
        HelloWorld serice = (HelloWorld) factory.create();
        System.out.println("Simple Frontend Client Proxy方式:" + serice.sayHi(param));
    }
    
    public static void main(String[] args) {
        client("小學");
        wsdl2java("大學");
        clientProxyFactoryBean("小學");
    }
}
View Code
相關文章
相關標籤/搜索