如何使用SAAJ将CDATA部分添加到SOAPMessage?

时间:2011-03-28 17:24:10

标签: java cdata axiom saaj

我正在尝试使用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);

我找不到合适的方法,我确信它应该很简单......任何人都可以帮忙吗?

由于

3 个答案:

答案 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部分。

干杯, 托