我正在尝试使用saaj(axis2-saaj-1.5.4)将一个cdata部分添加到soap消息中。我有一个xml文档,我想将其定义为cdata部分并将其放入soap文档正文中的元素中......类似于以下内容(尽管这会导致编译器错误):
Element cdataElem = doc.createElement("cdata");
CDATASection cdata = doc.createCDATASection(xmlDocAsString);
cdataElem.appendChild(cdata);
SOAPMessage message = factory.createMessage();
soapMessage.getSOAPBody().addChildElement(cdataElem);
我找不到合适的方法,我确信它应该很简单......任何人都可以帮忙吗?
由于
答案 0 :(得分:3)
我有类似的问题。最后我用saaj得到了一个解决方案:
SOAPMessage message = factory.createMessage();
message.getSOAPBody().addChildElement(message.getSOAPpart().createCDATASection(xmlDocAsString));
Apparentetly SOAPPart似乎充当了DOM文档。
答案 1 :(得分:1)
我已经按照skaffman的建议使用公理而不是saaj来解决这个问题。
我在下面的示例代码中使用了axiom-api-1.2.8.jar和axiom-impl-1.2.8.jar:
SOAPFactory factory = OMAbstractFactory.getSOAP11Factory();
SOAPEnvelope envelope = factory.getDefaultEnvelope();
OMElement xmlElement= factory.createOMElement("search", envelope.getDefaultNamespace());
envelope.getBody().addChild(xmlElement);
OMTextImpl omText = (OMTextImpl) xmlElement.getOMFactory().createOMText(xmlElement, xmlForCdata, XMLStreamConstants.CDATA);
xmlElement.addChild(omText);
System.out.println(envelope.toStringWithConsume());
这似乎非常好用,并且不会转换'<'标签到& LT;
答案 2 :(得分:0)
我设法添加了一个带有SAAJ的CDATA部分,只需用CDATA部分包围我的XML的根元素,然后使用“element.addTextNode(xmlString)”将XML添加到元素中
因此,XML实体没有转义,因为它们没有CDATA部分。
干杯, 托