用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
内容如下:
-
-
-
-
-
-
-
-
- <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" />
-
-
- <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;
-
-
-
-
-
-
- public class ResultBean implements Serializable
- {
-
-
-
-
- private static final long serialVersionUID = 434303728726404199L;
-
-
- 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;
-
-
-
-
-
-
- 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进行测试
附摘:
Axis 简单说明
1,axis本身可以servlet的形式集成到任何支持servlet的Web容器(web.xml)
<servlet> <display-name>Apache-Axis Servlet</display-name> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet>
2,当然需要让Web容器找到org.apache.axis.transport.http.AxisServlet
将axis所需库和资源配置到classpath里面
或者将axis的lib目录拷贝到WEB-INFO下
3,然后让axis接管WebService的url(web.xml)
<servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
4,剩下的只需要告诉axis每个WebService对应着哪个Java类即可(server-config.wsdd(与web.xml同目录))
<service name="OrganizationWebService" type="" provider="java:RPC" style="rpc" use="encoded"> <parameter name="scope" value="Request" /> <parameter name="className" value="nucleus.organization.webservice.OrganizationWebService" /> <parameter name="allowedMethods" value="isValid, personOfID, personsOfRole, queryCategories, queryPersons" /> <namespace>http://webservice.organization.nucleus</namespace> <typeMapping encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns1:CategoryInfo"languageSpecificType="java:nucleus.organization.webservice.CategoryInfo" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"name="CategoryInfo" xmlns:ns1="http://webservice.organization.nucleus" /> </service>