配置文件配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <context:component-scan base-package="com.test.inf" /> <jaxws:endpoint id="syncUserService" implementor="com.test.inf.testServiceImpl " address="/testInf"> <jaxws:inInterceptors> <bean name="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/> <bean name="webLogInInterceptor" class="com.test.inf.WebLogInInterceptor" /> </jaxws:inInterceptors> <jaxws:outInterceptors> <bean name="loggingOutInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor" /> <bean name="webLogOutInterceptor" class="com.test.inf.WebLogOutInterceptor" /> </jaxws:outInterceptors> </jaxws:endpoint> </beans>
WebLogInInterceptor 为输入拦截器
WebLogOutInterceptor 为输出拦截器
package com.test.inf; import java.io.ByteArrayInputStream; import java.io.InputStream; import org.apache.cxf.helpers.IOUtils; 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 WebLogInInterceptor extends AbstractPhaseInterceptor<Message> { public MessageInInterceptor() { super(Phase.RECEIVE); } public void handleMessage(Message message) throws Fault { try { String xml; InputStream is = message.getContent(InputStream.class); String encoding = (String)message.get(Message.ENCODING); xml = IOUtils.toString(is); System.out.println("输入报文为:" + xml); message.setContent(InputStream.class, new ByteArrayInputStream(xml.getBytes(encoding))); message.getExchange().put("idtest", xml); } catch (Exception e) { e.printStackTrace(); } } }
message.setExchage().put("idtest", xml); 将输入信息存储
package com.test.inf; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.OutputStream; import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.interceptor.Fault; import org.apache.cxf.io.CachedOutputStream; import org.apache.cxf.message.Message; import org.apache.cxf.phase.AbstractPhaseInterceptor; import org.apache.cxf.phase.Phase; public class MessageOutInterceptor extends AbstractPhaseInterceptor<Message> { @SuppressWarnings("unused") private String mMessage; public MessageOutInterceptor() { super(Phase.PRE_STREAM); } public void handleMessage(Message message) throws Fault { String xml; try { String inputXML = (String) message.getExchange().get("idtest"); System.out.println("输入信息::::"+inputXML); OutputStream os = message.getContent(OutputStream.class); CachedStream cs = new CachedStream(); message.setContent(OutputStream.class, cs); message.getInterceptorChain().doIntercept(message); CachedOutputStream csnew = (CachedOutputStream) message.getContent(OutputStream.class); InputStream in = csnew.getInputStream(); xml = IOUtils.toString(in); System.out.println("输出信息:" + xml); IOUtils.copy(new ByteArrayInputStream(xml.getBytes()), os); cs.close(); os.flush(); message.setContent(OutputStream.class, os); } catch (Exception e) { e.printStackTrace(); } } }
String inputXML = (String) message.getExchange().get("idtest"); 获取输入信息