使用XFire+Spring构建Web Service

使用XFire+Spring构建Web Service

一:web service 建立
1:web.xml配置

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- START SNIPPET: webxml -->
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
   
<web-app>

  <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>/*</url-pattern>
  </servlet-mapping>
</web-app>
<!-- END SNIPPET: webxml -->
2 :Web Service的接口类HelloWorld.java和对应实现类HelloWorldImpl.java

package test;

import java.util.List;

public interface IHelloService {
 public String hw();
 
 public String sayHello(String ttt);

 public Course choose(User u);

 public List test(List t);
}

package test;

import java.util.List;

public interface IHelloService {
 public String hw();
 
 public String sayHello(String ttt);

 public Course choose(User u);

 public List test(List t);
}

3:web service.xml文件配置
这个services.xml一定要放在META-INF/xfire/文件夹下面
<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://xfire.codehaus.org/config/1.0">
   <service>
       <name>HelloService</name>
        <namespace>http://test/HelloService</namespace>
       <serviceClass>test.IHelloService</serviceClass>
       <implementationClass>test.HelloServiceImpl</implementationClass>
   </service>
</beans>
二:webservice的访问
1:通过接口类访问
Service srvcModel = new
  * ObjectServiceFactory().create(IHelloService.class); XFireProxyFactory
  * factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
  *
  * String helloWorldURL = url_service+ "HelloService"; try { IHelloService
  * srvc = (IHelloService) factory.create(srvcModel,helloWorldURL);
  * System.out.println(srvc.sayHello("chenbo"));

2 通过WSDL文件生成客户端调用程序

首先我们通过http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl我们可以获得WSDL文件HelloWorldService.wsdl,并将其放在src目录下面,接着我们通过程序访问该WSDL文件,并调用需测试的方法。此时测试类WebServiceClientTest.java的内容如下所示:

import org.codehaus.xfire.client.Client;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class WebServiceClientTest
{
   public static void main(String[] args) throws Exception {
        WebServiceClientTest test = new WebServiceClientTest();
        test.testClient();
     }
    
     public void testClient() throws Exception {
        String wsdl = "HelloService.wsdl"; //对应的WSDL文件
        Resource resource = new ClassPathResource(wsdl);
        Client client = new Client(resource.getInputStream(), null); //根据WSDL创建客户实例
       
        Object[] objArray = new Object[1];
        objArray[0] = "阿蜜果";
        //调用特定的Web Service方法
        Object[] results = client.invoke("sayHello", objArray);
        System.out.println("result: " + results[0]);
     }
}


3)根据服务地址创建客户端调用程序

    接着让我们来看一个根据服务地址创建客户端调用程序的例子。我们可以通过测试类来测试Web Service的正确性,下面让我们来看一个简单的测试类,首先我们在src/test目录建立WebServiceClientTest.java文件,并在src目录下建立客户端调用的Spring配置文件client.xml。在client.xml配置文件中我们定义了一个testWebServicebean,该bean访问wsdlDocumentUrlhttp://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdlWSDL。该xml文件的详细内容如下:

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd"
>
< beans >
    
< bean  id ="testWebService"  class ="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean" >
       
< property  name ="serviceClass" >           
   
< value > webservice.HelloWorld </ value >        
       
</ property >       
        
< property  name ="wsdlDocumentUrl" >          
< value > http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl </ value >        
        
</ property >       
     
</ bean >
</ beans >

     在WebServiceClientTest.java文件中获得HelloWorld,并调用它的sayHelloWorld方法来完成测试,该类的详细内容如下所示:

package  test;

import  org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;
import  webservice.HelloWorld;

/** */ /**
 *HelloWorld的webservice的测试类.
 
*/

publicclass WebServiceClientTest 

    HelloWorld helloWorld 
= null;

    publicstaticvoid main(String[] args) 
{
       WebServiceClientTest test 
= new WebServiceClientTest();
       test.testClient();
    }
 

    publicvoid testClient() 
{
       ApplicationContext ctx 
= new ClassPathXmlApplicationContext(
              
"client.xml");
       helloWorld 
= (HelloWorld) ctx.getBean("testWebService");
       System.out.println(helloWorld.sayHelloWorld(
"阿蜜果"));
    }

}

import java.net.MalformedURLException;
import java.net.URL;

import org.codehaus.xfire.client.Client;

public class DynamicClientTest {
    public static void main(String[] args) throws MalformedURLException,
            Exception {
        Client client = new Client(new URL(
                "http://127.0.0.1:8083/xxx/HelloService?wsdl"));
        Object[] results = client
                .invoke("sayHello", new Object[] { "chenbo test daynamic" });
        System.out.println(results[0]);

    }
}



四.总结

    与Axis 相比,在实施Web Service时XFire更加简洁高效,并且XFire对Spring提供了强大的支持,可以非常方便地在Spring中使用XFire实施Web Service,因此XFire在短短的时间里成为了受Web Service开发者喜爱的框架。

   XFire为客户端提供了多种访问Web Service的方式,如果可以获取客户端的窄接口类,则可以采用窄接口类调用Web Service。如果仅能获取WSDL,XFire也可以采用动态反射的机制调用Web Service。XFire为Eclipse提供了一个可以根据WSDL生成客户端存根代码的插件,相信XFire也将为其它非Java语言提供类似的插 件。

技术可用性的一个很大的标准是它是否方便测试,XFire提供多种方式进行Web Service的测试,简单方便,给Web Service开发人员的测试工作带来了福音。

在 本文中,笔者通过一个简单的helloWorld的Web Service例子,详细地说明了用XFire+Spring构建Web Service时配置文件的相关配置,以及测试的各种方法,也让读者见识了XFire与Spring的无缝集成,希望对读者学习XFire有点帮助。



你可能感兴趣的:(使用XFire+Spring构建Web Service)