Най-добрият начин за картографиране от XML към несравним POJO

Какъв е „правилният“ начин за обработка на картографирането на един XML (xmlA) към jaxb генерирани pojo, които картографират към различен XML договор (xmlB)

Например със следния вход:

<?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+"]";
    }
}

където авторът се съпоставя с АРТИКУЛ, а заглавието - с ПРОИЗВОДИТЕЛ.

В момента използвам xml трансформации и след това картографиране; това ли е най-добрият/правилният начин да направите това? Или какъв е индустриалният стандарт за такъв проблем.

Благодаря ти


person David Lemporo    schedule 14.09.2015    source източник
comment
Разгледайте: docs .oracle.com/javase/7/docs/api/javax/xml/bind/annotation/   -  person Ryan J    schedule 15.09.2015
comment
Говорите за jaxb генерирани pojo, но не ги показвате. Те са като класове, наречени Catalog и Book, така че картографирате Book към PART, след като JAXB демаршалира Book вместо вас. Не знам защо имате нужда от както xml трансформация и картографиране.   -  person Andreas    schedule 15.09.2015


Отговори (1)


Забележка: Имената на класовете трябва да са със смесени главни и главни букви (Part), а имената на полетата трябва да са с малки букви или по-скоро камилски главни букви (item и manufacturer).


Можете да посочите името на елемента в анотацията @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]
person Andreas    schedule 15.09.2015
comment
Не мога да модифицирам файловете на класа за PART, които вече имат различни имена на елементи - person David Lemporo; 15.09.2015