JAXB значение сложного типа - PullRequest
1 голос
/ 04 мая 2011

** Правка - в конце я удалил абстрактное расширение, чтобы заставить его работать, ответ ниже от Блейза затем работает

Hello.
У меня в схеме сложный тип:

<xs:complexType name="AbstractWorkflow" abstract="true">
    <xs:attribute name="id" type="xs:ID" use="required"/>
</xs:complexType>
<xs:complexType name="ProcessWorkflow" mixed="true">
    <xs:complexContent>
        <xs:extension base="AbstractWorkflow"/>
    </xs:complexContent>
</xs:complexType>

Ввод, который должен быть распакован, это

<ns1:Workflow stb:id="Workflow" xsi:type="ns1:ProcessWorkflow">workflowHTML.xml</ns1:Workflow>

Но когда я делаю это, у меня нет возможности получить доступ к значению: workflowHTML.xml из классов которые были сгенерированы из xjc. Это начало сгенерированного класса AbstractWorkflow есть ли аннотация, которую я могу объявить в этом классе, которая расширяет абстрактный класс, чтобы указать, что это элемент, который несет само значение? Не должно быть объявлен как ПОЛЕ или?

Изменить это расширяющий класс, который мне нужен для реализации чтения значения, а не абстрактного класса, который у меня был здесь изначально.

@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
@XmlType(name = "ProcessWorkflow")
public class ProcessWorkflow
    extends AbstractWorkflow
{



}

Спасибо за чтение.

1 Ответ

3 голосов
/ 04 мая 2011

Я полагаю, что вы ищете аннотацию @XmlValue.

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

    @XmlAttribute
    private int id;

    @XmlValue
    private String value;

}

Вышеприведенное соответствует следующей схеме XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="foo" type="foo"/>

  <xs:complexType name="foo">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="id" type="xs:int" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:schema>

И XML как этот:

<foo id="123">Some Value</foo>
...