Отключить FastInfoset (принудительно XML) на Apache CXF при использовании клиента
Мне нужно заставить Apache CXF отправлять запросы XML и обрабатывать только ответы XML, когда я являюсь клиентом, и у меня нет контроля над сервером или конфигурацией (я видел это, но это относится только к серверу). Прямо сейчас он всегда использует FastInfoset, который отлично подходит для выступлений, но вызывает некоторые проблемы, и я хотел бы иметь возможность отключить его, но я не нашел много информации о FastInfoset в Интернете и о том, как его отключить. У тебя есть какие-нибудь подсказки?
Спасибо заранее за любую помощь.
1 ответ
Это возможно только в том случае, если удаленный сервер поддерживает чисто XML-ответы. Большинство серверов, которые поддерживают как Fastinfoset, так и чистый XML, изучают Accept
Заголовок из запроса, чтобы решить, в каком формате вернуть ответ. Таким образом, вы можете попытаться форсировать ответ XML, отправив Accept: application/xml
Заголовок с каждым из ваших запросов. Для этого вам нужно создать перехватчик CXF out и зарегистрировать его в вашем приложении.
Следующий перехватчик всегда будет установлен 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>