繁体   English   中英

Apache CXF: - 如何使用cxf拦截器提取有效负载数据

[英]Apache CXF :- How do i extract the payload data using cxf interceptors

我应该遵循哪些步骤来使用Apache CXF拦截器提取有效负载?

您的拦截器需要从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>

在这里查看文档

您可以使用LoggingInInterceptor将有效负载检索为String

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);
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM