一: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配置文件中我們定義了一個testWebService的bean,該bean訪問wsdlDocumentUrl為http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl的WSDL。該xml文件的詳細內容如下:














在WebServiceClientTest.java文件中獲得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有點幫助。