2015-06-22 107 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(); 
}