`

webservice 用xfire 插件 JSR181

阅读更多

1.首先介绍环境配置

 step 1 : 在eclipse 中新建一下web 项目

 并导入xfire 对应的依赖*.jar 包文件

 step 2 : 在java src 目录下新建文件夹src/META-INF/xfire

和文件services.xml 内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans>
	<service xmlns="http://xfire.codehaus.org/config/1.0">
		<!--name>HelloWorldWebServiceConfigName</name>
		<namespace>
			http://127.0.0.1/usf/HelloService
		</namespace>
		<serviceClass>
			com.webservice.helloworld.HelloWorldWebServiceTest
		</serviceClass>
		<implementationClass>
			com.webservice.helloworld.imp.HelloWorldWebServiceImpl
	    </implementationClass-->
	    <!--对应的WebService 实类名称-->
<serviceClass>com.vms.cmn.dao.impl.UserDaoImpl</serviceClass>
	    
	</service>
</beans>

  

step 3 : 配置web.xml 配置一个XFireConfigurableServlet 内容如下

如果不记得对应类路径可以去xfire-all-1.2.6.jar 包中找对应的 传输http XFire 配置Servlet 文件 

<servlet>
      <servlet-name>XfireWebService</servlet-name>
      <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>XfireWebService</servlet-name>
      <url-pattern>/XfireWebService/WebService/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
      <servlet-name>XfireWebService</servlet-name>
      <url-pattern>/WebService/*</url-pattern>
  </servlet-mapping>

 

2. 1 webservice 例子介绍

   服务端开发

  step 1 :定义一个对象

 

package com.vms.cmn;

import java.io.Serializable;

public class UserInfo implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Integer id;
	
	private String name;
	
	private String sex;
	
	private int age;
	

	public UserInfo() {
		super();
	}

	public UserInfo(Integer id, String name, String sex, int age) {
		super();
		this.id = id;
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	

}

 

  step 2 :定义一个接口 对应的操作方法 这里我们使用元注解的方式

package com.vms.cmn.dao;

import java.util.Collection;

import javax.jws.WebService;

import com.vms.cmn.UserInfo;

@WebService
public interface IUserDao {
	
	public void insert(UserInfo userInfo);
	
	public void update(UserInfo userInfo);
	
	public Collection<UserInfo> getAll();

}

 

step 3 :定义接口实现类,这里我们才用spring 的思想接口编程理念

package com.vms.cmn.dao.impl;

import java.util.ArrayList;
import java.util.Collection;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

import com.vms.cmn.UserInfo;
import com.vms.cmn.dao.IUserDao;

@WebService
public class UserDaoImpl implements IUserDao {

	Collection<UserInfo> userInfoes = new ArrayList<UserInfo>();
	
	public UserDaoImpl() {
		for(int i = 0 ; i < 8; i++) {
			UserInfo userInfo = new UserInfo(i,"liuqing" + i,i % 2 == 0? "male":"wo",22 + i);
			userInfoes.add(userInfo);
		}
	}
	
	@WebMethod
	@WebResult(name="userInfoes")
	public Collection<UserInfo> getAll() {
		return this.userInfoes;
	}

	@WebMethod
	@Override
	public void insert(@WebParam(name="UserInfo" , header=true)UserInfo userInfo) {
		authorize(userInfo);
		this.userInfoes.add(userInfo);
	}

	@WebMethod
	@Override
	public void update(@WebParam(name="UserInfo")UserInfo userInfo) {
	    authorize(userInfo);
	   System.out.println("Update ....");

	}
	
	public boolean authorize(UserInfo userInfo) {
		System.out.println(" UserInfo.name: " +userInfo.getName());
		System.out.println(" UserInfo.sex: " +userInfo.getSex());
		if(userInfo.getName().equals(userInfo.getSex())) {
			return true;
		} else {
			return false;
		}
		
	}

}

 

step 4:在META-INF/xfire/services.xml 文件中加入对应的webservice实现类

<serviceClass>com.vms.cmn.dao.impl.UserDaoImpl</serviceClass>

 

 在启动Tomcat 就OK

 step 5:输入地对应的地址:http://localhost:8080/vms_cmn/WebService/UserDaoImpl?wsdl

就可以得到对应的wsdl 文件如下

  

<?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions targetNamespace="http://impl.dao.cmn.vms.com" xmlns:ns1="http://cmn.vms.com" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" xmlns:tns="http://impl.dao.cmn.vms.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
- <wsdl:types>
- <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://cmn.vms.com">
- <xsd:complexType name="UserInfo">
- <xsd:sequence>
  <xsd:element minOccurs="0" name="age" type="xsd:int" /> 
  <xsd:element minOccurs="0" name="id" nillable="true" type="xsd:int" /> 
  <xsd:element minOccurs="0" name="name" nillable="true" type="xsd:string" /> 
  <xsd:element minOccurs="0" name="sex" nillable="true" type="xsd:string" /> 
  </xsd:sequence>
  </xsd:complexType>
- <xsd:complexType name="ArrayOfUserInfo">
- <xsd:sequence>
  <xsd:element maxOccurs="unbounded" minOccurs="0" name="UserInfo" nillable="true" type="ns1:UserInfo" /> 
  </xsd:sequence>
  </xsd:complexType>.................................................
  </wsdl:definitions>

 

 服务端开发成功OK

 

2.2 根据以上内容开发客户端

 step 1 :新建一下web 工程将对应的*.jar 复制到lib 目录下

 新建build.xml 文件内客如下

<?xml version="1.0" encoding="UTF-8"?>
<project name="xfireAnt" basedir="." default="createCode">
	<property name="xfirelib" value="${basedir}/WebContent/WEB-INF/lib"/>
	<property name="sources" value="${basedir}/src"/>

	<path id="classpath">
		<fileset dir="${xfirelib}">
			<include name="*.jar"/>
		</fileset>
	</path>
	    
	<target name="createCode">
		<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="classpath"/>
		<wsgen outputDirectory="${sources}" 
			wsdl="http://localhost:8080/vms_cmn/WebService/UserDaoImpl?wsdl" 
			package="com.vms.cmn.client" overwrite="true"/>
	</target>
</project>

 step 2 : 在eclipse 中Ant 运行build.xml 文件

  就会自动生成客户端代码

 step 3: 测试对应的代码新建一下ClientTest 类 注意对应的JAXBElement对应的创建方法

package com.vms.cmn.client;

import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;

import com.vms.cmn.UserInfo;

public class ClientTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		UserDaoImplClient user = new UserDaoImplClient();
		UserDaoImplPortType type = user.getUserDaoImplHttpPort();
		UserInfo userInfo = new UserInfo();
		userInfo.setAge(23);
		JAXBElement<String> userInfoName = new JAXBElement<String>(
				new QName("http://cmn.vms.com","name"),String.class,"liuqing");
		JAXBElement<String> userInfoSex = new JAXBElement<String>(
				new QName("http://cmn.vms.com","sex"),String.class,"male");
		JAXBElement<Integer> userInfoId = new JAXBElement<Integer>(
				new QName("http://cmn.vms.com","id"),Integer.class,33
		);
		userInfo.setName(userInfoName);
		userInfo.setSex(userInfoSex);
		userInfo.setAge(2355);
		userInfo.setId(userInfoId);
		type.insert(userInfo);
//		System.out.println(type.getAll().getUserInfo());
		for(UserInfo en:type.getAll().getUserInfo()){
			System.out.println(en + "Object");
		}
		System.out.println("====================");
		for(UserInfo en:type.getAll().getUserInfo()){
			System.out.println(en + "Object");
		}
	}

}

 

运行结果为OK

id:0name: liuqing0sex:maleObject
id:1name: liuqing1sex:woObject
id:2name: liuqing2sex:maleObject
id:3name: liuqing3sex:woObject
id:4name: liuqing4sex:maleObject
id:5name: liuqing5sex:woObject
id:6name: liuqing6sex:maleObject
id:7name: liuqing7sex:woObject
id:33name: liuqingsex:maleObject
====================
id:0name: liuqing0sex:maleObject
id:1name: liuqing1sex:woObject
id:2name: liuqing2sex:maleObject
id:3name: liuqing3sex:woObject
id:4name: liuqing4sex:maleObject
id:5name: liuqing5sex:woObject
id:6name: liuqing6sex:maleObject
id:7name: liuqing7sex:woObject
id:33name: liuqingsex:maleObject

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics