2017-06-12 68 views
1

測試豆無法解析xml根元素的使用傑克遜

@JacksonXmlRootElement(localName = "DATA_RECORD") 
public class TestBean{ 
    @JacksonXmlProperty(localName="ERROR_MESSAGE_CODE") 
    private String error_message_code; 
    @JacksonXmlProperty(localName="ERROR_MESSAGE") 
    private String error_message; 
    //...getter/setter 
} 

XML示例

String xml = "<?xml version=\"1.0\" encoding=\"Windows-31J\" standalone=\"no\"?>" 
      + "<Message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " 
      //+">" 
      + "xsi:noNamespaceSchemaLocation=\"TEST.xsd\">" // if comment out this,it will work. 
      + "<DATA_RECORD>" 
      + "<ERROR_MESSAGE>some message</ERROR_MESSAGE>" 
      + "<ERROR_MESSAGE_CODE>CODE111</ERROR_MESSAGE_CODE>" 
      + "</DATA_RECORD>" 
      + "</Message>"; 

反序列化

XmlMapper xmlMapper = new XmlMapper(); 
//xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
xmlMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 
TestBean test = xmlMapper.readValue(xml, TestBean.class); 
log.debug(test.toString()); 

我跑從JUnit和我得到的異常,如:

根目錄名稱 'noNamespaceSchemaLocation' 不匹配,期望 ( 'DATA_RECORD')....

如果我刪除String xmlxsi:noNamespaceSchemaLocation="TEST.xsd",它會工作精細。

對此有何想法?感謝幫助。

回答

1

按照docs,當您指定UNWRAP_ROOT_VALUE,傑克遜(XML這裏,而不是JSON)

將驗證根JSON值是一個JSON對象,它有 預計單個屬性根名稱。如果不是,則拋出一個 JsonMappingException;

在這種情況下根Message具有除了DATA_RECORD另一個屬性,則XML名稱爲noNamespaceSchemaLocation屬性和作爲指定的JsonMappingException被拋出。

恐怕你必須解析Message並從那裏得到TestBean。例如: -

@JacksonXmlRootElement 
class Message { 
    @JacksonXmlProperty(localName = "DATA_RECORD") 
    private TestBean dataRecord; 
} 

class TestBean { 
    @JacksonXmlProperty(localName = "ERROR_MESSAGE_CODE") 
    private String error_message_code; 
    @JacksonXmlProperty(localName = "ERROR_MESSAGE") 
    private String error_message; 
} 

xmlMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); 
Message test = xmlMapper.readValue(xml, Message.class); 
log.debug(test.getDataRecord().toString()); 
+0

感謝您help.it作品!所以我不能解析XML部分喜歡拿爲根元素,不? – fanshaoer