研究webService也有几天了,之前看到一个使用Axis2的使用教程,但是我还没有找到一个好的方式怎么使用到自己的web工程里面!可能还需要多多研究,看看官方的文档。首先可以确定的就是,肯定是可以的。
据说,Axis1.x和Axis2.0有很大的区别,并且还是不同组织开发的。无奈之下,我又回到的Axis1.x;下面记录一下我写的这个程序。很简单,一些Jar包,加上两个配置文件。
第一,两个配置文件
在web.xml文件中配置servlet
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.worg/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_xsd"> <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
org.apache.axis.transport.http.AxisServlet
这个就是我们Servlet的类。
在和web.xml的统一目录下,配置server-config.wsdd
新建一个文件,名称为server-config.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"> <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> <service name="UserServer" provider="java:RPC"> <parameter name="allowedMethods" value="*" /> <parameter name="className" value="com.xiva.bean.UserWebService" /> </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>
这个里面很多代码,都是一些webService的设置;也没做具体的研究。
但是其中有一段代码使我们必须得关心的。
<service name="UserServer" provider="java:RPC"> <parameter name="allowedMethods" value="*" /> <parameter name="className" value="com.xiva.bean.UserWebService" /> </service>
这个就是配置我们服务的代码,其中服务的两个参数分别是允许调用的方法和类名。
package com.xiva.bean; public class UserWebService { public String sayHello(){ return "hello"; } public String Hello(String name){ return name + ", hello!"; } public String Login(String name, String password){ if("xiva".equals(name) && "123".equals(password)){ return "success"; } else return "failure"; } }
上面是我写的类代码!
第二,所需要的包
见附件,Axis1.x开发的包都在里面。解压,复制到工程中即可。注意启动服务的时候,要在工程文件中看看你的jar包是否都发到到你的工程下面。
好了,一个服务端的代码就这样写好了。
下面是我用Axis2.x写的一个客户端的代码,
package com.xiva.bean; import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class LoginClient { public static void main(String[] args) throws AxisFault { String target = "http://localhost:8080/WebQClient/services/UserServer"; //target = "http://localhost:8080/axis2/services/MyLoginService"; RPCServiceClient client = new RPCServiceClient(); Options options = client.getOptions(); options.setManageSession(true); EndpointReference epr = new EndpointReference(target); options.setTo(epr); QName qname = new QName("http://bean.xiva.com", "Login"); //指定调用的方法和传递参数数据,及设置返回值的类型 Object[] result = client.invokeBlocking(qname, new Object[] { "xiva", "123" }, new Class[] { String.class }); System.out.println(result[0]); qname = new QName("http://bean.xiva.com", "sayHello"); result = client.invokeBlocking(qname, new Object[] {}, new Class[] { String.class }); System.out.println(result[0]); } }