XFire开发客户端几种方式的示例

目录:

  1. 概述
  2. 根据默认配置实现代理客户端
  3. 根据JSR 181注解实现代理客户端
  4. 根据WSDL自动生成客户端代码
  5. 动态客户端的实现

[一]、概述

以 XFire webservice入门开发实例 中发布的服务端为例,WSDL:http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService

创建一个客户端调用的工程:

1mvn archetype:create -DgroupId=com.micmiu.xfire.demo -DartifactId=xfire-client-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

[二]、根据默认配置实现代理客户端

首先:编写一个像之前文章中服务端一样的服务接口类:HelloWorldService.java

1package com.micmiu.xfire.demo.client;
2 
3import javax.jws.WebService;
4 
5/**
6 *
8 * @author Michael
9 */
10public interface HelloWorldService {
11 
12    /**
13     * return welcome
14     * @param username
15     * @return
16     */
17    String sayHello(String username);
18 
19}

客户端调用测试类:HelloClient4Default.java

1package com.micmiu.xfire.demo.client;
2 
3import org.codehaus.xfire.client.XFireProxyFactory;
4import org.codehaus.xfire.service.Service;
5import org.codehaus.xfire.service.binding.ObjectServiceFactory;
6 
7/**
8 *
10 * @author Michael
11 */
12public class HelloClient4Default {
13 
14    /**
15     * @param args
16     */
17    public static void main(String[] args) {
18 
20        try {
21            System.out.println(" ----> 初始客户端 <---- ");
22            Service serviceModel = new ObjectServiceFactory()
23                    .create(HelloWorldService.class);
24 
25            // Service serviceModel = new ObjectServiceFactory().create(
26            // HelloWorldService.class, "HelloWorldService",
27            // "http://demo.xfire.micmiu.com/HelloWoldService", null);
28 
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) {
34            e.printStackTrace();
35        }
36 
37    }
38}

ps:注意代码中的 webservice的URL 没有后缀 ?wsdl

运行日志:

 ----> 初始客户端 <----
Hi,Michael welcome,see more http://www.micmiu.com
 ----> 客户端调用结束 <----

[三]、根据JSR 181注解实现代理客户端

修改上面 [一] 中的服务接口类,添加@webService 注解:HelloWorldService.java

1package com.micmiu.xfire.demo.client;
2 
3import javax.jws.WebService;
4 
5/**
6 *
8 * @author Michael
9 */
10@WebService
11public interface HelloWorldService {
12 
13    /**
14     * return welcome
15     * @param username
16     * @return
17     */
18    String sayHello(String username);
19 
20}

编写客户端代码:HelloClient4JSR181Annotation.java

1package com.micmiu.xfire.demo.client;
2 
3import org.codehaus.xfire.annotations.AnnotationServiceFactory;
4import org.codehaus.xfire.client.XFireProxyFactory;
5import org.codehaus.xfire.service.Service;
6 
7/**
8 *
10 * @author Michael
11 */
12public class HelloClient4JSR181Annotation {
13 
14    /**
15     * @param args
16     */
17    public static void main(String[] args) {
18 
20        try {
21            System.out.println(" ----> 初始客户端 <---- ");
22            Service serviceModel = new AnnotationServiceFactory()
23                    .create(HelloWorldService.class);
24 
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) {
30            e.printStackTrace();
31        }
32 
33    }
34 
35}

ps:注意代码中的 webservice的URL 没有后缀 ?wsdl

运行日志:

 ----> 初始客户端 <----
Hi,Michael welcome,see more http://www.micmiu.com
 ----> 客户端调用结束 <----

[四]、根据WSDL自动生成客户端代码

目录结构如下:

E:\software code\xFire>tree
├─client-src
│
└─lib

运用WsGen命令生成代码:

1java -cp .;./lib/* org.codehaus.xfire.gen.WsGen -wsdl http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService?wsdl -o ./client-src -p com.micmiu.xfire.demo.base.client -overwrite true

参数说明:

  • -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

1package com.micmiu.xfire.demo.base.client;
2 
3/**
4 *
6 * @author Michael
7 */
8public class HelloWorldGenClientTest {
9 
10    public static void main(String[] args) throws Exception {
11 
12        System.out.println(" ----> 初始客户端 <---- ");
13        HelloWorldServiceClient service = new HelloWorldServiceClient();
14        HelloWorldServicePortType client = service
15                .getHelloWorldServiceHttpPort();
16 
17        System.out.println(client.sayHello("Michael"));
18        System.out.println(" ----> 客户端调用结束 <---- ");
19 
20    }
21}

运行结果:

 ----> 初始客户端 <----
Hi,Michael welcome,see more http://www.micmiu.com
 ----> 客户端调用结束 <----

[五]、动态客户端的实现

编写测试代码:HelloClient4Dynamic.java

1package com.micmiu.xfire.demo.client;
2 
3import java.net.URL;
4 
5import org.codehaus.xfire.client.Client;
6 
7/**
8 *
10 * @author Michael
11 */
12public class HelloClient4Dynamic {
13 
14    /**
15     * @param args
16     */
17    public static void main(String[] args) {
18 
20        try {
21            System.out.println(" ----> 初始客户端 <---- ");
22            Client client = new Client(new URL(wsURL));
23 
24            Object[] results = client.invoke("sayHello",
25                    new Object[] { "Michael" });
26 
27            System.out.println(results[0]);
28            System.out.println(" ----> 客户端调用结束 <---- ");
29        } catch (Exception e) {
30            e.printStackTrace();
31        }
32 
33    }
34}

ps:注意代码中的 webservice的URL 后缀 ?wsdl

运行结果:

 ----> 初始客户端 <----
Hi,Michael welcome,see more http://www.micmiu.com
 ----> 客户端调用结束 <----


本文链接地址: http://www.micmiu.com/soa/webservice/xfire-clients-demo/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值