Axis-1.1 webService实现跨project传递参数入
1.?????? 开发环境:windows server 2003,? j2sdk1.4.2_06,??? tomcat-5.0.28 2.?????? 首先下载axis-1.1.jar包,下载地址:http://ws.apache.org/axis/java/releases.html ??? 我下载的是:http://archive.apache.org/dist/ws/axis/1_1rc2/路径下的axis-1_1rc2-src.zip ,这个压缩文件包括axis-1_1rc2版本的源代码,api文档以及一些示例工程。
3.?????? 接下来,解压axis-1_1rc2-src.zip压缩包,解压后的文件夹为axis-1_1RC2,将其下面的lib文件夹下的jar全部拷贝出来,归入axis lib文件夹; ? ? ? ? ? 4.?????? 新建服务端web工程workflow,将axis lib中的jar包导入到workflow下的lib文件夹中,或者通过路径将其引入工程classpath即可。 5.??????打开源文件axis-1_1RC2webappsaxisWEB-INF web.xml,将其中的 <!--axis 1.1 start --> <display-name>Apache-Axis</display-name> <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> <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> <!--axis 1.1 end --> 拷贝粘贴到workflow工程中的web.xml文件中,如果以上粗体字部分有报错,删除即可。 6. ? ? ? 写服务端类 adam.bp.workflow.webservice.test.WebServicesTest package adam.bp.workflow.webservice.test; public class WebServicesTest { public WebServicesTest() { super(); } public String getUserInfo(String username,String deptName,String procinstId){ return username +" : "+deptName+" : "+procinstId; } public String sayHello(){ return "hello,Axis!"; } } 此类中,有两个方法: sayHello()无参方法; getUserInfo(String username,String procinstId)传参方法; 7.??? 基于wsdd方法发布webSservice的灵活性,在web-inf下创建server-config.wsdd文件夹用来发布webService; <?xml version="1.0" encoding="UTF-8"?> <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="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" /> <parameter name="sendXsiTypes" value="true" /> <parameter name="sendMultiRefs" value="true" /> <parameter name="sendXMLDeclaration" value="true" /> <parameter name="axis.sendMinimizedElements" 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" /> <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> </service> <!-- service test 2012.04.16 此次测试配置的service--> <service name="TestService" provider="java:RPC"> <parameter name="allowedMethed" value="*"></parameter> <parameter name="scope" value="Request"></parameter> <parameter name="className" value="adam.bp.workflow.webservice.test.WebServicesTest"></parameter> <!-- <parameter name="wsdlTargetNamespace" value="http://www.adamsw.com/hsy-test/processService"></parameter> <parameter name="schemaUnqualified" value="http://www.adamsw.com/hsy-test/processService"></parameter> <parameter name="wsdlPortType" value="process"></parameter> <parameter name="typeMappingVersion" value="1.2"></parameter> --> </service> <transport name="http"> <requestFlow> <handler type="URLMapper" /> <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" /> </requestFlow> </transport> <transport name="local"> <responseFlow> <handler type="LocalResponder" /> </responseFlow> </transport> </deployment> 这样就完成了服务端的配置和代码编写。 8.??? 新建一个web工程test,将axis-lib下的jar包引入到test工程的lib文件夹下。 9.??? 新建一个webservice客户端测试类: mypackage.server.WebServiceTestClient代码如下: package mypackage.server; import java.net.URL; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class WebServiceTestClient { public WebServiceTestClient() { super(); } /** * 测试getUserInfo方法 * @throws Exception */ public void testSayHello()throws Exception{ String namespaceUri = "http://localhost:8080/workflow/services/TestService"; Service service = new Service(); Call call = (Call)service.createCall(); call.setTargetEndpointAddress(new URL(namespaceUri)); call.setOperationName("sayHello"); String res = (String) call.invoke(new Object[]{}); System.out.println(res); } /** * 测试sayHello方法 * @throws Exception */ public void testGetUserInfo()throws Exception{ String namespaceUri = "http://localhost:8080/workflow/services/TestService"; Service service = new Service(); Call call = (Call)service.createCall(); //call.setOperationName(new QName(namespaceUri,"getUserInfo")); call.setTargetEndpointAddress(new URL(namespaceUri)); String userName="李光耀"; String deptName="新加坡内阁"; String procDefId="Singapore-001"; Object[] obj = new Object[3]; obj[0] = userName; obj[1] = deptName; obj[2] = procDefId; call.setOperationName("getUserInfo"); String res = (String)call.invoke(obj); System.out.println(res); } public static void main(String[] args){ WebServiceTestClient webServiceTestClient = new WebServiceTestClient(); try { //sayHello webServiceTestClient.testSayHello(); //getUserInfo webServiceTestClient.testGetUserInfo(); } catch (Exception e) { e.printStackTrace(); } } } 右键run as java Application测试该类,控制台输出如下: hello,Axis! 李光耀 : 新加坡内阁 : Singapore-001 10.??? 最后,axis 1.1发布webService这样就成功了! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |