WebService 开发与发布
1.1? WebSevice1.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> </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" ????????????? <parameter name="scope" value="session" /> ?????????? </handler> <handler name="Handler2" ????????????? <parameter name="scope" value="request" /> ????????????? <parameter name="extension" value=".jwr" /> ?????????? </handler> ?????? </requestFlow> ??? </globalConfiguration> ? <handler name="URLMapper" <handler name="LocalResponder" <handler name="Authenticate" ??? ??? <transport name="http" type=""> ?????? <requestFlow name="RequestFlow1" type=""> ?????????? <handler name="Handler1" type="URLMapper" /> ?????????? <handler name="Handler2" ?????? </requestFlow> ??? ??? </transport> ??? ??? <transport name="local" type=""> ?????? <responseFlow name="ResponseFlow1" type=""> ?????????? <handler name="Handler1" type="LocalResponder" /> ?????? </responseFlow> ??? </transport> ? ? <service name="LdapSoapServer" provider="java:RPC" ?????? <parameter name="scope" value="Session" /> ?????? ??? <parameter name="className" value="*.LdapSoapServer" /> ?????? ??? <parameter name="allowedMethods" value="*" /> <beanMapping qname="ns:UserDomain" <!—-说明:UserDomain 必须被序列化,如: public class UserDomain implements Serializable{ private static final long serialVersionUID = 1180773928220076822L; } --> languageSpecificType="java:com.report.vo.UserDomain"/> <beanMapping qname="ns: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" ?????? <parameter name="scope" value="Session" /> ?????? <parameter name="className" value="*.LdapSoapServer" /> ?????? <parameter name="allowedMethods" value="*" /> ?????? <beanMapping qname="ns:UserDomain" xmlns:ns="urn:BeanService" <beanMapping qname="ns:OrganizationalUnitDomain" </service> 1.1.1.3? ?WebService访问在IE地址栏,输入:
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(). ?????? 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( ????????????? ?????? 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"?? 多个参数: ?????? ?* @param paramValues ??参数值 ?????? ?* @param qname?????????????? 服务器的qname? :UserDomain ?????? ?* @param myNS????????? 服务器的名称空间:BeanService ?????? ?* @param langSTClass?? 泛型自定义类型? :UserDomain (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |