1. 程式人生 > >CXF客戶端程式碼生成與服務呼叫(二)

CXF客戶端程式碼生成與服務呼叫(二)

通過命令列操作:

C:\Documents and Settings\hsy
C:\Documents and Settings\hsy>f:
F:\>dir
 驅動器 F 中的卷是 ProData
 卷的序列號是 5C5E-6EE2

F:\ 的目錄
...
2014-08-04  09:19    <DIR>          開源官方原始檔
...

               2 個檔案        687,890 位元組
              15 個目錄 22,354,870,272 可用位元組

F:\>cd "開源官方原始檔"

最終進入F:\開源官方原始檔\CXF\apache-cxf-2.7.12\apache-cxf-2.7.12目錄下,再進入到bin目錄下

F:\開源官方原始檔\CXF\apache-cxf-2.7.12\apache-cxf-2.7.12\bin>wsdl2java -p com.
sy.cxf.client -d e:\ -all http://localhost:8080/cxf/webservice/helloWorld?wsdl

引數說明:
 
-p 也就是package 對應java中的包
-d 輸入目錄,生成.java檔案會在該目錄,會自動新增-p引數配置的包路徑
-client 生成客戶端測試web service的程式碼.
-server 生成伺服器啟動web  service的程式碼.
-impl 生成web service的實現程式碼.
-ant  生成build.xml檔案.
-all 生成上面-client -server -impl -ant 對應的所有檔案.

這樣就會在指定的目錄下按照設定的包名稱生成相應的service客戶端需要生成的程式碼。

然後將生成的程式碼拷貝到新建的cxfClient目錄下,如圖:


開啟HelloWorld_HelloWorldImplPort_Client.java如下:

package com.hsy.cxf.client;

/**
 * Please modify this class to meet your needs
 * This class is not complete
 */

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;

import javax.xml.namespace.QName;

/**
 * This class was generated by Apache CXF 2.7.12
 * 2014-08-04T22:45:09.609+08:00
 * Generated source version: 2.7.12
 * 
 */
public final class HelloWorld_HelloWorldImplPort_Client {

    private static final QName SERVICE_NAME = new QName("http://server.hsy.com/", "HelloWorld");

    private HelloWorld_HelloWorldImplPort_Client() {
    }

    public static void main(String args[]) throws java.lang.Exception {
        URL wsdlURL = HelloWorld_Service.WSDL_LOCATION;
        if (args.length > 0 && args[0] != null && !"".equals(args[0])) { 
            File wsdlFile = new File(args[0]);
            try {
                if (wsdlFile.exists()) {
                    wsdlURL = wsdlFile.toURI().toURL();
                } else {
                    wsdlURL = new URL(args[0]);
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
        }
      
        HelloWorld_Service ss = new HelloWorld_Service(wsdlURL, SERVICE_NAME);
        HelloWorld port = ss.getHelloWorldImplPort();  
        
        {
        System.out.println("Invoking sayHi...");
        java.lang.String _sayHi_text = "張三";
        java.lang.String _sayHi__return = port.sayHi(_sayHi_text);
        System.out.println("sayHi.result=" + _sayHi__return);


        }
        {
        System.out.println("Invoking sayHiToUser...");
        com.hsy.cxf.client.User _sayHiToUser_arg0 = new User();
        _sayHiToUser_arg0.setDescription("王明本人");
        _sayHiToUser_arg0.setName("王明");
        java.lang.String _sayHiToUser__return = port.sayHiToUser(_sayHiToUser_arg0);
        System.out.println("sayHiToUser.result=" + _sayHiToUser__return);


        }
        {
        System.out.println("Invoking sayHiToUserList...");
        java.util.List<com.hsy.cxf.client.User> _sayHiToUserList_arg0 = new ArrayList<User>();
        User user1 = new User();
        user1.setDescription("馬三立本人");
        user1.setName("馬三立");
        _sayHiToUserList_arg0.add(user1);
        User user2 = new User();
        user2.setDescription("郭德綱本人");
        user2.setName("郭德綱");
        _sayHiToUserList_arg0.add(user2);
        java.util.List<java.lang.String> _sayHiToUserList__return = port.sayHiToUserList(_sayHiToUserList_arg0);
        System.out.println("sayHiToUserList.result=" + _sayHiToUserList__return);


        }

        System.exit(0);
    }

}


呼叫服務端的方法,控制檯列印如下:

Invoking sayHi...
sayHi.result=Hello,張三
Invoking sayHiToUser...
sayHiToUser.result=Hello,王明
Invoking sayHiToUserList...
sayHiToUserList.result=[Hello 馬三立, Hello 郭德綱]
這樣,遠端客戶端呼叫webService也成功了。