9

私は国際標準の一部である複雑なxmlスキーマを持っているため、スキーマファイルを変更できず、Mavenを使用してそれらからJAXBオブジェクトを生成しました。JAXBオブジェクトにデータを設定してからルート要素をマーシャリングしようとすると、いくつかの複合型で@XmlRootElementの欠落エラーが発生します。私の質問は、これをどのように解決するのですか?環境:

  • JAXB 2.2.2
  • Maven 3.0.3
  • Eclipse Juno
  • Java 1.6
  • Windows764ビット

私はウェブとこのサイトを広範囲に調査しましたが、この投稿を含め、私の問題に対する答えは見つかりませんでした。 http://weblogs.java.net/blog/kohsuke/archive/2006/03/why_does_jaxb_p.html

スタックオーバーフローに関するこの質問: カスタムJAX-Bバインディングを使用したJAX-WS MarshalException:@XmlRootElementアノテーションがないため、要素としてタイプ"java.lang.String"をマーシャリングできません

カスタムバインディングファイルの問題のあるクラスにアノテーションを追加しようとしましたが、getContent()メソッドだけでなくクラスにもアノテーションが追加され、クラスがコンパイルされません。これはルートのコンポーネントである複雑なタイプであり、実際にはツリーのかなり深いところにネストされているため、とにかくこのアノテーションを追加する必要はないと思います。タグをグローバルバインディング要素に追加できることを読み<xjc:simple/>ましたが、グローバルバインディング要素にいくつかの属性を追加したので、それを実行してもコンパイルされません。

誰かが私をここで正しい方向に向けるのを手伝ってもらえますか?これは私がJAXBオブジェクトを構築している方法のエラーである可能性がありますか?デバッガーでウォークスルーしましたが、パッケージcom.sun.xml.bind.v2.runtime.propertyのArrayReferenceNodePropertyクラスがリスト本体をシリアル化しようとしたときに、これらのクラスのJaxBeanInfoを取得したときに存在しないようです。 domハンドラーセットであり、jaxbTypeはオブジェクトではないため、ルートである必要があると見なされます。

私はこれをWebベースのサービスで使用しておらず、名前の競合を解決するためのバインディングファイルの微調整を除いて、カスタムクラスまたはバインディングは作成されていません。

最上位のスキーマファイルは次のとおりです。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:annotation>
    <xs:documentation>
        *****************************************************************************
        *                                                                           *
        *                        S1000D Issue 3                                     *
        *                          XML Schema                                       *
        *                                                                           *
        *                     Release Version 3.0                                   *
        *                       Date: 2007-07-31                                    *
        *                                                                           *
        *                                                                           *
        * The following attribute definition on the root element may be used to     *
        * call this set of declarations:-                                           *
        *                                                                           *
        * xsi:noNamespaceSchemaLocation=                                            *
        * "http://www.s1000d.org/S1000D_3-0/xml_schema_master/dm/procedSchema.xsd"  *
        *****************************************************************************
    </xs:documentation>
</xs:annotation>
<xs:redefine schemaLocation="elementGroups.xsd">
    <xs:group name="APPLIC">
        <xs:choice>
            <xs:sequence>
                <xs:element ref="displaytext"/> 
                <xs:choice minOccurs="0">
                    <xs:element ref="assert"/>
                    <xs:element ref="evaluate"/>
                </xs:choice>
            </xs:sequence>
            <xs:choice>
                <xs:element ref="assert"/>
                <xs:element ref="evaluate"/>
            </xs:choice>
        </xs:choice>
    </xs:group>
    <xs:group name="NPAR">
        <xs:sequence>
            <xs:group ref="WC"/>
            <xs:group ref="NPFFT" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:group>
    <xs:group name="NPFFT">
        <xs:choice>
            <xs:group ref="NP"/>
            <xs:group ref="FFT"/>
        </xs:choice>
    </xs:group>
    <xs:group name="paracon">
        <xs:choice>
            <xs:group ref="text"/>
            <xs:group ref="list"/>
        </xs:choice>
    </xs:group>
    <xs:group name="text">
        <xs:choice>
            <xs:element ref="ein"/>
            <xs:element ref="cb"/>
            <xs:element ref="parasigdata"/>
            <xs:element ref="quantity"/>
            <xs:element ref="xref"/>
            <xs:element ref="indxflag"/>
            <xs:element ref="change"/>
            <xs:element ref="emphasis"/>
            <xs:element ref="symbol"/>
            <xs:element ref="subscrpt"/>
            <xs:element ref="supscrpt"/>
            <xs:element ref="refdm"/>
            <xs:element ref="reftp"/>
            <xs:element ref="ftnote"/>
            <xs:element ref="ftnref"/>
            <xs:element ref="acronym"/>
            <xs:element ref="acroterm"/>
            <xs:element ref="capgrp"/>
        </xs:choice>
    </xs:group>
    <xs:group name="TEXT-NOREFS">
        <xs:choice>
            <xs:element ref="xref"/>
            <xs:element ref="indxflag"/>
            <xs:element ref="symbol"/>
            <xs:element ref="subscrpt"/>
            <xs:element ref="supscrpt"/>
            <xs:element ref="ftnref"/>
            <xs:element ref="acronym"/>
            <xs:element ref="acroterm"/>
        </xs:choice>
    </xs:group>
    <xs:group name="STEP1">
        <xs:sequence>
            <xs:element ref="step1"/>
        </xs:sequence>
    </xs:group>
    <xs:group name="STEP2">
        <xs:sequence>
            <xs:element ref="step2"/>
        </xs:sequence>
    </xs:group>
    <xs:group name="STEP3">
        <xs:sequence>
            <xs:element ref="step3"/>
        </xs:sequence>
    </xs:group>
    <xs:group name="STEP4">
        <xs:sequence>
            <xs:element ref="step4"/>
        </xs:sequence>
    </xs:group>
    <xs:group name="STEP5">
        <xs:sequence>
            <xs:element ref="step5"/>
        </xs:sequence>
    </xs:group>
    <xs:group name="STEP6">
        <xs:sequence>
            <xs:element ref="step6"/>
        </xs:sequence>
    </xs:group>
    <xs:group name="STEP7">
        <xs:sequence>
            <xs:element ref="step7"/>
        </xs:sequence>
    </xs:group>
    <xs:group name="STEP8">
        <xs:sequence>
            <xs:element ref="step8"/>
        </xs:sequence>
    </xs:group>
</xs:redefine>
<xs:redefine schemaLocation="complexTypes.xsd">
    <xs:complexType name="contentType">
        <xs:complexContent>
            <xs:restriction base="contentType">
                <xs:sequence>
                    <xs:element ref="refs" minOccurs="0"/>
                    <xs:element ref="proced"/>
                </xs:sequence>
                <xs:attribute ref="id"/>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>
</xs:redefine>
<xs:element name="dmodule" type="dmoduleType"/>

xrefTypeの場合、2つの属性のみを設定し、refdmTypeの場合、ALLDMCグループの一部である他の1つの複合型のみを設定します。エラーが発生する2つの複合型のコードは次のとおりです。

  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" elementFormDefault="qualified" attributeFormDefault="qualified">
    <xs:import namespace="http://www.w3.org/1999/02/22-rdf-syntax-ns#" schemaLocation="rdf.xsd"/>
    <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink.xsd"/>
    <xs:include schemaLocation="attributeGroups.xsd"/>
    <xs:include schemaLocation="simpleElements.xsd"/>
    <xs:include schemaLocation="complexElements.xsd"/>
    <xs:include schemaLocation="elementGroups.xsd"/>
    <xs:complexType name="refdmType">
        <xs:choice>
            <xs:sequence>
                <xs:element ref="applic" minOccurs="0"/>
                <xs:element ref="dmcextension" minOccurs="0"/>
                <xs:group ref="ALLDMC"/>
                <xs:element ref="issno" minOccurs="0"/>
                <xs:element ref="dmtitle" minOccurs="0"/>
                <xs:element ref="language" minOccurs="0"/>
            </xs:sequence>
            <xs:group ref="xlink:XLINKEXT" minOccurs="0" maxOccurs="unbounded"/>
        </xs:choice>
        <xs:attribute ref="target"/>
        <xs:attribute ref="refapplic"/>
        <xs:attributeGroup ref="bodyatt"/>
        <xs:attributeGroup ref="cntlcontent"/>
        <xs:attributeGroup ref="xlink:XLINKATT"/>
    </xs:complexType>
    <xs:complexType name="xrefType" mixed="true">
        <xs:sequence>
            <xs:element ref="applic" minOccurs="0"/>
            <xs:group ref="SPARCON" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute ref="xrefid"/>
        <xs:attribute ref="xidtype"/>
        <xs:attribute ref="target"/>
        <xs:attribute ref="destitle"/>
        <xs:attribute ref="pretext"/>
        <xs:attribute ref="posttext"/>
        <xs:attribute ref="refapplic"/>
        <xs:attributeGroup ref="cntlcontent"/>
        <xs:attributeGroup ref="xlink:XLINKATT3"/>
    </xs:complexType>
    </xs:schema>

そして、これがJAXBで生成されたクラスの主要部分です。スペースを節約するために、ほとんどのゲッターとセッターを削除しました。RefdmType:

/**
 * <p>Java class for refdmType complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="refdmType">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;choice>
 *         &lt;sequence>
 *           &lt;element ref="{}applic" minOccurs="0"/>
 *           &lt;element ref="{}dmcextension" minOccurs="0"/>
 *           &lt;group ref="{}ALLDMC"/>
 *           &lt;element ref="{}issno" minOccurs="0"/>
 *           &lt;element ref="{}dmtitle" minOccurs="0"/>
 *           &lt;element ref="{}language" minOccurs="0"/>
 *         &lt;/sequence>
 *         &lt;group ref="{http://www.w3.org/1999/xlink}XLINKEXT" maxOccurs="unbounded" minOccurs="0"/>
 *       &lt;/choice>
 *       &lt;attGroup ref="{http://www.w3.org/1999/xlink}XLINKATT"/>
 *       &lt;attGroup ref="{}cntlcontent"/>
 *       &lt;attGroup ref="{}bodyatt"/>
 *       &lt;attribute ref="{}target"/>
 *       &lt;attribute ref="{}refapplic"/>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "refdmType", propOrder = {
    "applicAndDmcextensionAndAge"
})
public class RefdmType implements Serializable
{

    private final static long serialVersionUID = 1L;
    @XmlElements({
        @XmlElement(name = "applic", type = ApplicType.class),
        @XmlElement(name = "dmcextension", type = DmcextensionType.class),
        @XmlElement(name = "age", type = AgeType.class),
        @XmlElement(name = "avee", type = AveeType.class),
        @XmlElement(name = "issno", type = IssnoType.class),
        @XmlElement(name = "dmtitle", type = DmtitleType.class),
        @XmlElement(name = "language", type = LanguageType.class),
        @XmlElement(name = "resource", namespace = "http://www.w3.org/1999/xlink", type = Resource.class),
        @XmlElement(name = "locator", namespace = "http://www.w3.org/1999/xlink", type = Locator.class),
        @XmlElement(name = "arc", namespace = "http://www.w3.org/1999/xlink", type = Arc.class)
    })
    protected List<Serializable> applicAndDmcextensionAndAge;
    @XmlAttribute(name = "target")
    protected String target;
    @XmlAttribute(name = "refapplic")
    @XmlIDREF
    @XmlSchemaType(name = "IDREF")
    protected Object refapplic;
    @XmlAttribute(name = "type", namespace = "http://www.w3.org/1999/xlink")
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    protected String type;
    @XmlAttribute(name = "href", namespace = "http://www.w3.org/1999/xlink")
    protected String href;
    @XmlAttribute(name = "title", namespace = "http://www.w3.org/1999/xlink")
    protected String title;
    @XmlAttribute(name = "show", namespace = "http://www.w3.org/1999/xlink")
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    protected String show;
    @XmlAttribute(name = "actuate", namespace = "http://www.w3.org/1999/xlink")
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    protected String actuate;
    @XmlAttribute(name = "authname")
    protected String authname;
    @XmlAttribute(name = "authdoc")
    protected String authdoc;
    @XmlAttribute(name = "id")
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlID
    @XmlSchemaType(name = "ID")
    protected String id;
    @XmlAttribute(name = "level")
    @XmlSchemaType(name = "nonNegativeInteger")
    protected BigInteger level;
    @XmlAttribute(name = "mark")
    @XmlSchemaType(name = "nonNegativeInteger")
    protected BigInteger mark;
    @XmlAttribute(name = "change")
    protected ChangeType change;
    @XmlAttribute(name = "rfc")
    protected String rfc;

    /**
     * Gets the value of the applicAndDmcextensionAndAge property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the applicAndDmcextensionAndAge property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getApplicAndDmcextensionAndAge().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link ApplicType }
     * {@link DmcextensionType }
     * {@link AgeType }
     * {@link AveeType }
     * {@link IssnoType }
     * {@link DmtitleType }
     * {@link LanguageType }
     * {@link Resource }
     * {@link Locator }
     * {@link Arc }
     * 
     * 
     */
    public List<Serializable> getApplicAndDmcextensionAndAge() {
        if (applicAndDmcextensionAndAge == null) {
            applicAndDmcextensionAndAge = new ArrayList<Serializable>();
        }
        return this.applicAndDmcextensionAndAge;
    }
    }

XrefType:

 /**
 * <p>Java class for xrefType complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within    this class.
 * 
 * <pre>
 * &lt;complexType name="xrefType">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element ref="{}applic" minOccurs="0"/>
 *         &lt;group ref="{}SPARCON" maxOccurs="unbounded" minOccurs="0"/>
 *       &lt;/sequence>
 *       &lt;attGroup ref="{}cntlcontent"/>
 *       &lt;attGroup ref="{http://www.w3.org/1999/xlink}XLINKATT3"/>
 *       &lt;attribute ref="{}xrefid"/>
 *       &lt;attribute ref="{}xidtype"/>
 *       &lt;attribute ref="{}target"/>
 *       &lt;attribute ref="{}destitle"/>
 *       &lt;attribute ref="{}pretext"/>
 *       &lt;attribute ref="{}posttext"/>
 *       &lt;attribute ref="{}refapplic"/>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "xrefType", propOrder = {
"content"
})
public class XrefType implements Serializable
{

    private final static long serialVersionUID = 1L;
    @XmlElementRefs({
      @XmlElementRef(name = "supscrpt", type = JAXBElement.class),
      @XmlElementRef(name = "subscrpt", type = JAXBElement.class),
      @XmlElementRef(name = "applic", type = JAXBElement.class)
    })
   @XmlMixed
   protected List<Serializable> content;
   @XmlAttribute(name = "xrefid")
   @XmlJavaTypeAdapter(Adapter5 .class)
   @XmlSchemaType(name = "IDREF")
   protected String xrefid;
   @XmlAttribute(name = "xidtype")
   protected XidtypeType xidtype;
   @XmlAttribute(name = "target")
   protected String target;
   @XmlAttribute(name = "destitle")
   protected String destitle;
   @XmlAttribute(name = "pretext")
   protected String pretext;
   @XmlAttribute(name = "posttext")
   protected String posttext;
   @XmlAttribute(name = "refapplic")
   @XmlIDREF
   @XmlSchemaType(name = "IDREF")
   protected Object refapplic;
   @XmlAttribute(name = "authname")
   protected String authname;
   @XmlAttribute(name = "authdoc")
   protected String authdoc;
   @XmlAttribute(name = "type", namespace = "http://www.w3.org/1999/xlink")
   @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
   protected String type;
   @XmlAttribute(name = "href", namespace = "http://www.w3.org/1999/xlink")
   protected String href;
   @XmlAttribute(name = "title", namespace = "http://www.w3.org/1999/xlink")
   protected String title;
   @XmlAttribute(name = "show", namespace = "http://www.w3.org/1999/xlink")
   @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
   protected String show;
   @XmlAttribute(name = "actuate", namespace = "http://www.w3.org/1999/xlink")
   @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
   protected String actuate;

   /**
    * Gets the value of the content property.
    * <p>
    * This accessor method returns a reference to the live list,
    * not a snapshot. Therefore any modification you make to the
    * returned list will be present inside the JAXB object.
    * This is why there is not a <CODE>set</CODE> method for the content property.
    * 
    * <p>
    * For example, to add a new item, do as follows:
    * <pre>
    *    getContent().add(newItem);
    * </pre>
    * 
    * 
    * <p>
    * Objects of the following type(s) are allowed in the list
    * {@link String }
    * {@link JAXBElement }{@code <}{@link String }{@code >}
    * {@link JAXBElement }{@code <}{@link ApplicType }{@code >}
    * {@link JAXBElement }{@code <}{@link String }{@code >}
    * 
    * 
    */
    public List<Serializable> getContent() {
       if (content == null) {
        content = new ArrayList<Serializable>();
       }
       return this.content;
    }
}

そして最後に、これが私のカスタムバインディングファイルです。

    <jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:annox="http://annox.dev.java.net"
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd">

    <jxb:globalBindings typesafeEnumMemberName="generateName"
        typesafeEnumMaxMembers="1500" collectionType="java.util.ArrayList"
        generateValueClass="true" choiceContentProperty="true">
        <xjc:serializable uid="1" />
    </jxb:globalBindings>

    <jxb:bindings schemaLocation="simpleTypes.xsd" node="/xs:schema">
        <jxb:bindings node="//xs:simpleType[@name='YEAR']">
            <jxb:javaType name="java.lang.Integer" />
        </jxb:bindings>
        <jxb:bindings node="//xs:simpleType[@name='DAY']">
            <jxb:javaType name="java.lang.String" />
        </jxb:bindings>
        <jxb:bindings node="//xs:simpleType[@name='MONTH']">
            <jxb:javaType name="java.lang.String" />
        </jxb:bindings>
        <jxb:bindings node="//xs:simpleType[@name='issnovalueType']">
            <jxb:javaType name="java.lang.String" />
        </jxb:bindings>
    </jxb:bindings>

    <jxb:bindings schemaLocation="attributes.xsd" node="/xs:schema">
        <jxb:bindings node="xs:attribute[@name='inwork']">
            <jxb:property>
                <jxb:baseType>
                    <jxb:javaType name="java.lang.String" />
                </jxb:baseType>
            </jxb:property>
        </jxb:bindings>
        <jxb:bindings node="//xs:attribute[@name='xrefid']">
            <jxb:property>
                <jxb:baseType>
                    <jxb:javaType name="java.lang.String" />
                </jxb:baseType>
            </jxb:property>
        </jxb:bindings>
    </jxb:bindings>

    <jxb:bindings schemaLocation="complexTypes.xsd" node="/xs:schema">
        <jxb:bindings node="xs:complexType[@name='dmoduleType']">
            <annox:annotate>
                <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
                    name="dmodule" />
            </annox:annotate>
        </jxb:bindings>
        <jxb:bindings node="//xs:complexType[@name='skillType']">
            <jxb:class name="SkillTypeComplex" />
        </jxb:bindings>
        <!--<jxb:bindings node="//xs:complexType[@name='xrefType']">
              <annox:annotate>
                <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
                    name="xref" />
            </annox:annotate>
            <jxb:bindings node=".//xs:sequence//xs:element[@ref='applic']">
                <jxb:property name="xrefApplic"/>
            </jxb:bindings>
        </jxb:bindings>-->
    </jxb:bindings>

    <jxb:bindings schemaLocation="elementGroups.xsd" node="//xs:group[@name='APPLIC']">
        <jxb:bindings node=".//xs:choice//xs:sequence">
            <jxb:bindings node=".//xs:choice">
                <jxb:property name="assertEvalChoice" />
            </jxb:bindings>
        </jxb:bindings>
    </jxb:bindings>

    <jxb:bindings schemaLocation="dc.xsd" node="/xs:schema">
        <jxb:bindings node="//xs:element[@name='language']">
            <jxb:class name="DcLanguage" />
        </jxb:bindings>
        <jxb:bindings node="//xs:element[@name='subject']">
            <jxb:class name="DcSubject" />
        </jxb:bindings>
        <jxb:bindings node="//xs:element[@name='title']">
            <jxb:class name="DcTitle" />
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

これが発生する理由の概要と、それを修正する方法についての提案をいただければ幸いです。私はJAXBを数か月しか使用しておらず、専門家ではありません。ありがとうございました。

これが私が見ているエラーです:

javax.xml.bind.MarshalException-リンクされた例外あり:[com.sun.istack.SAXException2:タイプ "com.synesis7.s7exporter.domain.s1000d.dm.common.XrefType"が欠落しているため、要素としてマーシャリングできません。 @XmlRootElementアノテーション]com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:323)at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:249) java.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:96)at com.synesis7.s7exporter.client.s1000d.procedural.S7ProceduralRunnable.writeToXml(S7ProceduralRunnable.java:142)at com.synesis .s1000d.procedural.S7ProceduralRunnable.createProceduralDm(S7ProceduralRunnable.java:118)(com.synesis7.s7exporter.client.s1000d.procedural.S7ProceduralRunnable)。run(S7ProceduralRunnable.java:93)at com.synesis7.s7exporter.S7ExporterController.processProceduralDms(S7ExporterController.java:235)at com.synesis7.s7exporter.S7ExporterController.exportSchema(S7ExporterController.java:118)at com.synesis7.s7 .initializeExporter(S7exporter.java:58)at com.synesis7.s7exporter.S7exporter.main(S7exporter.java:38)原因:com.sun.istack.SAXException2:タイプ"com.synesis7.s7exporter.domainをマーシャリングできません。 com.sun.xml.bindのcom.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:252)に@XmlRootElementアノテーションがないため、要素としてs1000d.dm.common.XrefType " com.sun.xml.bind.v2.runtime.property.ArrayReferenceNodePropertyの.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:324)。serializeListBody(ArrayReferenceNodeProperty.java:118)at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159)at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody( ClassBeanInfoImpl.java:344)at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700)at com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty。 java:69)at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:172)at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty。 java:159)at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344)at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer。java:700)at com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:69)at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty。 java:172)at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159)at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java: 344)com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700)at com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:69) com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:172)atcom.sun.xml.bind.v2.runtime.property.ArrayERProperty。serializeBody(ArrayERProperty.java:159)at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344)at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer。 java:700)at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:156)at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java: 344)com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700)at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:156) com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344)at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:338)com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700)at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:156) com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344)at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700)at com.sun .xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:156)at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl $ 1.serializeBody(ElementBeanInfoImpl.java:161)atcom.sun。 xml.bind.v2.runtime.ElementBeanInfoImpl $ 1.serializeBody(ElementBeanInfoImpl.java:193)at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(ElementBeanInfoImpl.java:321)at com.sun.xml.bind 。v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:328)at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:76)atcom.sun.xml.bind.v2.runtime。 XMLSerializer.childAsRoot(XMLSerializer.java:498)at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:320)...9詳細

4

2 に答える 2

20

オブジェクトをのインスタンスでラップしてJAXBElement、ルート要素情報を提供できます。XMLスキーマからモデルを生成した場合、生成されたObjectFactoryクラスにはこれに便利なメソッドがあります。

詳細については

于 2012-11-26T23:34:40.937 に答える
0

ObjectFactoryクラスを使用して、 @XmlRootElementを持たないクラスを回避できます。ObjectFactoryは、JAXBElementをラップするためにメソッドをオーバーロードしました。 Method:1はオブジェクトの単純な作成を行い、Method:2はオブジェクトを@JAXBElementでラップします。javax.xml.bind.MarshalExceptionを回避するために常にMethod:2を使用する-リンクされた例外で@XmlRootElementアノテーションが欠落している

方法:1

public GetCountry createGetCountry() {
        return new GetCountry();
    }

方法:2

 @XmlElementDecl(namespace = "my/name/space", name = "getCountry")
 public JAXBElement<GetCountry> createGetCountry(GetCountry value) {
        return new JAXBElement<GetCountry>(_GetCountry_QNAME, GetCountry.class, null, value);
    }

これがお役に立てば幸いです...

于 2018-03-03T12:23:13.097 に答える