SOAPMessage创建带有空xmlns属性的XML



我正在尝试创建一个SOAPMessage,它包含一个遵循特定格式的XML,以前我曾尝试将已经生成的XML作为字符串,但是它会变成">"one_answers";& lt;"字符到>以及端点未正确验证的<。我设法将XML作为一个节点放在一个文档中,这是可以工作的,但是,现在XML中的xmlns属性(它确实有值)变为空。例如,给定以下消息:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<Example xmlns="https://www.example.com"/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

xmlns="https://www.example.com"最终为xmlns="",这对端点无效。我现在的代码是:


MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody soapBody = envelope.getBody();
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = db.newDocument();
Node node = db.parse(new InputSource(new StringReader(xmlString))).getDocumentElement();
Node newNode = node.cloneNode(true);
document.adoptNode(newNode);
document.appendChild(newNode);
soapBody.addDocument(document);
soapMessage.saveChanges();
return soapMessage;

我尝试记录SOAPMessage和整个过程中使用的节点,以查看任何更改,并且xmlns总是有一个值。我的下一个想法是用xmlns逐个添加节点,这样我就可以手动设置属性,但是考虑到我已经必须将XML作为单个节点添加的方法,这似乎很复杂,并且最终产生的代码可能会非常复杂。我需要知道是否有人有任何线索或想法,为什么会发生这种情况,以及如何以更简单的方式修复它。

通过创建这个方法解决了这个问题:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder;  
try{  
factory.setNamespaceAware(true);
builder = factory.newDocumentBuilder();  
Document doc = builder.parse( new InputSource( new StringReader( xmlString ) ) ); 
return doc;
} catch (Exception e) {  
e.printStackTrace();  
} 
return null;

最新更新