XFire創建WebService實例

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.在class目錄下建立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:張三


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章