简体   繁体   English

SOAPMessage如何解析 <![CDATA[ ]]> ?

[英]How can SOAPMessage parse <![CDATA[ ]]>?

Here is the code which marshals java object into a SOAPMessage: 这是将Java对象编组为SOAPMessage的代码:

     public static SOAPMessage encode(String key,Object object) throws JAXBException, SOAPException{
 JAXBContext airContext = newInstance("com.test");
        contextMap.put("ws", airContext);
        Marshaller marshaller = airContext .createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage message = messageFactory.createMessage();
        marshaller.marshal(object, message.getSOAPBody());
        message.saveChanges();
        return message;
    }

and the object likes: 并且该对象喜欢:

 @XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
private String name;
    private String surname;
public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }
}

I want to marshal it to this xml: 我想将其封送至此xml:

<root>
    <name><![CDATA[test]]></name>
    <surname>test</surname>
</root>

but now it displays as : 但现在显示为:

<root>
    <name>&lt;![CDATA[test]]&gt;</name>
    <surname>test</surname>
</root>

Could you please tell me what's wrong with it? 你能告诉我这是怎么回事吗?

You cannot directly parse the xml which is inside CDATA because the whole purpose of adding as CDATA is to be ignored by the parser. 您不能直接解析CDATA内的xml,因为解析器将忽略添加为CDATA的全部目的。 You can get the data inside CDATA element as below and you can parse that. 您可以按以下方式在CDATA元素中获取数据,然后可以对其进行解析。

SOAPBody soapBody = soapMessage.getSOAPBody();
NodeList nodeList = soapBody.getElementsByTagName("outerElementOfCDATA");
Element element = (Element) nodeList.item(0);
Node child = element.getFirstChild();
String characterData;
if (child instanceof CharacterData) {
   characterData = ((CharacterData) child).getData();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM