2015-06-22 110 views
0

这里是一个编组的Java对象转换成的SOAPMessage代码:SOAPMessage如何解析<![CDATA[ ]]>?

 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:

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

但现在它显示为:

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

你能告诉我它有什么问题吗?

回答

1

您不能直接解析CDATA内部的xml,因为添加为CDATA的整个目的将被解析器忽略。您可以像下面那样获取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(); 
}