XFire創建WebService實例應用
XFire使得在JavaEE應用中發佈Web服務變得輕而易舉。和其他Web服務引擎相比,
XFire的配置非常簡單,可以非常容易地和Spring集成。
下載地址:http://xfire.codehaus.org/Download。
一. 使用XFire發佈WebService
1. 創建service接口
- package com.test.service;
- import com.test.service.bean.User;
- public interface IHelloService {
- public String sayHello(String name);
- public User getUser(User user);
- }
- }
2.創建Service接口的實現類
- package com.test.service;
- import com.test.service.bean.User;
- public class HelloService implements IHelloService{
- public String sayHello(String name){
- return "Hello, "+name;
- }
- public User getUser(User user) {
- User userNew = new User();
- userNew.setId("new:"+user.getId());
- userNew.setName("new:"+user.getName());
- return userNew;
- }
- }
- package com.test.service.bean;
- public class User {
- private String id;
- private String name;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
3.在web.xml文件中進行XFire攔截配置,可參照官網提供的sample。
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <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>/servlet/XFireServlet/*</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>XFireServlet</servlet-name>
- <url-pattern>/services/*</url-pattern>
- </servlet-mapping>
- </web-app>
4.在WEB-INF/classes目錄下建立META-INF目錄,如(META-INF>xifre->services.xml),
在services.xml文件中進行webservice服務的發佈,可參照官網提供的sample。
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://xfire.codehaus.org/config/1.0">
- <service>
- <name>HelloService</name>
- <serviceClass>com.test.service.IHelloService</serviceClass>
- <implementationClass>com.test.service.HelloService</implementationClass>
- </service>
- </beans>
5.將xfire的Jar包和相關依賴包拷到系統應用中,在Tomcat下部署應用。
啓動tomcat後訪問服務(需在應用後加上/services,webservice纔會進行攔截):
例:http://localhost:8080/ws2/services。(IE下有時無法顯示列表,可用其它瀏覽器顯示或指定接口名稱)
界面如下:
點擊後查看詳細的wsdl文檔,不同的瀏覽器下訪問會有區別,展示效果不一致。
二.建立XFire客戶端進行調用
1.本地客戶端調用,與webservice服務在同一應用。
- package com.test.client;
- import java.net.MalformedURLException;
- import org.codehaus.xfire.XFireFactory;
- import org.codehaus.xfire.client.XFireProxyFactory;
- import org.codehaus.xfire.service.Service;
- import org.codehaus.xfire.service.binding.ObjectServiceFactory;
- import com.test.service.IHelloService;
- import com.test.service.bean.User;
- public class ClientTest {
- public static void main(String args[]) throws MalformedURLException {
- Service service = new ObjectServiceFactory().create(IHelloService.class);
- XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
- .newInstance().getXFire());
- String url = "http://localhost:8080/ws2/services/HelloService";
- IHelloService helloService = (IHelloService) factory.create(service,url);
- System.out.println(helloService.sayHello("張三"));
- User user = new User();
- user.setName("張三");
- System.out.println(helloService.getUser(user).getName());
- }
- }
執行結果如下:
- Hello, 張三
- new:張三
2. 利用XFire創建build.xml文件生成客戶端代碼調用webservice服務
2.1在src目錄下創建build.properties文件,配置如下:
- src.dir=${basedir}
- lib.dir=D:/myspace/ws2/WebRoot/WEB-INF/lib
- wsdl.dir=http\://localhost\:8080/ws2/services/HelloService?wsdl
2.2在src目錄下創建build.xml文件,配置如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <project name="WebService" basedir="." default="gen-webservice">
- <property file="build.properties"></property>
- <path id="project-classpath">
- <fileset dir="${lib.dir}">
- <include name="**/*.jar" />
- </fileset>
- </path>
- <target name="gen-webservice">
- <taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask"
- classpathref="project-classpath" />
- <wsgen outputDirectory="${src.dir}" wsdl="${wsdl.dir}"
- package="stub.test.client" overwrite="true"/>
- </target>
- </project>
用ant構建生成代碼,生成後的目錄如下:
2.3編寫客戶端代碼進行調用
- package com.test.client;
- import stub.test.client.HelloServiceClient;
- import stub.test.client.HelloServicePortType;
- import com.test.service.bean.ObjectFactory;
- import com.test.service.bean.User;
- public class HelloServiceTest {
- public static void main(String args[]){
- HelloServiceClient service = new HelloServiceClient();
- HelloServicePortType portType = service.getHelloServiceHttpPort();
- System.out.println(portType.sayHello("張三"));
- ObjectFactory factory = new ObjectFactory();
- User user = factory.createUser();
- user.setName(factory.createUserName("張三"));
- System.out.println(portType.getUser(user).getName().getValue());
- }
- }
執行結果如下:
- Hello, 張三
- new:張三