使用客户端时禁用 Apache CXF 上的 FastInfoset(强制 XML)



我需要强制Apache CXF发送XML请求并仅处理XML响应,当我是客户端并且我无法控制服务器或配置时(我看到了这个,但它仅适用于服务器(。现在它总是使用 FastInfoset,这对性能非常有用,但会导致一些问题,我希望能够禁用它,但我在互联网上没有找到太多关于 FastInfoset 的信息以及如何禁用它。你有什么线索吗?

提前感谢您的任何帮助。

仅当远程服务器支持纯 XML 响应时,才有可能执行此操作。大多数同时支持 Fastinfoset 和纯 XML 的服务器都在研究请求Accept标头,以决定以哪种格式返回响应。因此,您可以尝试通过为每个请求发送 Accept: application/xml 标头来强制 XML 响应。为此,您需要创建一个 CXF 输出拦截器并将其注册到您的应用程序中。

以下拦截器将始终设置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>

相关内容

  • 没有找到相关文章

最新更新