这篇文章是接着上篇文章进行完善的
这里所要记录的是如何进行CXF拦截器的部署
1................................................编写类
MessageInterceptor.java 这里存放的我们进行的拦截操作
package Interceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
/*
* 自定义拦截器
*/
public class MessageInterceptor extends AbstractPhaseInterceptor<Message>{
public MessageInterceptor(String phase) {
super(phase);
}
public void handleMessage(Message message) throws Fault {
System.out.println("****************************进入拦截器*********************************************");
System.out.println(message);
if(message.getDestination()!=null){
System.out.println(message.getId()+"#"+message.getDestination().getMessageObserver());
}
if(message.getExchange()!=null){
System.out.println(message.getExchange().getInMessage()+"#"+message.getExchange().getInFaultMessage());
System.out.println(message.getExchange().getOutMessage()+"#"+message.getExchange().getOutFaultMessage());
}
System.out.println("**************************离开拦截器**************************************");
}
}
2........................................修改一下我们的发布程序类,这样我们服务端的拦截器就开发完成了
package Server;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.phase.Phase;
import Interceptor.MessageInterceptor;
import Type.HelloWorldImpl;
public class ServiceTest {
public static void main(String[] args) throws InterruptedException {
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setServiceClass(HelloWorldImpl.class);
factory.setAddress("http://localhost:8080/HelloWorld");
factory.setServiceBean(new HelloWorldImpl());
factory.getInInterceptors().add(new MessageInterceptor(Phase.RECEIVE));
factory.getOutInterceptors().add(new MessageInterceptor(Phase.SEND));
Server server = factory.create();
server.start();
System.out.println("Server start.....................");
Thread.sleep(1000 * 60);
System.exit(0);
System.out.println("Server exit ");
}
}
3..............................................客户端可以不变,也可以进行开发客户端拦截器,只需加两句话就OK了,如下代码
package Client;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
public class ClientTest {
public static void main(String[] args) throws Exception {
JaxWsDynamicClientFactory ser = JaxWsDynamicClientFactory.newInstance();
Client client =ser.createClient("http://localhost:8080/HelloWorld?wsdl");
client.getInInterceptors().add(new LoggingInInterceptor());
client.getOutInterceptors().add(new LoggingOutInterceptor());
Object[] o = client.invoke("sayHi", "sa");
System.out.println(o[0]);
}
}
4...............................................服务端运行结果
5.........................................客户端运行结果