изменить структуру XML с помощью Jaxb

1

У меня есть следующая структура:

<data name="piece-shipment" error-status="0"
        product-name="test" name="Hook" street="Freeway 21" city="Bumphill"/>

и следующая jaxb аннотированная модель.

@XmlRootElement(name = "data")
@XmlAccessorType(XmlAccessType.FIELD)    
public class PieceShipment {

    /**
     * The field describes, of the parcel is returned to the origin sender
     */
    @XmlAttribute(name = "product-name")
    private String productName;

    /**
     * recipient information
     */
    @XmlJavaTypeAdapter(RecipientAdapter.class)
    private Recipient recipient;
   .....
}




 @XmlAccessorType(XmlAccessType.FIELD)
public class Recipient {

    private String name;
    private String street;
    private String city;
...
}

Как я могу сопоставить отношение PieceShipment к Получателю? Они находятся на одном уровне элементов.

Я попытался использовать адаптеры, но адаптер не вызван.

  • 0
    Это то, что вы не можете сделать с JAXB. У вас нет ни одного элемента XML, который можно адаптировать к другому типу. Проблема заключается в оригинальной структуре XML, которая не моделируется по реляционному принципу.
  • 0
    То есть нет способа сопоставить атрибуты с реляционными?
Показать ещё 1 комментарий
Теги:
jaxb
mapping

1 ответ

1

Используя стандартные метаданные сопоставления JAXB (JSR-222), вы не можете иметь свойства от Recipient сопоставленные с одним и тем же родительским элементом, PieceShipment которого сопоставляется PieceShipment.

Если вы используете EclipseLink MOXy в качестве поставщика JAXB, вы можете использовать наше расширение @XmlPath для выполнения этого:

@XmlPath(".")
private Recipient recipient;

Чтобы получить больше информации

Я написал больше о расширении MOXy XPath в моем блоге:

  • 0
    Я уже тестировал его с помощью EclipseLink MOXy @XMLPath ("."), Но объект Recipient не создается. Я всегда получаю "ноль". Я был бы очень благодарен за расширенный ответ, подробно описывающий сопоставление.
  • 0
    Я также аннотировал атрибуты получателя с помощью @XmlAttribute (name = "product-name")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню