У меня проблемы с использованием JAX-WS веб-службы, для которой требуется кодировка ISO-8859-1. В настоящее время мой клиент использует UTF-8 по умолчанию.
Я обнаружил, что должен изменить заголовок HTTP-запроса, потому что в тестах вне моего приложения (SoapUI) он отправляет тот же XML от моего клиента, но изменив свойство «Кодировка», и это сработало.
Я попробовал следующий код:
((BindingProvider) myPort).getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS,
Collections.singletonMap("Content-Type",Collections.singletonList("text/xml;charset=ISO-8859-1")));
А также этот другой:
List<Handler> chain = ((BindingProvider) myPort).getBinding().getHandlerChain();
chain.add(new SOAPHandler<SOAPMessageContext>() {
@Override
public boolean handleMessage(SOAPMessageContext context) {
Boolean outbound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outbound) {
try {
context.getMessage().setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "ISO-8859-1");
} catch (SOAPException e) {
throw new RuntimeException(e);
}
}
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
return true;
}
@Override
public void close(MessageContext context) {
}
@Override
public Set<QName> getHeaders() {
return null;
}
});
((BindingProvider) myPort).getBinding().setHandlerChain(chain);
Два не сделал иметь какое-либо влияние на тип контента. Он всегда генерируется как:
Content-Type: text / xml; charset = utf-8
Кто-нибудь может мне помочь?