2017-06-12 4 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 xmlからxsi:noNamespaceSchemaLocation="TEST.xsd"を削除した場合、それは動作します良い。

これについて考えてみませんか?手伝ってくれてありがとう。

答えて

1

docsによると、ときに指定UNWRAP_ROOT_VALUE、ジャクソン(ここでは代わりにJSONのXML)

ルートJSON値はJSONオブジェクトであること、そしてそれが予想されると 単一のプロパティを持っていることが確認されますルート名。そうでない場合は、 JsonMappingExceptionがスローされます。この場合

離れDATA_RECORDから別の性質を持っているMessageルート、名前noNamespaceSchemaLocationを持つとJsonMappingExceptionがスローされた指定などのXML属性。

Messageを解析してTestBeanを取得する必要があります。例えば:あなたのhelp.itため

@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

おかげでルート要素として、ないを取るの一部のように!!だから私は、XMLを解析することはできません動作しますか? – fanshaoer

関連する問題