我正在创建一个SOAPMessage,通过webservice返回给客户端。 在我的本地化测试期间(使用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()