![]() |
踏实的风衣 · php接收base64数据生成图片并保存_p ...· 4 月前 · |
![]() |
深情的围巾 · groovy ...· 10 月前 · |
![]() |
重感情的包子 · Application.OnKey 方法 ...· 2 年前 · |
![]() |
才高八斗的冰棍 · c++未定义标识符gets-掘金· 2 年前 · |
我的尝试是从以下SOAPBody内容创建多个soap消息--只是一个示例消息,而不是实际的soap消息。每个EmpId都会有单独的请求。
<Request>
<EMPId>?</EMPId>
</Request>
我使用以下代码将上述请求字符串转换为文档对象。
DocumentBuilder parser = factory.newDocumentBuilder();
Document doc = parser.parse(new InputSource(new ByteArrayInputStream(xmlString.getBytes())));
一旦我有了文档,我就可以通过替换SOAPBody值来创建EMPId。
现在,我必须为每个创建的SOAPMessages创建单独的SOAPBody。
为此,我使用以下代码。
private static String cretaeSOAPMessage(Document soapBodyDoc, String serverURI, String soapAction){
String soapMsg = null;
try {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("v1",serverURI);
SOAPBody soapBody = envelope.getBody();
soapBodyDoc.setPrefix("v1");
soapBody.addDocument(soapBodyDoc);
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", serverURI + soapAction);
soapMessage.saveChanges();
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
soapMessage.writeTo(out);
} catch (IOException e) {
e.printStackTrace();
soapMsg = new String(out.toByteArray());
} catch (SOAPException e) {
e.printStackTrace();
return soapMsg;
}
但是,在执行内容' soapBodyDoc.setPrefix("v1"); ‘行时,我得到了以下错误
线程"main“org.w3c.dom.DOMException: NAMESPACE_ERR中的异常:尝试以与命名空间有关的不正确的方式创建或更改对象。
我试图在创建SOAPBody的地方添加名称空间预基,即使这种能力得到了实现。如何避免此错误并向SOAPBody添加命名空间前缀?
发布于 2014-08-25 07:01:36
解决了。名称空间声明从信封中移除并添加到正文中。
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
![]() |
才高八斗的冰棍 · c++未定义标识符gets-掘金 2 年前 |