我的尝试是从以下SOAPBody内容创建多个soap消息[只是一个样本,不是实际的]。每个EmpId都会有单独的请求。
<Request>
<EMPId>?</EMPId>
</Request>
我使用以下代码将上述请求字符串转换为文档对象。
DocumentBuilder parser = factory.newDocumentBuilder();
Document doc = parser.parse(new InputSource(new ByteArrayInputStream(xmlString.getBytes())));
一旦我有了文档,我就可以通过替换EMPId值来创建SOAPBody。
现在我必须为每个创建的SOAPBody创建单独的SOAPMessages。
为此,我使用以下代码。
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;
}
但是在执行包含内容的行时出现以下错误&#39; soapBodyDoc.setPrefix(&#34; v1&#34;); &#39;
线程中的异常&#34; main&#34; org.w3c.dom.DOMException:NAMESPACE_ERR:An 尝试以某种方式创建或更改对象 关于名称空间不正确。
我尝试在创建SOAPBody的地方添加命名空间prefic,即使该dint工作了。 如何避免此错误并将名称空间前缀添加到SOAPBody?
答案 0 :(得分:0)
得到了解决。 名称空间声明将从信封中删除并添加到正文中。
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody soapBody = envelope.getBody();
soapBody.addDocument(soapBodyDoc);
**soapBody.addNamespaceDeclaration("", serverURI);**
前缀被删除,因为原件没有任何前缀。