Axis+Spring

阅读更多

Axis1整合Spring比较简单,这种便利得益于Spring的ServletEndpointSupport类支持

1、导入jar包

   1.1、axis1的jar包

   activation.jar 
   axis.jar 
   commons-discovery.jar 
   commons-logging.jar 
   jaxrpc.jar 
   log4j-1.2.8.jar 
   mailapi_1_3_1.jar 
   wsdl4j-1.5.1.jar 
   1.2、spring相关jar包

 

2、创建服务端

   2.1、创建接口

 

package com.axis.service;

public interface HelloWorld {
	public String getMessage(String message);
}

   2.2、创建实现类

 

 

package com.axis.service.impl;

import com.axis.service.HelloWorld;

public class HelloWorldImpl implements HelloWorld {

	@Override
	public String getMessage(String message) {
		return "---------Axis Server-------" + message;
	}
}

   2.3、创建远程接口

 

 

package com.axis.service;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface RemoteHelloWorld extends Remote {
	public String getMessage(String message) throws RemoteException;
} 

   2.3、创建WEB服务(spring与axis1对接,需要做一个ServletEndpointSupport继承实现WebService)

 

 

package com.axis.service;

import java.rmi.RemoteException;

import javax.xml.rpc.ServiceException;

import org.springframework.remoting.jaxrpc.ServletEndpointSupport;

public class JaxRpcHelloWorld extends ServletEndpointSupport implements RemoteHelloWorld {
	private HelloWorld helloWorld;

	protected void onInit() throws ServiceException {
		helloWorld = (HelloWorld) getApplicationContext().getBean("helloWorldService");
	}

	public String getMessage(String message) throws RemoteException {
		return helloWorld.getMessage(message);
	}
}

 这个类有两个重要的方法getMessage()和onInit()方法的实现。在getMessage()中,你看到真实的处理和HelloWorld接口的一个实例相似,HelloWorld接口和RemoteHelloWorld几口根据同样的名称共享方法,但是HelloWorld没有继承Remote,方法也没抛出RemoteException,HelloWorld接口地实现可以在很多环境下通过servlet容器来进行简单的测试,因为他和java远程接口没有关系,我们可可以仅仅使用JaxRpcHelloWorld类代表RemoteHelloWorld,但是将消弱对于RemoteHelloWorld接口的可重用性实现,因为所有的方法必须抛出RemoteExceptio和继Remote,使用HelloWorld接口,我们能够使他在某些环境中更简单的使用

 

 

2.4、配置服务端

   2.4.1、服务端的spring配置文件applicationContext.xml

 



      
      

   2.4.2、部署axis的WebService服务,在web-inf下加入server-config.wsdd 

 


	

	
		
		
	

	
		
			
		
	

 其中最重要的是service标签,他定义了WS的名字,有两个子标签,一个用来指定服务实现类的全名,一个用来定义服务中要被暴露的服务方法过滤器

指定java:RPC表明这是一个RPC风格的服务

   2.4.3、配置web.xml

 




  
    contextConfigLocation
    classpath:/applicationContext.xml
  
  
    org.springframework.web.context.ContextLoaderListener
  
  
	
	  
  	Apache-Axis Servlet  
  	axis  
    org.apache.axis.transport.http.AxisServlet  
    0  
    
    
     axis  
     /services/*  
    

 部署这个web服务,我们在浏览器中运行如下地址(根据你自己的webapp)

http://localhost:8080/services 可以看到你定义的web服务如下:

 
Axis+Spring_第1张图片
 

点击wsdl链接可以看到wdsl

 

 

3、客户端测试

 

package com.axis.client;

import javax.xml.namespace.QName;
import javax.xml.rpc.Call;

import org.apache.axis.client.Service;
import org.junit.Before;
import org.junit.Test;

public class AxisClientTest {
	private String nameSpaceUri = "http://localhost:8080/services/HelloWorld";
	private String wsdlUrl = nameSpaceUri + "?wsdl";
	private Service service;
	private Call call;

	@Before
	public final void init() throws Exception {
		// 创建调用对象
		service = new Service();
		call = (Call) service.createCall();
		// 调用 远程方法
		call.setOperationName(new QName(nameSpaceUri, "getMessage"));
		// 设置URL
		call.setTargetEndpointAddress(wsdlUrl);
	}

	@Test
	public final void testGetMessage() throws Exception {
		// 设置参数
		String message = "HelloWorld";
		// 执行远程调用,同时获得返回值
		String str = (String) call.invoke(new Object[] { message });
		System.out.println(str);
	}
}

 

  • Axis+Spring_第2张图片
  • 大小: 10.9 KB
  • 查看图片附件

你可能感兴趣的:(WebService,axis,框架,Spring,wsdl)