簡體   English   中英

使用客戶端時,禁用Apache CXF上的FastInfoset(強制XML)

[英]Disable FastInfoset (force XML) on Apache CXF when using the client

當我是客戶端而我無法控制服務器或配置時,我需要強制Apache CXF發送XML請求並僅處理XML響應(我看到了這一點,但它只適用於服務器)。 現在它總是使用FastInfoset,這對於性能很好,但是引起了一些問題,我希望能夠禁用它,但我沒有在Internet上找到關於FastInfoset的更多信息,應該如何禁用它。 你有線索嗎?

預先感謝您的任何幫助。

僅當遠程服務器支持純XML響應時,才可以執行此操作。 大多數支持Fastinfoset和純XML的服務器都在查看請求中的Accept標頭,以決定返回響應的格式。 因此,您可以嘗試通過向每個請求發送Accept: application/xml標頭來強制執行XML響應。 為此,您需要創建一個CXF out攔截器並將其注冊到您的應用程序中。

Interceptor之后將始終設置Accept: application/xml

public class HttpHeaderInterceptor extends AbstractPhaseInterceptor<Message>{
    public XmlOnlyInterceptor() {
        super(Phase.POST_PROTOCOL);
    }
    @Override
    public void handleMessage(Message message) throws Fault {
        Map<String, List> headers = (Map<String, List>)message.get(Message.PROTOCOL_HEADERS);
        headers.put("Accept", Collections.singletonList("application/xml"));
    }
}

要注冊它,請使用以下配置

<jaxws:client id="clientBean" serviceClass="org.example.service.ServicePortType"
          address="example.org/src/service/ServicePort">
    <jaxws:outInterceptors>
        <bean class="org.example.interceptor.HttpHeaderInterceptor"/>
    </jaxws:outInterceptors>
</jaxws:client>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM