gpt4 book ai didi

jax-ws - Apache CXF JAX-RS 服务缺少 XML 文档启动

转载 作者:行者123 更新时间:2023-12-04 06:10:39 25 4
gpt4 key购买 nike

我正在使用 Apache CXF 和 Spring 开发 Web 服务。我的接口(interface)和配置已配置,以便我同时拥有 REST 和 SOAP 服务。
Apache CXF 未将 XML 文档放在开头:<?xml version="1.0" encoding="UTF-8"?>
对于 SOAP 服务,我实现了一个拦截器,它运行良好。这是代码:

public class CustomHeaderInterceptor extends AbstractPhaseInterceptor<Message> {

public CustomHeaderInterceptor() {
super(Phase.PRE_STREAM);
addBefore(StaxOutInterceptor.class.getName());
}

@Override
public void handleMessage(Message message) throws Fault {
message.put(Message.ENCODING, "UTF-8");
message.put(StaxOutInterceptor.FORCE_START_DOCUMENT, Boolean.TRUE);
}
}

拦截器添加了以下配置:

<bean id="customHeader" class="com.minervanetworks.xtv.stb.utils.CustomHeaderInterceptor" />

<cxf:bus>
<cxf:inInterceptors>
<ref bean="logInbound" />
</cxf:inInterceptors>
<cxf:outInterceptors>
<ref bean="customHeader" />
<ref bean="logOutbound" />
</cxf:outInterceptors>
<cxf:inFaultInterceptors>
<ref bean="logInbound" />
</cxf:inFaultInterceptors>
<cxf:outFaultInterceptors>
<ref bean="logOutbound" />
</cxf:outFaultInterceptors>
</cxf:bus>

不幸的是,这不适用于我的 JAX-RS 服务器。 “StaxOutInterceptor.FORCE_START_DOCUMENT”由 StaxOutInterceptor 处理,当我使用 JAX-RS 时它不在链中。无法手动添加,因为它依赖于处于 *ending 阶段并在 JAXRSOutInterceptor 之后调用的 StaxOutEndingInterceptor。

我也尝试为相同的目的实现处理程序,但没有任何成功。

这是我的 JAXRS 服务器配置:

<jaxrs:server id="restServer" address="/rest">
<jaxrs:providers>
<ref bean="systemExceptionMapper" />
<ref bean="jaxbProvider" />
</jaxrs:providers>
<jaxrs:serviceBeans>
...
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
<entry key="feed" value="application/atom+xml" />
<entry key="html" value="text/html" />
</jaxrs:extensionMappings>
</jaxrs:server>

任何形式的帮助 - 想法,建议,任何将被应用的东西!

最佳答案

在这个问题上投入了大量时间后,我找到了以下解决方案。

Apache CXF 在编码集合时没有将 XML 文档启动,这就是我的情况。这是 JAXBElement 提供程序中的一种遗漏。我意识到在编码单个对象时一切都很好。

所以对我来说显而易见的解决方案是将我的集合包装在一个集合对象中,如下所示:

public class CollectionWrapper{

private List collection;

...

}



重构我的方法以返回 CollectionWrapper,而不是 List 完成了这项工作。

关于jax-ws - Apache CXF JAX-RS 服务缺少 XML 文档启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com