web service

在我们的第一篇中发布web service 通过java code, 这里我们使用另外一种方法(Spring)来发布web service

 

同样还是先声明个接口 然后实现它

 

 

package demo.spring;

import javax.jws.WebService;

@WebService
public interface HelloWorld 
{

	String sayHi(String text);
}

 实现这个接口

 

package demo.spring;

import javax.jws.WebService;

@WebService(endpointInterface="demo.spring.HelloWorld")
public class HelloWorldImpl implements HelloWorld
{

	@Override
	public String sayHi(String text) 
	{
		System.out.println("sayHi called");
		return "Hello " + text;
	}

}

 

然后编写个xml文件 service-beans.xml来描述这个web service

 




	
	
	
		
		
		
			
		
	
	
	

 

然后通过Spring来发布他package demo.spring.server;

import org.springframework.context.support.ClassPathXmlApplicationContext;


public class Server {

	protected Server() throws Exception
	{
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"demo/spring/server/server-beans.xml"});
		context.getBean("bean");
		System.out.println("Server ready...");
	}
	
	public static void main(String[] args) throws Exception
	{
		new Server();
	}
}

 

运行这个文件, 这个web service 就发布了,http://localhost:9002/HelloWorld?wsdl 在这里可以看到发布的wsdl文件

 

同样我们在客户端也可以使用spring来测试

client-beans.xml

 





	
	
	
		
		
	

 

 

package demo.spring.client;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import demo.spring.HelloWorld;

public class Client {

	public static void main(String[] args) throws Exception
	{
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"demo/spring/client/client-beans.xml"});
		HelloWorld client = (HelloWorld) context.getBean("client");
		
		String response = client.sayHi("Joe");
		System.out.println("Response: "+response);
		System.exit(0);
	}
}
 

 运行这个Java文件,可以在命令行上看到

 客户端: 

 Response: Hello Joe

 服务器端:

 Server ready...

 sayHi called

 

 和java code 一样, 我们还可以添加拦截器,分别修改server-beans.xml client-beans.xml这两个文件




	
	
	
	
		
		
		
			
		
		
			
				
				
			
		
		
			
				
			
		
	
	
	
 

其中MyInterceptor是我们自己定义的拦截器 而不是cxf提供的, 我们可以用这中方法实现自己的拦截器

package demo.spring.server;

import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;

public class MyInterceptor extends AbstractPhaseInterceptor
{

	public MyInterceptor() 
	{
		super(Phase.RECEIVE);
	}

	public void handleMessage(Message message) throws Fault 
	{
		System.out.println("this is my first Interceptor extends by AbstractPhaseInterceptor");
	}

}

 

修改client-beans.xml





	
	
	
		
		
		
			
				
			
		
		
			
				
			
		
	
 这样我们就添加了 输入 输出的log拦截器 和自定义的拦截器。

你可能感兴趣的:(CXF,Web,Spring,Bean,Apache,WebService)