SOAPMessage如何解析<![CDATA []]&gt ;? [英] How can SOAPMessage parse <![CDATA[ ]]>?

查看:313
本文介绍了SOAPMessage如何解析<![CDATA []]&gt ;?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是将Java对象编组为SOAPMessage的代码:

Here is the code which marshals java object into a 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;
    }

并且对象喜欢:

 @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;
    }
}

我想将其封送至此xml:

I want to marshal it to this xml:

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

,但现在显示为:

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

您能告诉我这是怎么回事吗?

Could you please tell me what's wrong with it?

推荐答案

您不能直接解析CDATA内的xml,因为解析器将忽略添加为CDATA的全部目的。您可以在CDATA元素内获取数据,如下所示。

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. You can get the data inside CDATA element as below and you can parse that.

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();
}

这篇关于SOAPMessage如何解析&lt;![CDATA []]&gt ;?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆