1

* *編集 - 最後に、これを機能させるために抽象的な拡張機能を削除しました.Blaiseからの以下の回答が機能します

こんにちは。
スキーマに複合型があります。

<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>

しかし、これを行うと、xjc から生成されたクラスから値: workflowHTML.xml にアクセスするオプションがありません。これは、生成された AbstractWorkflow クラスの始まりです。抽象クラスを拡張して、それ自体が値を持つ要素であることを指定するために、このクラスで宣言できる注釈はありますか? FIELD として宣言すべきではありませんか?

編集するのは、もともとここにあった抽象クラスではなく、値の読み取りを実装する必要がある拡張クラスです。

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



}

読んでくれてありがとう。

4

1 に答える 1

4

@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>
于 2011-05-04T13:20:42.463 に答える