使用XFire框架实现WebService接口的实践

Posted on 2012-09-25 21:41  关心  阅读(255)  评论(0编辑  收藏  举报

    开发服务端:
1.下载需要的包:http://xfire.codehaus.org/Download
2.创建项目名称为XfireWebService的Web项目,并且导入jar。
3.创建IReaderObject接口。
4.创建实现接口的ReaderObjectImpl类。
5.在项目的src目录下创建META-INF文件夹,再在META-INF文件夹下创建xfire文件夹。

 


6.在xfire文件夹下创建services.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://xfire.codehaus.org/config/1.0">
     <service>
         <!-- webserviceq名称,调用时需要指定这个 -->
         <name>ReaderService</name>
         <!-- 这个一般是自己公司的网址,意义不大 -->
         <namespace>http://www.douban.com/people/happy829</namespace>
         <!-- 接口类 -->
         <serviceClass>com.cn.service.IReaderObject</serviceClass>
         <!-- 实现类 -->
         <implementationClass>com.cn.service.impl.ReaderObjectImpl</implementationClass>
     </service>
 </beans>
7.在web.xml文件里添加如下内容(添加到<web-app>节点中):
<servlet>
         <servlet-name>XFireServlet</servlet-name>
         <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
     </servlet>
     <servlet-mapping>
         <servlet-name>XFireServlet</servlet-name>
         <url-pattern>/services/*</url-pattern>
     </servlet-mapping>
8.发布项目并且部署到tomact,并且在IE里输入http://localhost:8080/XfireWebService/services/ReaderService?wsdl,截图如下:

 


 开发客户端:
第一种实现方式:通过WebService服务端提供的接口来创建客户端,源码如下:
/**
                 *
                 * 第一种方法:通过WebService服务端提供的接口来创建客户端
                 * 客户端必须提供一个与服务端完全一致的接口,包明也要一致
                 * 本例中需要在客户端提供IReaderObject接口
                 */
                
                Service srcModel=new ObjectServiceFactory().create(IReaderObject.class);
                XFireProxyFactory factory=new XFireProxyFactory(XFireFactory.newInstance().getXFire());
                String ServiceUrl="http://localhost:8080/XfireWebService/services/ReaderService";
                try
                {
                        IReaderObject readerObject=(IReaderObject)factory.create(srcModel,ServiceUrl);
                        
                        String str=readerObject.GetObject("张三", 18, "北京市");
                        System.out.println(str);
                                
                }
                catch(Exception ex)
                {
                        ex.printStackTrace();
                }
客户端输入结果:

 


第二种实现方式:通过wsdl地址来创建动态客户端,源代码如下:
/**
                 * 第二种方式
                 * 通过wsdl地址来创建动态客户端
                 */
                
                try
                {
                        String ServiceUrl="http://localhost:8080/XfireWebService/services/ReaderService?wsdl";
                        Client client=new Client(new URL(ServiceUrl));
                        Object[] result=client.invoke("GetObject", new Object[]{"李斯",12,"上海市"});
                        System.out.println(result[0]);
                }
                catch(Exception ex)
                {
                        ex.printStackTrace();
                }
输出结果:

 

Copyright © 2024 关心
Powered by .NET 9.0 on Kubernetes