目录:
- 概述
- 根据默认配置实现代理客户端
- 根据JSR 181注解实现代理客户端
- 根据WSDL自动生成客户端代码
- 动态客户端的实现
[一]、概述
以 XFire webservice入门开发实例 中发布的服务端为例,WSDL:http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService 。
创建一个客户端调用的工程:
1 | mvn archetype:create -DgroupId=com.micmiu.xfire.demo -DartifactId=xfire-client-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode= false |
[二]、根据默认配置实现代理客户端
首先:编写一个像之前文章中服务端一样的服务接口类:HelloWorldService.java
1 | package com.micmiu.xfire.demo.client; |
3 | import javax.jws.WebService; |
10 | public interface HelloWorldService { |
17 | String sayHello(String username); |
客户端调用测试类:HelloClient4Default.java
1 | package com.micmiu.xfire.demo.client; |
3 | import org.codehaus.xfire.client.XFireProxyFactory; |
4 | import org.codehaus.xfire.service.Service; |
5 | import org.codehaus.xfire.service.binding.ObjectServiceFactory; |
12 | public class HelloClient4Default { |
17 | public static void main(String[] args) { |
21 | System.out.println( " ----> 初始客户端 <---- " ); |
22 | Service serviceModel = new ObjectServiceFactory() |
23 | .create(HelloWorldService. class ); |
29 | HelloWorldService client = (HelloWorldService) new XFireProxyFactory() |
30 | .create(serviceModel, wsURL); |
31 | System.out.println(client.sayHello( "Michael" )); |
32 | System.out.println( " ----> 客户端调用结束 <---- " ); |
33 | } catch (Exception e) { |
ps:注意代码中的 webservice的URL 没有后缀 ?wsdl
运行日志:
----> 初始客户端 <----
Hi,Michael welcome,see more http://www.micmiu.com
----> 客户端调用结束 <----
[三]、根据JSR 181注解实现代理客户端
修改上面 [一] 中的服务接口类,添加@webService 注解:HelloWorldService.java
1 | package com.micmiu.xfire.demo.client; |
3 | import javax.jws.WebService; |
11 | public interface HelloWorldService { |
18 | String sayHello(String username); |
编写客户端代码:HelloClient4JSR181Annotation.java
1 | package com.micmiu.xfire.demo.client; |
3 | import org.codehaus.xfire.annotations.AnnotationServiceFactory; |
4 | import org.codehaus.xfire.client.XFireProxyFactory; |
5 | import org.codehaus.xfire.service.Service; |
12 | public class HelloClient4JSR181Annotation { |
17 | public static void main(String[] args) { |
21 | System.out.println( " ----> 初始客户端 <---- " ); |
22 | Service serviceModel = new AnnotationServiceFactory() |
23 | .create(HelloWorldService. class ); |
25 | HelloWorldService client = (HelloWorldService) new XFireProxyFactory() |
26 | .create(serviceModel, wsURL); |
27 | System.out.println(client.sayHello( "Michael" )); |
28 | System.out.println( " ----> 客户端调用结束 <---- " ); |
29 | } catch (Exception e) { |
ps:注意代码中的 webservice的URL 没有后缀 ?wsdl
运行日志:
----> 初始客户端 <----
Hi,Michael welcome,see more http://www.micmiu.com
----> 客户端调用结束 <----
[四]、根据WSDL自动生成客户端代码
目录结构如下:
E:\software code\xFire>tree
├─client-src
│
└─lib
运用WsGen命令生成代码:
参数说明:
- -wsdl : 指定wsdl文件或者URL
- -o : 指定输出目录
- -package : 指定客户端代码的包结构
- -binding : 指定绑定:jaxb 或 xmlbeans
- -overwrite : 指定是否覆盖
运行日志:
E:\software code\xFire>java -cp .;./lib/* org.codehaus.xfire.gen.WsGen -wsdl htt
p://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService?wsdl -o ./cl
ient-src -p com.micmiu.xfire.demo.base.client -overwrite true
Running WsGen...
wsdl : http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService
?wsdl
package : com.micmiu.xfire.demo.base.client
output : ./client-src
binding :
externalBindings :
baseURI :
profile :
explictAnnotation : false
overwrite : true
serverStub : true
forceBare : false
2012-7-30 18:26:22 org.codehaus.xfire.gen.Wsdl11Generator generate
信息: Generating code for WSDL at http://demo.micmiu.com:8080/xfire-base-demo/se
rvices/HelloWorldService?wsdl with a base URI of http://demo.micmiu.com:8080/xfi
re-base-demo/services/HelloWorldService?wsdl
2012-7-30 18:26:23 org.codehaus.xfire.gen.jsr181.AbstractServiceGenerator genera
te
信息: Creating class com.micmiu.xfire.demo.base.client.HelloWorldServicePortType
2012-7-30 18:26:23 org.codehaus.xfire.gen.jsr181.AbstractServiceGenerator genera
te
信息: Creating class com.micmiu.xfire.demo.base.client.HelloWorldServiceImpl
com\micmiu\xfire\demo\hellowoldservice\ObjectFactory.java
com\micmiu\xfire\demo\hellowoldservice\SayHello.java
com\micmiu\xfire\demo\hellowoldservice\SayHelloResponse.java
com\micmiu\xfire\demo\hellowoldservice\package-info.java
com\micmiu\xfire\demo\base\client\HelloWorldServiceClient.java
com\micmiu\xfire\demo\base\client\HelloWorldServiceImpl.java
com\micmiu\xfire\demo\base\client\HelloWorldServicePortType.java
Done.
客户端代码生成后的目录结构如下:
E:\software code\xFire>tree /F client-src
卷 tools 的文件夹 PATH 列表
卷序列号为 AA19-63C1
E:\SOFTWARE CODE\XFIRE\CLIENT-SRC
├─com
│ └─micmiu
│ └─xfire
│ └─demo
│ ├─base
│ │ └─client
│ │ HelloWorldServiceClient.java
│ │ HelloWorldServiceImpl.java
│ │ HelloWorldServicePortType.java
│ │
│ └─hellowoldservice
│ ObjectFactory.java
│ package-info.java
│ SayHello.java
│ SayHelloResponse.java
│
└─META-INF
└─xfire
services.xml
把上面的源代码copy到项目中即可,编写测试代码:HelloWorldGenClientTest.java
1 | package com.micmiu.xfire.demo.base.client; |
8 | public class HelloWorldGenClientTest { |
10 | public static void main(String[] args) throws Exception { |
12 | System.out.println( " ----> 初始客户端 <---- " ); |
13 | HelloWorldServiceClient service = new HelloWorldServiceClient(); |
14 | HelloWorldServicePortType client = service |
15 | .getHelloWorldServiceHttpPort(); |
17 | System.out.println(client.sayHello( "Michael" )); |
18 | System.out.println( " ----> 客户端调用结束 <---- " ); |
运行结果:
----> 初始客户端 <----
Hi,Michael welcome,see more http://www.micmiu.com
----> 客户端调用结束 <----
[五]、动态客户端的实现
编写测试代码:HelloClient4Dynamic.java
1 | package com.micmiu.xfire.demo.client; |
5 | import org.codehaus.xfire.client.Client; |
12 | public class HelloClient4Dynamic { |
17 | public static void main( String [] args) { |
21 | System.out.println( " ----> 初始客户端 <---- " ); |
22 | Client client = new Client( new URL(wsURL)); |
24 | Object [] results = client.invoke( "sayHello" , |
25 | new Object [] { "Michael" }); |
27 | System.out.println(results[ 0 ]); |
28 | System.out.println( " ----> 客户端调用结束 <---- " ); |
29 | } catch (Exception e) { |
ps:注意代码中的 webservice的URL 有后缀 ?wsdl
运行结果:
----> 初始客户端 <----
Hi,Michael welcome,see more http://www.micmiu.com
----> 客户端调用结束 <----
—
本文链接地址: http://www.micmiu.com/soa/webservice/xfire-clients-demo/