web service

首先定义个接口Hello.java

 

package ch1;

public interface Hello {

	public String sayHello();
}

 然后实现这个接口, 实现类为:HelloImpl.java

 

package ch1;

public class HelloImpl implements Hello{

	public String sayHello() {
		return "hello";
	}

}

 通过CXF把这个web service发表出去:

 package ch1;

import org.apache.cxf.frontend.ServerFactoryBean;

public class Test {

	public static void main(String[] args)
	{
		HelloImpl impl = new HelloImpl();
		ServerFactoryBean factory = new ServerFactoryBean();
		factory.setServiceClass(Hello.class);
		factory.setAddress("http://localhost:8080/Hello");
		factory.setServiceBean(impl);factory.getInInterceptors().add(new LoggingInInterceptor());
		factory.getOutInterceptors().add(new LoggingOutInterceptor());
		factory.create();
	}
}

 访问这个web service的wsdl文件 http://localhost:8080/Hello?wsdl


		
				
						
						
								
						
						
						
								
										
								
						
				
		
		
				
		
		
				
		
		
				
						
						
						
						
				
		
		
				
						
						
						
								
						
						
								
						
				
		
		
				
						
				
		
 
web service的服务器端把这个wsdl暴露出来, 客户端可以根据这个wsdl来访问客户端。
客户端通过ClientProxyFactoryBean类创建实例, 然后调用实例的方法。
public class TestClient 
{

	public static void main(String[] args)
	{
		ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
		factory.setServiceClass(Hello.class);
		factory.setAddress("http://localhost:8080/Hello");
		Hello hello = (Hello) factory.create();
		System.out.println("invoke sayHello()...");
		hello.sayHello();
		System.exit(0);
	}
}
 运行这个java文件可以在客户端看到结果:
 invoke sayHello()...
 hello

 这样我们就可以访问这个发表出去的web service了

 也可以在eclipse 的 run->Launch the web service Explorer 来观察已经发表的web servic

  还可以添加拦截器
  
factory.getInInterceptors().add(new LoggingInInterceptor());
factory.getOutInterceptors().add(new LoggingOutInterceptor());
   

你可能感兴趣的:(CXF,Web,SOAP,Eclipse,Apache)