1.1 WebSevice
1.1.1 服务器端
1.1.1.1 WebService基本配置
A. 引入包
开发服务器端的WebService首先需要引入服务支持包:如下:
axis.jar ,axis-ant.jar,commons-discovery-0.2.jar,commons-logging-1.0.4.jar
jaxrpc.jar, log4j-1.2.8.jar,log4j.properties,saaj.jar,wsdl4j-1.5.1.jar
B. 配置web.xml
引用webservice包之后,修改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 -->
<!--
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
-->
<!-- 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>
C. 创建server-config.wsdd (路径:/WEB-INF/server-config.xml)
server-config.wsdd文件配置发布webservice服务
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler"
xmlns="http://xml.apache.org/axis/wsdd/">
<globalConfiguration name="defaultClientConfig">
<requestFlow name="RequestFlow1" type="">
<handler name="Handler1"
type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session" />
</handler>
<handler name="Handler2"
type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request" />
<parameter name="extension" value=".jwr" />
</handler>
</requestFlow>
</globalConfiguration>
<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper" />
<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder" />
<handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
<transport name="http" type="">
<requestFlow name="RequestFlow1" type="">
<handler name="Handler1" type="URLMapper" />
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
</transport>
<transport name="local" type="">
<responseFlow name="ResponseFlow1" type="">
<handler name="Handler1" type="LocalResponder" />
</responseFlow>
</transport>
<service name="LdapSoapServer" provider="java:RPC"
style="WRAPPED" use="literal">
<parameter name="scope" value="Session" />
<parameter name="className" value="*.LdapSoapServer" />
<parameter name="allowedMethods" value="*" />
<beanMapping qname="ns:UserDomain"
xmlns:ns="urn:BeanService"
<!—-说明:UserDomain 必须被序列化,如:
public class UserDomain implements Serializable{
private static final long serialVersionUID = 1180773928220076822L;
}
-->
languageSpecificType="java:com.report.vo.UserDomain"/>
<beanMapping qname="ns:OrganizationalUnitDomain"
xmlns:ns="urn:BeanService" languageSpecificType="java:com.report.vo.OrganizationalUnitDomain"/>
</service>
</deployment>
D. 编写服务端代码
package com.report.common.webservice.server;
public class LdapSoapServer {
public List<UserDomain> listUser(){
return LdapADManager.getInstance().listUser();
}
}
1.1.1.2 WebService发布
WebService发布操作的工作包括:
u 编写服务端JAVA接口
u 配置server-config.wsdd
服务器端的接口代码编写如上述D点,
<service name="LdapSoapServer" provider="java:RPC"
style="WRAPPED" use="literal">
<parameter name="scope" value="Session" />
<parameter name="className" value="*.LdapSoapServer" />
<parameter name="allowedMethods" value="*" />
<beanMapping qname="ns:UserDomain" xmlns:ns="urn:BeanService"
languageSpecificType="java:com.report.vo.UserDomain"/>
<beanMapping qname="ns:OrganizationalUnitDomain"
xmlns:ns="urn:BeanService" languageSpecificType="java:com.report.vo.OrganizationalUnitDomain"/>
</service>
1.1.1.3 WebService访问
在IE地址栏,输入:
http://localhost:8080/ztou/services/LdapSoapServer?wsdl,成功的展示页面如下:
1.1.2 客户端
1.1.2.1 客户端基本配置
A. 引入包
客户端的引用WebService首先需要加入一些服务支持包:如下:
axis.jar ,axis-ant.jar,commons-discovery-0.2.jar,commons-logging-1.0.4.jar
jaxrpc.jar, log4j-1.2.8.jar,log4j.properties,saaj.jar,wsdl4j-1.5.1.jar
soapclient.jar
1.1.2.2 客户端调用
客户端调用我编写了个调用接口包(soapclient.jar),调用配置部署的步骤如下:
u 配置远程webservice链接
在web-inf/classes目录下引入配置文件soap-config.properties
配置文件属性名称格式:类名_SoapUrl 如:
LdapSoapServer_SoapUrl=http://localhost:8080/ztou/services/LdapSoapServer?wsdl
u 客户端调用代码
客户端提供传递简单对象、和传递复杂对象两种调用方式。
Ø 传递简单对象
简单对象指服务器端返回简单数据类型的数据,如:int ,Boolean, String
public void testAuthenticate() throws Exception{
String srvClassName = "LdapSoapServer";
String methodName = "listUser";
Object[] params = new Object[]{"administrator","cjis8888"};
Object returnOject = LdapSoapClient.getInstance().
executeSoap( srvClassName, methodName, params);
int returnCode = (Integer)returnOject;
System.out.println("验证返回编码:" + returnCode);
}
Ø 传递复杂对象
复杂对象值服务器端返回自定义对象类型或List/Map类型的数据,如:List,Map,自定义的Java类型。
public void testlistUser() throws Exception{
String srvClassName = "LdapSoapServer";
String methodName = "listUser";
Object[] params = new Object[]{};
Object returnObject = LdapSoapClient.getInstance().excuteSoapList(
srvClassName, methodName,null,params, "UserDomain","BeanService",
UserDomain.class);
List<UserDomain> list = (ArrayList)returnObject;
System.out.println(list.size());
UserDomain ud = list.get(0);
System.out.println(ud.getUserName());
}
说明:* @param srvClassName 服务器类名
* @param methodName 服务器方法名
* @param paramNames 参数名字符串 单个参数格式:"ouName" 多个参数:
"ouName,userName" 备注多个参数,参数间用逗号隔开
* @param paramValues 参数值
* @param qname 服务器的qname :UserDomain
* @param myNS 服务器的名称空间:BeanService
* @param langSTClass 泛型自定义类型 :UserDomain