Я занимаюсь разработкой веб-сервисов с использованием Apache CXF и Spring. Мои интерфейсы и конфигурация настроены так, что у меня есть и 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. Его нельзя добавить вручную, поскольку это зависит от StaxOutEndingInterceptor, который находится в * завершающей фазе и вызывается после JAXRSOutInterceptor.
Я также пытался реализовать обработчик для той же цели, но безуспешно.
Вот моя конфигурация сервера 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>
Любая помощь - идеи, предложения, все, что будет оценено!