从XML映射到不匹配的POJO的最佳方式

时间:2015-09-14 23:49:12

标签: java xml jaxb transform pojo

将一个XML(xmlA)映射到映射到不同XML契约(xmlB)的jaxb生成的pojo的“正确”处理方法是什么

例如,使用以下输入:

<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
   </book>
</catalog>

我想映射到以下类

public class PART
{
    private String ITEM;

    private String MANUFACTURER;


    @Override
    public String toString()
    {
        return "ClassPojo [ITEM = "+ITEM+", MANUFACTURER = "+MANUFACTURER+"]";
    }
}

作者将ITEM和标题地图映射到MANUFACTURER。

目前我正在使用xml转换然后映射;这是最好/正确的做法吗?或者这个问题的行业标准是什么。

谢谢

1 个答案:

答案 0 :(得分:0)

注意:类名应为大小写(Part),字段名称应为小写,或者更确切地说是camelCase(itemmanufacturer

您可以在@XmlElement注释上指定元素名称。

public class Test {
    public static void main(String[] args) throws Exception {
        String xml = "<?xml version=\"1.0\"?>\n" +
                     "<catalog>\n" +
                     "   <book id=\"bk101\">\n" +
                     "      <author>Gambardella, Matthew</author>\n" +
                     "      <title>XML Developer's Guide</title>\n" +
                     "   </book>\n" +
                     "</catalog>";
        JAXBContext jc = JAXBContext.newInstance(Catalog.class, PART.class);
        Unmarshaller u = jc.createUnmarshaller();
        Catalog catalog = (Catalog)u.unmarshal(new StringReader(xml));
        for (PART part : catalog.parts)
            System.out.println(part.toString());
    }
}

@XmlRootElement(name="catalog")
class Catalog {
    @XmlElement(name="book")
    List<PART> parts;
}

class PART
{
    @XmlElement(name="author")
    private String ITEM;

    @XmlElement(name="title")
    private String MANUFACTURER;

    @Override
    public String toString()
    {
        return "ClassPojo [ITEM = "+ITEM+", MANUFACTURER = "+MANUFACTURER+"]";
    }
}

输出

ClassPojo [ITEM = Gambardella, Matthew, MANUFACTURER = XML Developer's Guide]