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