webService
?Web Service学习之axis看着网上的资料学习了一下,做点笔记以防以后忘记。 一、准备工作: ??? 到axis官方网站下载相应的jar包,我下的是1.4final版。 ??? http://ws.apache.org/axis/ 二、建立项目: ??? 直接在MyEclipse中建立了一个web项目。将相应的jar包拷贝到lib文件夹下 三、创建一个WebService服务 ??? 直接创建一个类HelloClient.java Java代码 ?????????????????????????????
package com; ? public class HelloServer { ? public String sayHello(String name) { ?? return "Hello " + name; ? } } ? ??? axis支持两种方式创建,一种是将编写好的java文件改为*.jws文件。个人觉得这样不好,所以就用另外一种,采用在server-config.xml文件中配置的方式。注意:该文件位置为WEB-INF目录下 Xml代码 <?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="enableNamespacePrefixOptimization"?? ????????????value="false"?/>?? ????????<parameter?name="dotNetSoapEncFix"?value="true"?/>?? ????????<parameter?name="disablePrettyXML"?value="true"?/>?? ????????<parameter?name="sendMultiRefs"?value="true"?/>?? ????????<parameter?name="sendXsiTypes"?value="true"?/>?? ????????<parameter?name="attachments.implementation"?? ????????????value="org.apache.axis.attachments.AttachmentsImpl"?/>?? ????????<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"?/>?? ?? ????<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?name="Version"?provider="java:RPC">?? ????????<parameter?name="allowedMethods"?value="getVersion"?/>?? ????????<parameter?name="className"?value="org.apache.axis.Version"?/>?? ????</service>?? ????<SPAN?style="COLOR:?#ff0000"><service?name="HelloServer"?provider="java:RPC">?? ????????<parameter?name="allowedMethods"?value="*"?/>?? ????????<parameter?name="className"?value="com.HelloServer"?/>?? ????</service></SPAN>?? ?? ????<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:method"?? ????????????value="org.apache.axis.transport.http.QSMethodHandler"?/>?? ????</transport>?? ?? ????<transport?name="local">?? ????????<responseFlow>?? ????????????<handler?type="LocalResponder"?/>?? ????????</responseFlow>?? ????</transport>?? </deployment>?? <?xmlversion="1.0" encoding="UTF-8"?> <deploymentxmlns="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="false" /> ??? <parameter name="dotNetSoapEncFix"value="true" /> ??? <parameter name="disablePrettyXML"value="true" /> ??? <parameter name="sendMultiRefs"value="true" /> ??? <parameter name="sendXsiTypes"value="true" /> ??? <parameter name="attachments.implementation" ????? value="org.apache.axis.attachments.AttachmentsImpl"/> ??? <parameter name="sendXMLDeclaration"value="true" /> ? ??? <requestFlow> ????? <handlertype="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 name="Version"provider="java:RPC"> ??? <parameter name="allowedMethods"value="getVersion" /> ??? <parameter name="className"value="org.apache.axis.Version" /> ? </service> ? ? <!--??? ??????????? --> ? <service name="HelloServer"provider="java:RPC"> ??? <parametername="allowedMethods" value="*" /> ??? <parameter name="className"value="com.HelloServer" /> ? </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:method" ????? value="org.apache.axis.transport.http.QSMethodHandler"/> ? </transport> ? ? <transport name="local"> ??? <responseFlow> ????? <handler type="LocalResponder" /> ??? </responseFlow> ? </transport> </deployment> ?? web.xml文件中的配置如下 Xml代码 <?xml?version="1.0"?encoding="UTF-8"?>?? <web-app?version="2.5"?xmlns="http://java.sun.com/xml/ns/javaee"?? ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?? ????xsi:schemaLocation="http://java.sun.com/xml/ns/javaee??? ????http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">?? ????<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>?? ????<welcome-file-list>?? ????????<welcome-file>index.jsp</welcome-file>?? ????</welcome-file-list>?? </web-app>?? <?xmlversion="1.0" encoding="UTF-8"?> <web-appversion="2.5" xmlns="http://java.sun.com/xml/ns/javaee" ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ? xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ? http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> ? <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> ? <welcome-file-list> ??? <welcome-file>index.jsp</welcome-file> ? </welcome-file-list> </web-app> 四、部署启动tomcat: 在浏览器地址栏输入 http://localhost:8080/axisWebServiceServer/services 可以看到已有的WebService http://localhost:8080/axisWebServiceServer/services/HelloServer?wsdl 可以看到自己写的WebService 五、测试调用WebService Java代码
? importjava.net.MalformedURLException; importjava.rmi.RemoteException; ? importjavax.xml.rpc.ServiceException; ? importorg.apache.axis.client.Call; importorg.apache.axis.client.Service; ? public class HelloClient { ? ? public static void main(String[] args) { ?? String status = "aaaaaaa"; ?? String endPoint ="http://localhost:8080/axisWebServiceServer/services/HelloServer"; ?? String operation = "sayHello"; ?? Service service = new Service(); ? ?? try { ???? Call call = (Call) service.createCall(); ???? call.setTargetEndpointAddress(new java.net.URL(endPoint)); ???? call.setOperationName(operation); ???? String xml = (String) call.invoke(new Object[] { status }); ???? System.out.println(xml); ?? } catch (ServiceException e) { ???? e.printStackTrace(); ?? } catch (MalformedURLException e) { ???? e.printStackTrace(); ?? } catch (RemoteException e) { ???? e.printStackTrace(); ?? } ? ? } ? } ? 成功!! java webservice实例?一: 首先创建个WEB工程,然后:?http://ws.Apache.org/axis/网站下载Axis安装包.当然还依赖其他包的,我这里在附件里上传了所有应用到得包,方便大家。 axis.jar commons-discovery-0.2.jar commons-logging-1.0.4.jar jaxrpc.jar mailapi_1_3_1.jar saaj.jar wsdl4j-1.5.1.jar 二: 然后就写wsdd 文件(注:其实这里真的不用,可以跳过第二步)为了生成这个文件:server-config.wsdd deploy.wsdd: <deploymentxmlns="http://xml.apache.org/axis/wsdd/"xmlns:java=""target="_blank">http://xml.apache.org/axis/wsdd/providers/java"> 在DOS下转换目录到%TOMCAT_HOME%webappsaxisWEB-INF,命令: 三: 可以自己写第二步中的文件,代码如下: ? Wsdd代码? <?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">???? 3.??????? <globalConfiguration>?? <parameter?name="sendMultiRefs"?value="true"/>?? <parameter?name="disablePrettyXML"?value="true"/>?? <parameter?name="dotNetSoapEncFix"?value="true"/>?? <parameter?name="enableNamespacePrefixOptimization"?value="false"/>?? <parameter?name="sendXMLDeclaration"?value="true"/>?? <parameter?name="sendXsiTypes"?value="true"/>?? <parameter?name="attachments.implementation"?value="org.apache.axis.attachments.AttachmentsImpl"/>?? </globalConfiguration>?? 13.? ?? ???<handler?type="java:org.apache.axis.handlers.http.URLMapper"?name="URLMapper"/>????? 15.? ??<service?name="Login.jws"?provider="java:RPC">????? 16.? ?????<parameter?name="className"?value="server.SayHello"/>?? 17.? ?????<parameter?name="scope"?value="request"/>?? 18.? ?????<parameter?name="allowedMethods"?value="*"/>?? 19.? ?????<messageReceiver?class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>?? 20.? ??</service>????? 21.? ??<transport?name="http">????? 22.? ?????<requestFlow>????? 23.? ????????<handler?type="URLMapper"/>????? 24.? ?????</requestFlow>????? 25.? ??</transport>????? 26.? </deployment>?? ? 放到 WEB-INF 目录下 和web.xml一起,其中,WEB.XML可以直接从你下载的axis项目中拿来到自己工程就好,或者自己添加: Xml代码? 1.?????<servlet>?? 2.?????????????<servlet-name>AxisServlet</servlet-name>?? 3.?????????????<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>?? 4.?????????</servlet>?? 5.?????????<servlet-mapping>?? 6.?????????????<servlet-name>AxisServlet</servlet-name>?? 7.?????????????<url-pattern>/services/*</url-pattern>?? 8.?????????</servlet-mapping>?? ? 四: ? 服务端提供的方法: Java代码? 1.?????package?server;?? 3.?????public?class?SayHello?{?? 4.?????????public?String?getName(String?name)?{?? 5.?????????????return?"hello====>"?+?name;?? 6.?????????}?? 7.?????}?? ? ? 五: ? ??客户端访问服务端接口获得数据的方法: ? Java代码? 1.?????package?client;?? 3.?????import?org.apache.axis.client.Call;?? 4.?????import?org.apache.axis.client.Service;?? 6.?????public?class?TestClient?{?? 8.?????????public?static?void?main(String[]?args)?throws?Exception?{?? 10.? ????????//?指出service所在URL??????? 12.? ????????String?endpoint?=?"http://127.0.0.1:8082/webservice/services/Login.jws";?? 14.? ????????//?创建一个服务(service)调用(call)??????? 16.? ????????Service?service?=?new?Service();?? 18.? ????????Call?call?=?(Call)?service.createCall();//?通过service创建call对象??????? 19.? ?? 20.? ????????//?设置service所在URL??????? 21.? ?? 22.? ????????call.setTargetEndpointAddress(new?java.net.URL(endpoint));?? 23.? ?? 24.? ????????//?方法名(processService)与MyService.java方法名保持一致??????? 25.? ?? 26.? ????????call.setOperationName("getName");?? 27.? ?? 28.? ????????//?Object?数组封装了参数,参数为"This?is?Test!",调用processService(String?arg)??????? 29.? ?? 30.? ????????String?ret?=?(String)?call.invoke(new?Object[]?{?"继中"?});?? 31.? ?? 32.? ????????System.out.println(ret);?? 33.? ?? 34.? ????}?? 35.? ?? 36.? }?? ? ? 六: ? 启动tomcat,先访问http://127.0.0.1:8082/webservice/services,看是否有方法显示,有显示,则代表服务端提供的接口可以成功访问了。 ? 我的效果是这样: ? And now... Some Services ·?????????????????Login.jws?(wsdl) o?????????????????????????getName 七: ? ???然后在本地跑客户端TestClient,就应该有结果啦,大家试试吧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |