JAXB конвертирует несколько атрибутов в один тип, в то же время отменяя сортировку - PullRequest
1 голос
/ 29 октября 2011

Изображение У меня есть такой элемент <someElement a="" b="" number="1" scale="meters"><child/></someElement>

Масштаб и число всегда отображаются вместе, но они не определены в одном эксклюзивном элементе.

При отмене сортировки элемента someElementSomeElement экземпляр Java. Я хочу, чтобы один член в классе SomeElement представлял number и scale.

. В настоящее время число и масштаб являются атрибутами, а затем используется метод afterUnmarshall().для вычисления одного числа.

Есть ли способ сделать это, не имея размер и масштаб двух полей члена?Может быть с XmlAdapter?Как бы я использовал это в этом случае?

Ответы [ 2 ]

1 голос
/ 29 октября 2011

Примечание: Я EclipseLink JAXB (MOXy) и являюсь членом JAXB 2 (JSR-222) экспертная группа.

MOXy предлагает расширение @XmlTransformation, которое позволяет представлять поле / свойство Java в виде нескольких узлов XML.

Для получения дополнительной информации

ОБНОВЛЕНИЕ

В качестве альтернативы вы можете использовать XmlAdapter для этого варианта использования.Адаптер будет отвечать за преобразование единственного типа, представляющего число и масштаб (представленный ниже как FOO), в тип с отдельными свойствами для числа и масштаба.Вам все еще нужно будет использовать реализацию MOXy, чтобы использовать расширение @XmlPath:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SomeElement {

    @XmlAttribute
    private String a;

    @XmlAttribute
    private String b;

    @XmlJavaTypeAdapter(NumberAndScaleAdapter.class)
    @XmlPath(".")
    private FOO numberAndScale;

    private Child child;

}

Для получения дополнительной информации

1 голос
/ 29 октября 2011

Ответы на этот вопрос , похоже, соответствуют тому, что вы пытаетесь сделать. Или, по крайней мере, какой-то обратный ход. Таким образом, вы можете либо создать пользовательский тип, который отменяет / маршалирует, используя XmlAdapter, либо вы можете быть вредным с логикой получения / установки.

...