用axis来发布webservice
首先下载必须的jar包 分别是:axis.jar axis-ant.jar commons-discovery-0.2.jar commons-logging-1.0.4.jar wsdl4j-1.5.1.jar wsdl4j-1.6.2.jar
下载完jar包后则在web.xml中配置servlet拦截器:
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/djk/*</url-pattern>
</servlet-mapping>
配置这个拦截器的目的是请求走给axis处理
然后新建一个xml文件放在和web.xml同级目录 名字写成server-config.wsdd
内容如下:
<!-- Use this file to deploy some handlers/chains and services -->
<!-- Two ways to do this: -->
<!-- java org.apache.axis.client.AdminClient deploy.wsdd -->
<!-- after the axis server is running -->
<!-- or -->
<!-- java org.apache.axis.utils.Admin client|server deploy.wsdd -->
<!-- from the same directory that the Axis engine runs -->
<ns1:deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:ns1="http://xml.apache.org/axis/wsdd/">
<ns1:globalConfiguration>
<ns1:parameter name="sendMultiRefs" value="true" />
<ns1:parameter name="disablePrettyXML" value="true" />
<ns1:parameter name="adminPassword" value="admin" />
<ns1:parameter name="dotNetSoapEncFix" value="true" />
<ns1:parameter name="enableNamespacePrefixOptimization"
value="false" />
<ns1:parameter name="sendXMLDeclaration" value="true" />
<ns1:parameter name="sendXsiTypes" value="true" />
<ns1:parameter name="attachments.implementation"
value="org.apache.axis.attachments.AttachmentsImpl" />
<ns1:requestFlow>
<ns1:handler type="java:org.apache.axis.handlers.JWSHandler">
<ns1:parameter name="scope" value="session" />
</ns1:handler>
<ns1:handler type="java:org.apache.axis.handlers.JWSHandler">
<ns1:parameter name="scope" value="request" />
<ns1:parameter name="extension" value=".jwr" />
</ns1:handler>
</ns1:requestFlow>
</ns1:globalConfiguration>
<ns1:handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper" />
<ns1:handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder" />
<ns1:handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
<!-- Services from BisServiceService WSDL service -->
<ns1:service name="DjkWebService" provider="java:RPC" style="rpc" use="encoded">
<ns1:parameter name="wsdlTargetNamespace" value="http://unifBoss.iptv.nyl.com" />
<ns1:parameter name="wsdlServiceElement" value="DjkServiceService" />
<ns1:parameter name="schemaUnqualified" value="http://unifBoss.iptv.nyl.com,http://bean.unifBoss.iptv.nyl.com" />
<ns1:parameter name="wsdlServicePort" value="DjkWebService"/>
<ns1:parameter name="className" value="com.djk.service.impl.DjkServiceImpl"/>
<ns1:parameter name="wsdlPortType" value="DjkService" />
<ns1:parameter name="typeMappingVersion" value="1.2" />
<ns1:operation name="createUser" qname="operNS:createUser" xmlns:operNS="http://unifBoss.iptv.nyl.com" returnQName="createUserReturn" returnType="rtns:ResultBean" xmlns:rtns="http://bean.unifBoss.iptv.nyl.com" soapAction="" >
<ns1:parameter qname="custBean" type="tns:CustBean" xmlns:tns="http://bean.unifBoss.iptv.nyl.com" />
<ns1:parameter qname="sequenceID" type="tns:string" xmlns:tns="http://www.w3.org/2001/XMLSchema" />
</ns1:operation>
<ns1:parameter name="allowedMethods" value="createUser" />
<typeMapping
xmlns:ns="http://bean.unifBoss.iptv.nyl.com"
qname="ns:ResultBean"
type="java:com.djk.service.bean.ResultBean"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
<typeMapping
xmlns:ns="http://bean.unifBoss.iptv.nyl.com"
qname="ns:CustBean"
type="java:com.djk.service.bean.CustBean"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
</ns1:service>
<ns1:transport name="http">
<ns1:requestFlow>
<ns1:handler type="URLMapper" />
<ns1:handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</ns1:requestFlow>
<ns1:parameter name="qs:list"
value="org.apache.axis.transport.http.QSListHandler" />
<ns1:parameter name="qs:wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler" />
<ns1:parameter name="qs.list"
value="org.apache.axis.transport.http.QSListHandler" />
<ns1:parameter name="qs.method"
value="org.apache.axis.transport.http.QSMethodHandler" />
<ns1:parameter name="qs:method"
value="org.apache.axis.transport.http.QSMethodHandler" />
<ns1:parameter name="qs.wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler" />
</ns1:transport>
<ns1:transport name="local">
<ns1:responseFlow>
<ns1:handler type="LocalResponder" />
</ns1:responseFlow>
</ns1:transport>
</ns1:deployment>
<ns1:service name="DjkWebService" provider="java:RPC" style="rpc" use="encoded">表示这个webservice的服务名称是DjkWebService请求这个webservice的时候可以写成www.xx.xxx.xxx.xx:8080/xxx/djk/DjkWebService
<ns1:parameter name="className" value="com.djk.service.impl.DjkServiceImpl"/>对应接口的实现类
<ns1:operation name="createUser" qname="operNS:createUser" xmlns:operNS="http://unifBoss.iptv.nyl.com" returnQName="createUserReturn" returnType="rtns:ResultBean" xmlns:rtns="http://bean.unifBoss.iptv.nyl.com" soapAction="" >
<ns1:parameter qname="custBean" type="tns:CustBean" xmlns:tns="http://bean.unifBoss.iptv.nyl.com" />
<ns1:parameter qname="sequenceID" type="tns:string" xmlns:tns="http://www.w3.org/2001/XMLSchema" />
</ns1:operation>
operation name="createUser"对应接口中的方法 。returnType="rtns:ResultBean"对应方法的返回值
<ns1:parameter name="allowedMethods" value="createUser" />表示createUser这个方法发布
<typeMapping
xmlns:ns="http://bean.unifBoss.iptv.nyl.com"
qname="ns:ResultBean"
type="java:com.djk.service.bean.ResultBean"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
表示返回bean对应的java类的路径
<typeMapping
xmlns:ns="http://bean.unifBoss.iptv.nyl.com"
qname="ns:CustBean"
type="java:com.djk.service.bean.CustBean"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
表示参数CustBean对应的java类的路径
这样webservice的一个xml文件写完
接着写java类和接口
import com.djk.service.DjkService;
import com.djk.service.bean.CustBean;
import com.djk.service.bean.ResultBean;
public class DjkServiceImpl implements DjkService
{
public ResultBean createUser(CustBean custBean,String sequenceID)
{
System.out.println(custBean.getId());
System.out.println(custBean.getName());
ResultBean resultBean= new ResultBean();
resultBean.setReturnCode("0");
resultBean.setReturnMessage("ok");
return resultBean;
}
}
这个service对应在xml文件中配置过 里面的方法也配置过
接着看2个实体类:
package com.djk.service.bean;
import java.io.Serializable;
import org.apache.axis.description.TypeDesc;
/**
* 返回数据bean
* @author djk
*
*/
public class ResultBean implements Serializable
{
/**
*
*/
private static final long serialVersionUID = 434303728726404199L;
// Type metadata
private static TypeDesc typeDesc = new TypeDesc(
ResultBean.class, true);
/**
* 返回码
*/
private String returnCode;
/**
* 返回信息
*/
private String returnMessage;
static
{
typeDesc.setXmlType(new javax.xml.namespace.QName("DjkWebService", "resultBean"));
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("returnCode");
elemField.setXmlName(new javax.xml.namespace.QName("", "returnCode"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setMinOccurs(0);
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("returnMessage");
elemField.setXmlName(new javax.xml.namespace.QName("", "returnMessage"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setMinOccurs(0);
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
}
public String getReturnCode() {
return returnCode;
}
public void setReturnCode(String returnCode) {
this.returnCode = returnCode;
}
public String getReturnMessage() {
return returnMessage;
}
public void setReturnMessage(String returnMessage) {
this.returnMessage = returnMessage;
}
}
package com.djk.service.bean;
import org.apache.axis.description.TypeDesc;
/**
* 用户类
* @author djk
*
*/
public class CustBean
{
/**
* 编号
*/
private String id;
/**
* 名称
*/
private String name;
private static TypeDesc typeDesc = new TypeDesc(
CustBean.class, true);
static
{
typeDesc.setXmlType(new javax.xml.namespace.QName("DjkWebService", "custBean"));
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("id");
elemField.setXmlName(new javax.xml.namespace.QName("", "id"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setMinOccurs(0);
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("name");
elemField.setXmlName(new javax.xml.namespace.QName("", "name"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setMinOccurs(0);
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
}
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;
}
}
这样一个webservice工程就结束了 对应的wsdl文件是:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:unif="http://unifBoss.iptv.nyl.com">
<soapenv:Header/>
<soapenv:Body>
<unif:createUser soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<custBean xsi:type="bean:CustBean" xmlns:bean="http://bean.unifBoss.iptv.nyl.com">
<id xsi:type="xsd:string">1</id>
<name xsi:type="xsd:string">djk</name>
</custBean>
<sequenceID xsi:type="xsd:string">123131</sequenceID>
</unif:createUser>
</soapenv:Body>
</soapenv:Envelope>
可以使用soapui进行测试