SAP システムによって呼び出されている CXF を使用して SOAP Web サービスを作成しました。ペイロードには、複数回出現する特殊文字を含む単語があります。ただし、ランダムなケースでは、この単語の読み方が異なります。つまり、あるペイロードでは単語がKliëntbestuurder
と表示され、別のペイロードでは と表示されKli��ntbestuurder
ます。
SAP PI を介して私のサービスを呼び出す SAP システムには、1 つの単語しかありません。
更新: 混乱していたのは 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 を使用していない理由について、さらにアイデアはありますか?