JAX WS / Изменить кодировку типа контента на ISO-8859-1 - PullRequest
0 голосов
/ 09 апреля 2020

У меня проблемы с использованием 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

Кто-нибудь может мне помочь?

...