2013-05-08 96 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

相關問題