HyperJaxb3 и xsd: anyType - PullRequest
       50

HyperJaxb3 и xsd: anyType

5 голосов
/ 23 июня 2010

У меня есть фрагмент схемы, который выглядит как

<xs:element name="dataValue">
        <xs:complexType>
            <xs:sequence>           
                <xs:element name="value" type="xs:anyType"\>
            </xs:sequence>
        </xs:complexType>
</xs:element>

Класс, создаваемый hyperjaxb3, содержит следующий фрагмент:

@XmlElement(required = true)
protected Object value;

@Transient
public Object getValue() {
    return value;
}

public void setValue(Object value) {
    this.value = value;
}

@Basic
@Column(name = "VALUEOBJECT")
public String getValueObject() {
    if (JAXBContextUtils.
       isMarshallable("org.lcogt.schema", this.getValue())) {
        return JAXBContextUtils.unmarshall("org.lcogt.schema", this.getValue());
    } else {
        return null;
    }
}

Я понимаю, что hibernate будет бороться за сохранение чистого объекта, поэтому hyperjaxb предполагает, что объект может быть преобразован в строку XML, и результирующая строка будет сохранена. В моем случае это не так, но я могу гарантировать, что метод toString () вернет что-то полезное. Я хотел бы, чтобы сгенерированный код выглядел больше как:

@XmlElement(required = true)
protected Object value;

@Transient
public Object getValue() {
    return value;
}

public void setValue(Object value) {
    this.value = value;
}

@Basic
@Column(name = "VALUEOBJECT")
public String getValueObject() {
      return value.toString();
}

Могу ли я получить этот эффект или что-то подобное?

Спасибо

Mark.

1 Ответ

0 голосов
/ 06 июля 2010

Проблема в том, что это преобразование должно быть двунаправленным: вы также должны иметь возможность «анализировать» ваш объект обратно из строки - иначе вы не получите свой объект обратно. Так что toString() недостаточно (но это идеальное место для старта).

Я думаю, что это можно решить с помощью пользовательских адаптеров. То есть Вы пишете и настраиваете свой собственный адаптер для этого свойства. Тогда для вашего типа адаптер будет toString() / fromString(...).

Вот проблема:

http://jira.highsource.org/browse/HJIII-54

...