我需要强制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>