2014-10-07 68 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;