Axis开发webservice
最近的几个项目由于涉及到不同领域不同技术平台的应用,所以在各个系统的接口部分,采用了webservice技术,来实现不同系统的业务对接.
由于我们采用J2EE平台,下面着重讲下利用axis在J2EE平台开发和部署webservice应用的问题.
下面以一个用户登录的例子介绍开发的过程.
1. Axis开发包下载.
Apache的一个项目,请下载(略)
2. 编写方法
package zpf;
import java.util.*;
import java.io.*;
public class SSOWebservice
{
/**
登陆并得到用户信息
*/
Public boolean login(String loginid, String password){
boolean ret=false;
if(loginid.equals(“zpf”)&&password.equals(“123”))
ret= true;
else
ret=false;
return ret;
}
/**
得到所有部门信息
*/
public zpf.DepartmentInfo[] getAllDepts(){
zpf.Department dept=new zpf.Department();
zpf.DepartmentInfo[] ret=dept.getAllDepartment();
return ret;
}
}
http://localhost:8080/kmwhc/services/SSOWebservice
编译,通过,不在累述
3. 修改web.xml
加入如下代码
<listener>
<listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
</listener>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<display-name>Axis Admin Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AdminServlet
</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<servlet-name>SOAPMonitorService</servlet-name>
<display-name>SOAPMonitorService</display-name>
<servlet-class>
org.apache.axis.monitor.SOAPMonitorService
</servlet-class>
<init-param>
<param-name>SOAPMonitorPort</param-name>
<param-value>5001</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<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>
<servlet-mapping>
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>
<!-- uncomment this if you want the admin servlet -->
<!-- currently the W3C havent settled on a media type for WSDL;
http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft
for now we go with the basic 'it's XML' response -->
<mime-mapping>
<extension>wsdl</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xsd</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
4. 布署
(1) WEB-INF下建立文件server-config.wsdd
(2) 文件内容如下:
蓝色部分定义了服务的名称,所用的类方法.
红色部分定义了服务的方法所用的返回值的自定义类型.
<?xml version="1.0" encoding="gb2312"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="adminPassword" value="admin"/>
<parameter name="enableNamespacePrefixOptimization" value="true"/>
<parameter name="attachments.Directory" value="D:/jakarta-tomcat-5.0.28/webapps/axis/WEB-INF/attachments"/>
<parameter name="disablePrettyXML" value="true"/>
<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="sendMultiRefs" value="true"/>
<parameter name="sendXMLDeclaration" value="true"/>
<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>
</globalConfiguration>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<!-- 自定义服务开始 -->
<!-- 单点登陆服务 add by Zhang.P.F -->
<service name="SSOWebservice" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="zpf.SSOWebservice"/>
<operation name="login" returnType="ns:boolean">
<parameter name="loginid" type="ns:String"/>
<parameter name="password" type="ns:String"/>
</operation>
<operation name="getAllDepts" returnType="ns:ArrayOf_tns2_DepartmentInfo">
</operation>
<typeMapping
xmlns:ns="http://interf.kmwhc.zpf.com"
qname="ns:DepartmentInfo"
type="java:zpf.DepartmentInfo"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
/>
<typeMapping
xmlns:ns="urn:SSOWebservice"
qname="ns:ArrayOf_tns2_DepartmentInfo"
type="java:zpf.DepartmentInfo[]"
serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
</service>
<!-- 自定义服务结束 -->
<service name="AdminService" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService"/>
<parameter name="enableRemoteAdmin" value="false"/>
<parameter name="className" value="org.apache.axis.utils.Admin"/>
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<service name="Version" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion"/>
<parameter name="className" value="org.apache.axis.Version"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
<parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
<parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>
文件修改完毕后,重新启动你的应用服务器.
5. 测试
在IE里输入http://localhost:8080/kmwhc/services/SSOWebservice
看到页面提示如下信息表示布署成功:
SSOWebservice
Hi there, this is an AXIS service!
Perhaps there will be a form for invoking the service here...
6. 编译生成客户端调用包
我用的ANT进行编译,在配置文件里加入如下代码
<!--登录服务-->
<java2wsdl output="${client.dir}/SSOWebservice.wsdl"
className="zpf.SSOWebservice"
namespace="urn:SSOWebservice"
location="http://localhost:8080/kmwhc/services/SSOWebservice">
<mapping namespace="urn:SSOWebservice"
package="zpf.client" />
</java2wsdl>
<wsdl2java url="${client.dir}/SSOWebservice.wsdl"
output="${client.dir}" deployscope="session" serverSide="yes"
skeletonDeploy="no" noimports="no" verbose="no" testcase="no">
<mapping namespace="urn:SSOWebservice"
package="zpf.client" />
</wsdl2java>
编译,生成wsdl文件和客户端代码.
7调用
调用代码:
zpf.client.SSOWebserviceServiceLocator sv=new zpf.client. SSOWebserviceServiceLocator();
zpf.client.SSOWebservice ssp=sv.getWebCaseservice(new java.net.URL("http://localhost:8080/kmwhc/services/SSOWebservice"));
boolean aa=ssp.login(“admin”,”123”);