用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类的路径
接着写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进行测试
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。