最近正在学习中,敲了一个完整的入门例子,让大家一同分享下:
介绍下什么是Xfire:
XFire 是 codeHaus 组织提供的一个开源框架,它构建了 POJO 和 SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用,简化了 Java 应用转化为 Web 服务的步骤和过程,也直接降低了 SOA 的实现难度,为企业转向 SOA 架构提供了一种简单可行的方式。
XFire 目前最新的版本是 1.2.2,目前支持的特性主要包括:
支持将 Web 服务绑定到 POJO、XMLBeans、JAXB1.1、JAXB2.0 和 Castor;
支持基于 HTTP、JMS、XMPP 等多种协议访问 Web 服务;
支持多种 Web 服务业界重要标准如 SOAP、WSDL、Web 服务寻址(WS-Addressing)、Web 服务安全(WS-Security)等;
支持 JSR181,可以通过 JDK5 配置 Web 服务;
高性能的 SOAP 实现;
服务器端、客户端代码辅助生成;
对 Spring、Pico、Plexus 等项目的支持等。
好了,我们开始第一例子!
首先我们创建一个叫myWebServices_server的WebServices程序,也可以直接创建一个web程序,自己导入xfire的支持jar包,但是需要自己加入services.xml配置文件,在你下载的zip中可以找到,通常情况下,我们会和spring整合,就不需要加入services.xml文件,直接在spring中的配置文件中配置需要发布的服务,这里就不和spring整合了!
首先外面创建一个接口类:
package com.lzy.dao;
public interface SayHello {
String sayHello(String name);
}
创建接口实现类:
package com.lzy.dao;
public class SayHelloImpi implements SayHello {
public String sayHello(String name) {
return name+"您好!欢迎学习webserivces! ";
}
}
记得我们需要在web.xml文件中加入如下配置,不然服务是发布不了的:
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
然后在/WebRoot/WebServices/services.xml文件中加入如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<!--配置一个要发布的服务-->
<service>
<name>dongdong</name>
<namespace>http://luodongmei.com</namespace>
<serviceClass>com.lzy.dao.SayHelloImpi</serviceClass>
</service>
</beans>
好了服务端是好了
测试,输入:http://localhost:8080/webapp/services/dongdong?WSDL
如果看到一大堆的配置文件,证明是成功了
下面就开始编写客服端来调用
我们也编写一个接口:
package com.lzy.action;
public interface IServices {
String sayHell(String name);
}
注意这里接口的里面的方法签名一定和你发布的那个接口哪里的方法相同,不然会出问题
然后创建一个servlet,我们就直接访问一个Servlet,在doGet()方法里面加入:
response.setContentType("text/html;charset=gbk");
response.setCharacterEncoding("gbk");
//创建xfire实例,通过工厂获得
XFire xfire=XFireFactory.newInstance().getXFire();
//创建代理工厂
XFireProxyFactory proxy=new XFireProxyFactory(xfire);
try {
//通过代理对象创建服务对象
IServices is=(IServices)proxy.create(new ObjectServiceFactory().create(IServices.class),"http://localhost:8080/MyServices_server/services/dongdong");
PrintWriter out=response.getWriter();
out.println(is.sayHell("李忠意"));
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
最后的结果是:"李忠意,您好!欢迎学习webserivces"!
OK 第一个例子成功!