zoukankan      html  css  js  c++  java
  • XFire WebService demo

    XFire创建WebService实例应用

      XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,
      XFire的配置非常简单,可以非常容易地和Spring集成。
      下载地址:http://xfire.codehaus.org/Download

       一. 使用XFire发布WebService


       1. 创建service接口 

    Java代码  收藏代码
    1.  package com.test.service;  
    2.  import com.test.service.bean.User;  
    3.    
    4.  public interface IHelloService {  
    5.     public String sayHello(String name);  
    6.     public User  getUser(User user);  
    7.     }  
    8. }  

      2.创建Service接口的实现类

    Java代码  收藏代码
    1. package com.test.service;  
    2. import com.test.service.bean.User;  
    3. public class HelloService implements IHelloService{   
    4.     public String sayHello(String name){  
    5.         return "Hello, "+name;  
    6.     }  
    7.     public User getUser(User user) {  
    8.         User userNew = new User();  
    9.         userNew.setId("new:"+user.getId());  
    10.         userNew.setName("new:"+user.getName());  
    11.         return userNew;  
    12.     }  
    13. }  

      

    Java代码  收藏代码
    1. package com.test.service.bean;  
    2. public class User {       
    3.     private String id;  
    4.     private String name;      
    5.     public String getId() {  
    6.         return id;  
    7.     }  
    8.     public void setId(String id) {  
    9.         this.id = id;  
    10.     }  
    11.     public String getName() {  
    12.         return name;  
    13.     }  
    14.     public void setName(String name) {  
    15.         this.name = name;  
    16.     }  
    17. }  

     

    3.在web.xml文件中进行XFire拦截配置,可参照官网提供的sample。

    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
    3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
    5.    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
    6.   
    7. <servlet>  
    8.     <servlet-name>XFireServlet</servlet-name>  
    9.     <servlet-class>  
    10.         org.codehaus.xfire.transport.http.XFireConfigurableServlet  
    11.     </servlet-class>  
    12. </servlet>  
    13. <servlet-mapping>  
    14.     <servlet-name>XFireServlet</servlet-name>  
    15.     <url-pattern>/servlet/XFireServlet/*</url-pattern>  
    16. </servlet-mapping>  
    17. <servlet-mapping>  
    18.     <servlet-name>XFireServlet</servlet-name>  
    19.     <url-pattern>/services/*</url-pattern>  
    20. </servlet-mapping>  
    21. </web-app>  

     4.在class目录下建立META-INF目录,如(META-INF>xifre->services.xml),
        在services.xml文件中进行webservice服务的发布,可参照官网提供的sample。 

    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <beans xmlns="http://xfire.codehaus.org/config/1.0">  
    3. <service>  
    4.     <name>HelloService</name>  
    5.     <serviceClass>com.test.service.IHelloService</serviceClass>  
    6.     <implementationClass>com.test.service.HelloService</implementationClass>  
    7. </service>      
    8. </beans>  

    5.将xfire的Jar包和相关依赖包拷到系统应用中,在Tomcat下部署应用。
       启动tomcat后访问服务(需在应用后加上/services,webservice才会进行拦截):
       例:http://localhost:8080/ws2/services。(IE下有时无法显示列表,可用其它浏览器显示或指定接口名称)
       界面如下:   

     

     点击后查看详细的wsdl文档,不同的浏览器下访问会有区别,展示效果不一致。

       二.建立XFire客户端进行调用

      

        1.本地客户端调用,与webservice服务在同一应用。

    Java代码  收藏代码
    1. package com.test.client;  
    2.   
    3. import java.net.MalformedURLException;  
    4. import org.codehaus.xfire.XFireFactory;  
    5. import org.codehaus.xfire.client.XFireProxyFactory;  
    6. import org.codehaus.xfire.service.Service;  
    7. import org.codehaus.xfire.service.binding.ObjectServiceFactory;  
    8. import com.test.service.IHelloService;  
    9. import com.test.service.bean.User;  
    10.   
    11. public class ClientTest {  
    12.     public static void main(String args[]) throws MalformedURLException {  
    13.         Service service = new ObjectServiceFactory().create(IHelloService.class);  
    14.         XFireProxyFactory factory = new XFireProxyFactory(XFireFactory  
    15.                 .newInstance().getXFire());  
    16.         String url = "http://localhost:8080/ws2/services/HelloService";  
    17.         IHelloService helloService = (IHelloService) factory.create(service,url);  
    18.         System.out.println(helloService.sayHello("张三"));  
    19.         User user = new User();  
    20.         user.setName("张三");  
    21.         System.out.println(helloService.getUser(user).getName());  
    22.     }  
    23. }  

     
         执行结果如下:

    Java代码  收藏代码
    1. Hello, 张三  
    2. new:张三  

       2. 利用XFire创建build.xml文件生成客户端代码调用webservice服务

      

         2.1在src目录下创建build.properties文件,配置如下:

    Java代码  收藏代码
    1. src.dir=${basedir}  
    2. lib.dir=D:/myspace/ws2/WebRoot/WEB-INF/lib  
    3. wsdl.dir=http://localhost:8080/ws2/services/HelloService?wsdl  

         2.2在src目录下创建build.xml文件,配置如下:

    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <project name="WebService" basedir="." default="gen-webservice">  
    3.     <property file="build.properties"></property>  
    4.     <path id="project-classpath">  
    5.         <fileset dir="${lib.dir}">  
    6.             <include name="**/*.jar" />   
    7.         </fileset>  
    8.     </path>  
    9.   
    10.     <target name="gen-webservice">  
    11.         <taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask"   
    12.                                              classpathref="project-classpath" />  
    13.         <wsgen outputDirectory="${src.dir}"  wsdl="${wsdl.dir}"   
    14.                     package="stub.test.client" overwrite="true"/>          
    15.     </target>  
    16. </project>  

        

         用ant构建生成代码,生成后的目录如下:

     

         2.3编写客户端代码进行调用

    Java代码  收藏代码
    1. package com.test.client;  
    2. import stub.test.client.HelloServiceClient;  
    3. import stub.test.client.HelloServicePortType;  
    4. import com.test.service.bean.ObjectFactory;  
    5. import com.test.service.bean.User;  
    6.   
    7. public class HelloServiceTest {  
    8.   
    9.     public static void main(String args[]){  
    10.         HelloServiceClient service = new HelloServiceClient();        
    11.         HelloServicePortType portType = service.getHelloServiceHttpPort();            
    12.         System.out.println(portType.sayHello("张三"));  
    13.           
    14.         ObjectFactory factory = new ObjectFactory();          
    15.         User user = factory.createUser();  
    16.         user.setName(factory.createUserName("张三"));  
    17.         System.out.println(portType.getUser(user).getName().getValue());  
    18.     }  
    19. }  

        执行结果如下:

    Java代码  收藏代码
      1. Hello, 张三  
      2. new:张三  

    原文:http://linshow26.iteye.com/blog/2004080

  • 相关阅读:
    默认使用什么序列化框架,你知道的还有哪些?
    一般使用什么注册中心?还有别的选择吗?
    Dubbo 的整体架构设计有哪些分层?
    Java 中是如何支持正则表达式操作的?
    Dubbo 集群容错有几种方案?
    Dubbo 推荐用什么协议?
    说说核心的配置有哪些?
    Dubbo 如何优雅停机?
    Dubbo 必须依赖的包有哪些?
    服务上线怎么兼容旧版本?
  • 原文地址:https://www.cnblogs.com/sdream/p/5887913.html
Copyright © 2011-2022 走看看