gpt4 book ai didi

java - SOAP 负载中的特殊字符未正确传输

转载 作者:行者123 更新时间:2023-12-02 07:28:44 24 4
gpt4 key购买 nike

我使用 CXF 编写了一个 SOAP Web 服务,该服务由 SAP 系统调用,在有效负载中,有一个带有多次出现的特殊字符的单词。然而,在某些随机情况下,我对这个词的解读有所不同,即在一个有效负载中,我将该词视为 Kliëntbestuurder,而在另一个有效负载中,我将其视为 Kli��ntbestuurder

通过 SAP PI 调用我的服务的 SAP 系统只有一个词。

更新:因此,似乎不是 Web 服务通信变得困惑,而是我编写的拦截器转储 SOAP 信封以便我能够仔细检查。拦截器如下:

public class WebServiceMessageInterceptor extends AbstractPhaseInterceptor<Message> {

public WebServiceMessageInterceptor() {
super(Phase.RECEIVE);
}

@Override
public void handleMessage(Message message) throws Fault {
final LoggingMessage buffer = new LoggingMessage("", "");

String encoding = (String) message.get(Message.ENCODING);

if (encoding != null) {
buffer.getEncoding().append(encoding);
}
Object headers = message.get(Message.PROTOCOL_HEADERS);

if (headers != null) {
buffer.getHeader().append(headers);
}

InputStream is = message.getContent(InputStream.class);
if (is != null) {
CachedOutputStream outputStream = new CachedOutputStream();
try {
IOUtils.copy(is, outputStream);
outputStream.flush();
is.close();

message.setContent(InputStream.class, outputStream.getInputStream());
outputStream.writeCacheTo(buffer.getPayload(), "UTF-8", -1);
outputStream.close();

FileUtils.writeStringToFile(new File("/tmp/soap" + System.currentTimeMillis() + ".log"), buffer.toString(), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
throw new Fault(e);
}
}
}

对于我的拦截器不使用 UTF-8 的任何进一步想法吗?

最佳答案

这可能与服务之间和服务内未使用一致的编码有关。我建议您阅读这篇优秀的tutorial - Unicode - How to get the characters right?来帮助自己端到端。一旦缩小了错误的范围,就提出后续问题。

关于java - SOAP 负载中的特殊字符未正确传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13196627/

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