SOAP协议服务端编写(Axis2 XFire)

一.axis2服务端编写
1.1 web.xml配置
在web.xml中添加如下配置项:


 
	AxisServlet 
	org.apache.axis2.transport.http.AxisServlet  
	1 


	AxisServlet 
	/services/* 


1.2 java接口与接口实现代码编写
接口:
package com.hsinghsu.www;

public interface AxisService
{
    public String login(String name, String password);
}

接口实现:
package com.hsinghsu.www;

public class AxisServiceImpl implements AxisService
{
    public String login(String name, String password)
    {
        if (null == name || null == password)
        {
            return "error|参数错误";
        }
        else
        {
            return "succss|good";
        }
    }   
}


1.3 applicationContext.xml文件配置
在applicationContext.xml中添加如下配置文件:
 

1.4 services.xml文件配置
在WebContent或WebRoot目录下,新建目录services/serviceXML/META-INF/services.xml文件【其中serviceXML这个目录名称随意,其余的不能修改】。


	

		对外提供soap接口

		
		
			org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
		

		
		
			com.hsinghsu.www.AxisService
		

		
		axisService
		
		
		
			
		 

	


1.5 测试
在浏览器中输入:http://127.0.0.1:80/application/services/testAsixService?wsdl  【注:application为该项目应用名称,services为在web.xml中配置的路径,testAsixService为在services.xml中配置的service名称】
结果如下:


    testAsixService
    
        
            
                
                    
                        
                        
                    
                
            
            
                
                    
                        
                    
                
            
        
    
    
        
    
    
        
    
    
        
            
            
        
    
    
        
        
            
            
                
            
            
                
            
        
    
    
        
        
            
            
                
            
            
                
            
        
    
    
        
        
            
            
                
            
            
                
            
        
    
    
        
            
        
        
            
        
        
            
        
    


1.6 参数额外处理
以上文件即可作为对外提供的WSDL文件。
注意在本文件中,对于入参在WSDL中显示的是args0、args1而不是name、password。这个需要修改AxisService接口文件。
修改为
package com.hsinghsu.www;

import javax.jws.WebParam;

public interface AxisService
{
    public String login(@WebParam(name = "name")String name,@WebParam(name = "password") String password);
}
即可,这样在WSDL中的args0、args1就显示成了name、password。

另外在出参的WSDL中显示名称的是return,这个是axis2的默认名称,可以通过修改源码进行实现展现不同的名称。【详情参考http://hi.baidu.com/ai_zxc/item/7b1746105a91f8453b176e4f 】

二.xfire服务端编写
2.1 web.xml配置
在web.xml中添加如下配置项:



	xfire
	org.codehaus.xfire.spring.XFireSpringServlet


	xfire
	/services/*


2.2 接口实现编写
接口:
package com.hsinghsu.www;

public interface XfireService
{
    public String login(String name, String password);
}

接口实现:
package com.hsinghsu.www;

public class XfireServiceImpl implements XfireService
{
    public String login(String name, String password)
    {
        if (null == name || null == password)
        {
            return "error|参数错误";
        }
        else
        {
            return "succss|good";
        }
    }   
}

2.3 applicationContext.xml配置
applicationContext.xml 文件中添加以下配置项:

  

  
	  
	  
 



    
	  
	 
  

2.4 测试
在浏览器中输入:http://127.0.0.1:80/application/services/XfireService?wsdl  【注:application为该项目应用名称,services为在web.xml中配置的路径,XfireService为在service类名】
结果如下:




  

















  
  
    
    
  
  
    
    
  
  
    
      
    
      
    
    
  
  
    
    
      
      
        
      
      
        
      
    
  
  
    
      
    
  



三.客户端测试
使用RPC方法进行SOAP方法调用。
package com.huawei.ccmeeting.web.service;

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;

import com.huawei.ccmeeting.web.common.LoadConfig;

public class AsixRPCClient
{
    public static String sendAsix(String methodName, Object[] methodArgs)
    {
        RPCServiceClient serviceClient = null;
        try
        {
            serviceClient = new RPCServiceClient();
        }
        catch (AxisFault e)
        {
            e.printStackTrace();
        }
        Options options = serviceClient.getOptions();
        
        EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:80/application/services/XfireService");// 指定调用WebService的URL
        options.setTo(targetEPR);
        
        Class[] classes = new Class[] {String.class};// 指定方法返回值的数据类型的Class对象
        
        QName opAddEntry = new QName("http://www.hsinghsu.com", methodName);// 指定要调用的方法及WSDL文件的命名空间
        Object[] objects = null;//返回结果
        try
        {
            objects = serviceClient.invokeBlocking(opAddEntry, methodArgs, classes);// RPCServiceClient类的invokeBlocking方法调用了WebService中的方法。
        }
        catch (AxisFault e)
        {
            e.printStackTrace();
        }
        
        //平台返回报文中的第一个字符串,如 “error:失败原因”
        return (String)objects[0];
    }
    
    public static void main(String[] args)
    {
        String methodName = "login";// 指定方法名
        Object[] args1 = new Object[] {"hsinghsu", "123456"};// 指定方法的参数值;
        String result = AsixRPCClient.sendAsix(methodName, args1);
        System.out.println("result:" + result);
    }
    
}


你可能感兴趣的:(Web)