gpt4 book ai didi

java - 如何设置 JAX-WS 客户端使用 ISO-8859-1 而不是 UTF-8?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:49 26 4
gpt4 key购买 nike

我想配置我的 JAX-WS 客户端以在 ISO-8859-1 中发送消息。当前使用 UTF-8

这是客户端尝试做的事情:

Map<String, Object> reqContext = ((BindingProvider) service).getRequestContext();
Map httpHeaders = new HashMap();
httpHeaders.put("Content-type",Collections.singletonList("text/xml;charset=ISO-8859-1"));
reqContext.put(MessageContext.HTTP_REQUEST_HEADERS, httpHeaders);

但是这个设置被忽略并且 tcpmon 显示服务器接收到以下内容:

POST /service/helloWorld?WSDL HTTP/1.1
Content-type: text/xml;charset="utf-8"
Soapaction: "helloWorld"
Accept: text/xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
User-Agent: Oracle JAX-WS 2.1.5
Host: 1.1.1.1:8001
Connection: keep-alive
Content-Length: 4135

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelopexmlns:S="http://schemas.xmlsoap.org/soap/envelope/">...

因此,该设置被覆盖并在 HTTP header 和 XML 消息中使用 UTF-8。该服务由以 UTF-8 编码的 WSDL 定义。

问:我是否应该重新定义要在 ISO-8899-1 中编码的服务 WSDL,然后重新生成客户端?或者,是我没有正确设置 HTTP header 吗?

最佳答案

使用处理程序:

public class MyMessageHandler implements SOAPHandler<SOAPMessageContext> {

@Override
public boolean handleMessage(SOAPMessageContext context) {
Boolean outbound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outbound.booleanValue()) {
try {
context.getMessage().setProperty(SOAPMessage.CHARACTER_SET_ENCODING,
"ISO-8859-1");
}
catch (SOAPException e) {
throw new RuntimeException(e);
}
}
return true;
}

并注册处理程序:

    BindingProvider bindProv = (BindingProvider) service;
List<Handler> handlerChain = bindProv.getBinding().getHandlerChain();
handlerChain.add(new MyMessageHandler ());

关于java - 如何设置 JAX-WS 客户端使用 ISO-8859-1 而不是 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13216915/

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