CXF客户端代码生成与服务调用(二)
通过命令行操作:
[plain] 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如下:
[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); } }
调用服务端的方法,控制台打印如下:
[html] Invoking sayHi... sayHi.result=Hello,张三 Invoking sayHiToUser... sayHiToUser.result=Hello,王明 Invoking sayHiToUserList... sayHiToUserList.result=[Hello 马三立, Hello 郭德纲]
这样,远程客户端调用webService也成功了。