一. 介绍
XFire是下一代的java SOAP框架。XFire提供了非常方便的API,使用
这些API可以开发面向服务(SOA)的程序。
支持多个重要的Web Service标准,包括SOAP、WSDL、WS-I Basic Profile、WSAddressing
、WS-Security等
? 高性能的SOAP栈
? 可选的绑定(binding)方式,如POJO、XMLBeans,JAXB1.1、JAXB2.0、Castor和JiBX等
? 支持JSR181 API
? 多种传输方式,如HTTP、JMS、XMPP、In-JVM等
? 灵活的接口
? 支持多个容器,如Spring、Pico、Plexus、Loom
? 支持JBI,参看servicemix项目(http://servicemix.org)
? 客户端和服务器代码生成
二.简单例子
A.发布web service
1.新建一个web 工程,加入xfire所依赖的lib,配置web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<display-name>XFire Servlet</display-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
在这个web.xml文件中定义了一个 XfireServlet,它负责提供Web Services,并提供每个Web Service的WSDL。通过网址http://<server_url[:port]>/<context>/services/XXXXService?WSDL得到这个Web Service的WSDL信息。
2.编写要发布的接口和实现,与普通的POJO没有任何区别。
package cn.cares;
public interface HelloService {
public String hello(String name);
}
package cn.cares;
public class HelloServiceImpl implements HelloService {
public String hello(String name) {
// TODO Auto-generated method stub
return "HI,"+name!=null? name:"Guest";
}
}
3.在源文件src目录下新建 META-INF/xfire/services.xml,编译发布时会复制到WEB-INF/classes/META-INF/xfire下.
services.xml: (写法有很多,要多研究下)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloService</name>
<namespace>http://cn.cares/HelloService</namespace>
<serviceClass>cn.cares.HelloService</serviceClass>
<implementationClass>cn.cares.HelloServiceImpl</implementationClass>
</service>
</beans>
4.发布到web server 上,访问: http://localhost:8080/web_project_name/services
就可看到所发布的web service, 后面的蓝色的链接,就会得到这个Web Service
的WSDL信息。
B 客户端访问
方法一:
1.如果web service发布成功了,就要看如何使用这web service
根据WSDL生成客户端代码,我们采用eclipse plugin 这样更简单,也可采用ant
具体xfire插件安装: Help ->Software Updates->Find and Install->Search for new features to install->Create New Remote Site,并输入"XFire" 名字和http://dist.codehaus.org/xfire/update/ eclipse 更新站点。
2.File->new ->Other->XFire->Code generation from WSDL document
输入WSDL URL或PATH,以及要生成的客户端代码目录。
3.测试:
import cares.cn.helloservice.HelloServiceClient;
import cares.cn.helloservice.HelloServicePortType;
public class Test {
public static void main(String[] args) {
HelloServiceClient client = new HelloServiceClient();
HelloServicePortType helloService = client.getHelloServiceHttpPort();
// 调用服务
String result = helloService.hello("Tome");
System.out.println("结果:" + result);
}
}
注意: 当运行时可能失败,是因为提示缺少jar包,因此,要将commons-codec-1.3.jar和commons-httpclient-3.0.jar只放到lib中并在工程中引用
如果输出:HI,Tome 说明客户端调用web service 成功。整个过程就完成了。
方法二:
直接动态访问web service,测试代码如下:
import java.net.MalformedURLException;
import java.net.URL;
import org.codehaus.xfire.client.Client;
public class Test2 {
public static void main(String[] args) throws MalformedURLException,Exception {
Client client = new Client(
new URL(
"http://localhost:8080/ws/services/HelloService?wsdl"));
Object[] results = client.invoke("hello", new Object[] { "Tome" });
//invoke的第一个参数你要调用的方法,第二参数表示调用方法传递的参数
System.out.println((String) results[0]);
}
}