тип строки набора jaxb - PullRequest
       17

тип строки набора jaxb

0 голосов
/ 22 февраля 2012

Как я могу заставить JAXB маршалировать строковый или примитивный тип данных и устанавливать type = "string" или type = "int" в результирующем XML. Я попытался указать конкретный тип для каждого поля

@XmlSchemaType(name = "string",namespace = "http://www.w3.org/2001/XMLSchema",type = String.class)

Но это не имеет значения, в результате получается XML без типа.

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

Обновление это в основном то, что у меня есть в классе JaxB:

@XmlElement(required = true)
protected Keys keys;
protected String workflowID;
    protected String fromFigure;
    protected String fromPort;

Это итоговый XML

        <keys type="draw2d.ArrayList">
            <data type="Array">
                <element type="draw2d.FlowConnectionModel">
                    <workflowID>d8f71b92-dc69-4115-9095-d748265d4e68</workflowID>
                    <fromFigure>706531d9-cd03-4347-9ba2-d9b525035e0d</fromFigure>
                    <fromPort>out_right_initialState</fromPort>

Обратите внимание, что для ключей, данных и типов элементов задан тип, но для примитивных типов данных workflowID, fromFigure и fromPort нет. Я хочу вот что:

        <keys type="draw2d.ArrayList">
            <data type="Array">
                <element type="draw2d.FlowConnectionModel">
                    <workflowID type="string">d8f71b92-dc69-4115-9095-d748265d4e68</workflowID>
                    <fromFigure type="string">706531d9-cd03-4347-9ba2-d9b525035e0d</fromFigure>
                    <fromPort type="string">out_right_initialState</fromPort>

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Вы не увидите никакой разницы в произведенном XML.От вас ожидают увидеть разницу в XSD, если вы сгенерируете его из своего класса.

0 голосов
/ 24 февраля 2012

В конце концов мне пришлось изменить схему, чтобы использовать сложные типы в отличие от простых типов. Фрагмент из исходной схемы

     <xs:element name="layoutWorkflowID" type="xs:string" minOccurs="1" maxOccurs="1"/>
    <xs:element name="layoutInstanceID" type="xs:string" minOccurs="1" maxOccurs="1"/>

Изменено на это

    <xs:element ref="layoutWorkflowID" minOccurs="1" maxOccurs="1"/>
    <xs:element ref="layoutInstanceID" minOccurs="1" maxOccurs="1"/>

С особо сложными типами

  <xs:element name="layoutWorkflowID">
<xs:complexType>
  <xs:simpleContent>
    <xs:extension base="xs:NCName">
      <xs:attribute name="type" use="required" type="xs:NCName"/>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

И теперь я получаю то, что мне нужно, при сортировке с каждым указанным типом.

<layoutWorkflowID type="string">WorkflowHTML</layoutWorkflowID>
<layoutInstanceID type="string">6</layoutInstanceID>

Спасибо за ответившие и прочитавшие.

...