0

我正在创建一个 SOAPMessage 以通过 web 服务返回给客户端。在我的本地化测试(使用 TCPMon)期间,我将此 SOAPMessage 视为响应,但它会故障转移 Web 服务。

我使用 Wireshark 进行了一些诊断,发现此响应 xml(SOAPMessage) 已损坏,因为它在第 1024 个字符处添加了换行符。我不知道响应是否正确形成,并且由于某种原因,Wireshark 添加了换行符,或者此响应被真正损坏。我正在使用 Tomcat

要了解代码的结构,它类似于 -

在流程中的某个时刻,我设置了以下内容(我删除了这两行,但结果仍然相同)

//httpservletResponse.setContentType("text/html; charset=UTF-8");
//httpservletResponse.setCharacterEncoding("UTF-8");

在流程的后期,我执行以下操作

try {
servletOS = httpservletResponse.getOutputStream();
soapMessage.writeTo(servletOS);
servletOS.close();
} finally {
    httpservletResponse.flushBuffer();
}

上面的代码只是给出一个基本的理解,请考虑它编译良好并且所有用户定义的值都正确设置。我正在努力缩小确切问题的可能范围,实际上是 SOAPMessage 由于其编码等原因?流被刷新/关闭等?客户?

我很乐意提供更多信息。

另请注意,使用 SAAJ 的类似过程在相同环境中工作得非常好。

这就是我建立回应的方式 -

MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart responseSOAPPart = faultMessage.getSOAPPart();
SOAPEnvelope responseEnvelope = responseSOAPPart.getEnvelope();  
soapMessage.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "UTF-8");
soapMessage.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");  
responseEnvelope.addNamespaceDeclaration("xsd", "http://........");
responseEnvelope.addNamespaceDeclaration("wsa", "http://......");
// and others  
SOAPHeader soapHeader = responseEnvelope.getHeader();  
// creating various SOAPHeaderElements viz. wsa:To,  wsa:Action, wsa:From etc. 
// and adding these to the SOAPHeader  
// Adding SOAPBody
SOAPBody body = soapMessage.getSOAPBody();
// add body element  
soapMessage.saveChanges()  
4

0 回答 0