当前位置: 代码迷 >> Web前端 >> webService运用之Axis1.x
  详细解决方案

webService运用之Axis1.x

热度:103   发布时间:2012-09-10 11:02:32.0
webService应用之Axis1.x

研究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]);
	}
}
?
  相关解决方案