2013-05-08 100 views
4

我正在使用Jackson XML插件(https://github.com/FasterXML/jackson-dataformat-xml),我不确定它是否受支持,但我想知道是否可以使用命名空间对XML进行序列化和反序列化前缀,像这样:Jackson XML - 使用命名空间前缀反序列化XML

<name:Foo> 
    <name:Bar> 
    <name:x>x</name:x> 
    <name:y>y</name:y> 
    </name:Bar> 
</name:Foo> 

我可以生成这种类型的XML的使用杰克逊的插件,像这样:

@JacksonXmlProperty(localName="name:Bar") 
public Bar getBar() { 
    return bar; 
} 

但是,我无法找到一个方法来配置我的POJO从XML反序列化产生。请看下面的示例代码:

public class Bar{ 
    @JacksonXmlProperty(localName="name:x") 
    public String x = "x"; 
    @JacksonXmlProperty(localName="name:y") 
    public String y = "y"; 
} 

@JacksonXmlRootElement(localName="name:Foo") 
    public class Foo{ 
     private Bar bar; 

     @JacksonXmlProperty(localName="name:Bar") 
     public Bar getBar() { 
      return bar; 
     } 

     public void setBar(Bar bar) { 
      this.bar = bar; 
     } 
} 

public class TestDeserialization { 

    public static void main(String[] args) throws Exception { 
     Foo foo = new Foo(); 
     foo.setBar(new Bar()); 

     XmlMapper xmlMapper = new XmlMapper(); 
     String xml = xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(foo); 
     System.out.println(xml); 
     System.out.println("XML Desearialzing...."); 
     Foo foo2= xmlMapper.readValue(xml, Foo.class); 
     System.out.println(xmlMapper.writeValueAsString(foo2)); 
    } 
} 

试图运行这个测试给了我一个例外:

Exception in thread "main" java.io.IOException: com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "name" 

这是可以理解的,但我是想知道是否有办法让这个与Jackson XML一起工作?

回答

2

JacksonXmlProperty注释有属性namespace。使用它用于限定namespace

public class Bar { 
    @JacksonXmlProperty(namespace = "name",localName="x") 
    public String x = "x"; 
    @JacksonXmlProperty(namespace = "name",localName="y") 
    public String y = "y"; 
} 

@JacksonXmlRootElement(namespace = "name", localName = "Foo") 
public class Foo { 
    private Bar bar; 

    @JacksonXmlProperty(namespace = "name", localName = "Bar") 
    public Bar getBar() { 
     return bar; 
    } 

    public void setBar(Bar bar) { 
     this.bar = bar; 
    } 
} 
+0

使用命名空间配置像上面生成以下XML:'<美孚的xmlns = “名字”> X ý ' - 我可以假设这与我之前给出的XML示例是同义词吗? – jtyler 2013-05-08 15:00:03

+0

@jtyler是的,这个XML与你的相似 – Ilya 2013-05-08 15:05:07

+0

@Ilya:我面临的问题和这个问题一样。我也得到' x y'。这与''相同吗?前缀未被添加。你能详细说明吗? – 2016-09-06 04:17:27

相关问题