XFire开发客户端几种方式的示例_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > XFire开发客户端几种方式的示例

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

 2013/12/3 18:26:09  yimeng528  程序员俱乐部  我要评论(0)
  • 摘要:目录:概述根据默认配置实现代理客户端根据JSR181注解实现代理客户端根据WSDL自动生成客户端代码动态客户端的实现[一]、概述以XFirewebservice入门开发实例中发布的服务端为例,WSDL:http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService。创建一个客户端调用的工程:mvnarchetype:create-DgroupId=com.micmiu.xfire.demo
  • 标签:方式 客户 开发 客户端

目录:

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

[一]、概述

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

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

class="brush: bash; gutter: true; first-line: 1">mvn archetype:create -DgroupId=com.micmiu.xfire.demo -DartifactId=xfire-client-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

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

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

package com.micmiu.xfire.demo.client;

import javax.jws.WebService;

/**
 *
 * @blog http://www.micmiu.com
 * @author Michael
 */
public interface HelloWorldService {

	/**
	 * return welcome
	 * @param username
	 * @return
	 */
	String sayHello(String username);

}

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

package com.micmiu.xfire.demo.client;

import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

/**
 *
 * @blog http://www.micmiu.com
 * @author Michael
 */
public class HelloClient4Default {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		String wsURL = "http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService";
		try {
			System.out.println(" ----> 初始客户端 <---- ");
			Service serviceModel = new ObjectServiceFactory()
					.create(HelloWorldService.class);

			// Service serviceModel = new ObjectServiceFactory().create(
			// HelloWorldService.class, "HelloWorldService",
			// "http://demo.xfire.micmiu.com/HelloWoldService", null);

			HelloWorldService client = (HelloWorldService) new XFireProxyFactory()
					.create(serviceModel, wsURL);
			System.out.println(client.sayHello("Michael"));
			System.out.println(" ----> 客户端调用结束 <---- ");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

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

运行日志:

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

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

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

package com.micmiu.xfire.demo.client;

import javax.jws.WebService;

/**
 *
 * @blog http://www.micmiu.com
 * @author Michael
 */
@WebService
public interface HelloWorldService {

	/**
	 * return welcome
	 * @param username
	 * @return
	 */
	String sayHello(String username);

}

编写客户端代码:HelloClient4JSR181Annotation.java

package com.micmiu.xfire.demo.client;

import org.codehaus.xfire.annotations.AnnotationServiceFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;

/**
 *
 * @blog http://www.micmiu.com
 * @author Michael
 */
public class HelloClient4JSR181Annotation {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		String wsURL = "http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService";
		try {
			System.out.println(" ----> 初始客户端 <---- ");
			Service serviceModel = new AnnotationServiceFactory()
					.create(HelloWorldService.class);

			HelloWorldService client = (HelloWorldService) new XFireProxyFactory()
					.create(serviceModel, wsURL);
			System.out.println(client.sayHello("Michael"));
			System.out.println(" ----> 客户端调用结束 <---- ");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

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

运行日志:

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

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

目录结构如下:

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

运用WsGen命令生成代码:

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

package com.micmiu.xfire.demo.base.client;

/**
 *
 * @blog http://www.micmiu.com
 * @author Michael
 */
public class HelloWorldGenClientTest {

	public static void main(String[] args) throws Exception {

		System.out.println(" ----> 初始客户端 <---- ");
		HelloWorldServiceClient service = new HelloWorldServiceClient();
		HelloWorldServicePortType client = service
				.getHelloWorldServiceHttpPort();

		System.out.println(client.sayHello("Michael"));
		System.out.println(" ----> 客户端调用结束 <---- ");

	}
}

运行结果:

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

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

编写测试代码:HelloClient4Dynamic.java

package com.micmiu.xfire.demo.client;

import java.net.URL;

import org.codehaus.xfire.client.Client;

/**
 *
 * @blog http://www.micmiu.com
 * @author Michael
 */
public class HelloClient4Dynamic {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		String wsURL = "http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService?wsdl";
		try {
			System.out.println(" ----> 初始客户端 <---- ");
			Client client = new Client(new URL(wsURL));

			Object[] results = client.invoke("sayHello",
					new Object[] { "Michael" });

			System.out.println(results[0]);
			System.out.println(" ----> 客户端调用结束 <---- ");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

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

运行结果:

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