2016-07-26 85 views

回答

2

你的攔截器需要從AbstractPhaseInterceptor或子類來擴展

public class MyInterceptor extends AbstractPhaseInterceptor<Message> { 
    public MyInterceptor() { 
     super(Phase.RECEIVE); 
    } 

    public void handleMessage(Message message) { 
     //Get the message body into payload[] and set a new non-consumed inputStream into Message 
     InputStream in = message.getContent(InputStream.class); 
     byte payload[] = IOUtils.readBytesFromStream(in); 
     ByteArrayInputStream bin = new ByteArrayInputStream(payload); 
     message.setContent(InputStream.class, bin); 
    } 

    public void handleFault(Message messageParam) { 
     //Invoked when interceptor fails 
    } 
} 

添加攔截器編程

MyInterceptor myInterceptor = new MyInterceptor(); 

Server server = serverFactoryBean.create(); 
server.getEndpoint().getInInterceptor().add(myInterceptor); 

或者使用配置

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:cxf="http://cxf.apache.org/core" 
     xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> 

    <bean id="MyInterceptor" class="demo.interceptor.MyInterceptor"/> 

    <!-- We are adding the interceptors to the bus as we will have only one endpoint/service/bus. --> 

    <cxf:bus> 
     <cxf:inInterceptors> 
      <ref bean="MyInterceptor"/> 
     </cxf:inInterceptors> 
     <cxf:outInterceptors> 
      <ref bean="MyInterceptor"/> 
     </cxf:outInterceptors> 
    </cxf:bus> 
</beans> 

檢查文檔here

+0

@ pedrofb我該在的handleMessage方法寫才能得到有效載荷什麼代碼...我在CXF .. –

+0

新手看看在CXF'LoggingInInterceptor.handleMessage'和'LoggingOutInterceptor.handleMessage'的源代碼中。這些類允許在日誌中打印完整的消息。你可以從那裏複製和粘貼http://grepcode.com/file/repo1.maven.org/maven2/org.apache.cxf/cxf-core/3.1.1/org/apache/cxf/interceptor/LoggingInInterceptor.java #LoggingInInterceptor.handleMessage%28org.apache.cxf.message.Message%29 – pedrofb

+0

@ pedrofb我已經使用LoggingInInterceptor和LoggingOutInterceptor ....在日誌中打印完整的消息。我想在Java類中提取有效負載時用戶發送數據....對不起,如果我在這裏丟失東西.. –

0

您可以使用LoggingInInterceptor檢索有效載荷爲字符串

public class CustomInInterceptor extends LoggingInInterceptor { 

    /** 
    * SLF4J Log Instance 
    */ 
    private final static Logger LOG = LoggerFactory.getLogger(CustomInInterceptor.class); 

    /** 
    * formats logging message and also attaches input xml to thread context 
    * 
    * @see org.apache.cxf.interceptor.LoggingInInterceptor#formatLoggingMessage(org.apache.cxf.interceptor.LoggingMessage) 
    */ 
    @Override 
    protected String formatLoggingMessage(final LoggingMessage loggingMessage) { 
    //The below line reads payload and puts into threads context, which I use later to save in db 
    KpContextHolder.setInputXml(loggingMessage.getPayload().toString()); 
     return super.formatLoggingMessage(loggingMessage); 
    } 

}