2014-10-07 55 views
0

我試圖反序列化XML。FasterXML:無法將表單XML反序列化爲POJO

<server> 
    <url>localhost</url> 
    <port>8080</port> 
</server> 

到POJO

class Storage { 
    private Server server; 
} 

class Server { 
    private String url; 
    private Integer port; 
} 

這裏是我的火碼

resources = new FileInputStream("/resources/config/" + file); 
mapper = new ObjectMapper(); 
storage = mapper.readValue(resources, Storage.class); 

但它不工作。

com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 

我試圖將JAX-B註釋添加到存儲和服務器類,但發生了同樣的錯誤。

UPD

當我添加mapper = new XmlMapper();,我收到com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "url"

+0

,你會很需要這些註釋,但也是一個XML映射器,而不是'ObjectMapper'。 – 2014-10-07 22:29:58

+1

看起來像'ObjectMapper'在這裏期待JSON。 – lexicore 2014-10-07 22:30:48

+0

已更新的問題 – Alex 2014-10-07 22:43:42

回答

2

首先,ObjectMapper實例是爲了反序列化JSON。所以你將無法按原樣使用它。使用XmlMapper

其次,您的XML的根<server>包含兩個元素<url><port>。但是,你的根Java類型,Storage

storage = mapper.readValue(resources, Storage.class); 

只包含一個,server。所以你需要一個包裝元素在XML

<Storage> 
    <server> 
     <url>localhost</url> 
     <port>8080</port> 
    </server> 
</Storage> 

還充當根,我假設你的意思了

private Server url; 

private String url;