尝试封送缺少@XmlRootElement的JAXB根对象时出错
我有一个复杂的xml模式,它是国际标准的一部分,因此我不能更改模式文件,我使用Maven从中生成JAXB对象。当我尝试将数据设置到我的JAXB对象中,然后封送根元素时,在一些复杂类型上会出现缺少@XmlRootElement的错误。我的问题是如何解决这个问题? 环境:尝试封送缺少@XmlRootElement的JAXB根对象时出错,jaxb,marshalling,Jaxb,Marshalling,我有一个复杂的xml模式,它是国际标准的一部分,因此我不能更改模式文件,我使用Maven从中生成JAXB对象。当我尝试将数据设置到我的JAXB对象中,然后封送根元素时,在一些复杂类型上会出现缺少@XmlRootElement的错误。我的问题是如何解决这个问题? 环境: JAXB2.2.2 Maven 3.0.3 日食朱诺 Java 1.6 Windows 7 64位 我对网站和本网站进行了广泛的研究,但没有找到我的问题的答案,包括以下帖子: 关于堆栈溢出的这个问题: 我已尝试在自定义绑定
- JAXB2.2.2
- Maven 3.0.3
- 日食朱诺
- Java 1.6
- Windows 7 64位
标记添加到全局绑定元素,但是我已经向全局绑定元素添加了许多属性,当我这样做时,它将不会编译
有人能帮我指出正确的方向吗?这可能是我构建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"/>
*
*
*
*列表中允许以下类型的对象
*{@link ApplicType}
*{@link-DmcextensionType}
*{@link AgeType}
*{@link AveeType}
*{@link IssnoType}
*{@link-DmtitleType}
*{@link LanguageType}
*{@link Resource}
*{@link Locator}
*{@link Arc}
*
*
*/
公共列表GetApplication和DMCExtensionAndAge(){
如果(AppliandDMCExtensionAndAge==null){
AppliandDMCExtensionAndAge=new ArrayList();
}
返回此.application和dmcextensionAndage;
}
}
外部参照类型:
public GetCountry createGetCountry() {
return new GetCountry();
}
*
*
*
*列表中允许以下类型的对象
*{@link String}
*{@link JAXBElement}{@code}
*{@link JAXBElement}{@code}
*{@link JAXBElement}{@code}
*
*
*/
公共列表getContent(){
if(content==null){
content=newarraylist();
}
返回此.content;
}
}
最后是我的自定义绑定文件:
如果您能从较高的层次了解为什么会出现这种情况,并就如何解决这一问题提出建议,我们将不胜感激。我使用JAXB才几个月,不是专家。多谢各位
下面是我看到的错误:
javax.xml.bind.MarshalException
-除此之外:
[com.sun.istack.SAXException2:无法将类型“com.syness7.s7exporter.domain.s1000d.dm.common.XrefType”封送为元素,因为它缺少@XmlRootElement注释]
位于com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:323)
位于com.sun.xml.bind.v2.runtime.MarshallerImpl.marshall(MarshallerImpl.java:249)
位于javax.xml.bind.helpers.AbstractMarshallerImpl.marshall(AbstractMarshallerImpl.java:96)
位于com.synesis7.s7exporter.client.s1000d.produceral.S7ProceduralRunnable.writeToXml(S7ProceduralRunnable.java:142)
在com.synesis7.s7exporter.client.s1000d.produral.S7ProceduralRunnable.createProceduralDm(S7ProceduralRunnable.java:118)上
位于com.synesis7.s7exporter.client.s1000d.procedural.S7ProceduralRunnable.run(S7ProceduralRunnable.java:93)
在com.synesis7.s7exporter.S7ExporterController.processProceduralDms上(S7ExporterController.java:235)
位于com.synesis7.s7exporter.S7ExporterController.exportSchema(S7ExporterController.java:118)
在com.synesis7.s7exporter.s7exporter.initializeExporter(s7exporter.java:58)上
位于com.synesis7.s7exporter.s7exporter.main(s7exporter.java:38)
原因:com.sun.istack.SAXException2:无法将类型“com.synesis7.s7exporter.domain.s1000d.dm.common.XrefType”封送为元素,因为它缺少@XmlRootElement注释
位于com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:252)
位于com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:324)
位于com.sun.xml.bind.v2.runtime.property.ArrayReferenceNodeProperty.serializeListBody(ArrayReferenceNodeProperty.java:118)
位于com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159)
位于com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344)
位于com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700)
位于com.sun.xml.bind.v2.runtime.propert
/**
* <p>Java class for refdmType complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType name="refdmType">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <choice>
* <sequence>
* <element ref="{}applic" minOccurs="0"/>
* <element ref="{}dmcextension" minOccurs="0"/>
* <group ref="{}ALLDMC"/>
* <element ref="{}issno" minOccurs="0"/>
* <element ref="{}dmtitle" minOccurs="0"/>
* <element ref="{}language" minOccurs="0"/>
* </sequence>
* <group ref="{http://www.w3.org/1999/xlink}XLINKEXT" maxOccurs="unbounded" minOccurs="0"/>
* </choice>
* <attGroup ref="{http://www.w3.org/1999/xlink}XLINKATT"/>
* <attGroup ref="{}cntlcontent"/>
* <attGroup ref="{}bodyatt"/>
* <attribute ref="{}target"/>
* <attribute ref="{}refapplic"/>
* </restriction>
* </complexContent>
* </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;
}
}
/**
* <p>Java class for xrefType complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType name="xrefType">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element ref="{}applic" minOccurs="0"/>
* <group ref="{}SPARCON" maxOccurs="unbounded" minOccurs="0"/>
* </sequence>
* <attGroup ref="{}cntlcontent"/>
* <attGroup ref="{http://www.w3.org/1999/xlink}XLINKATT3"/>
* <attribute ref="{}xrefid"/>
* <attribute ref="{}xidtype"/>
* <attribute ref="{}target"/>
* <attribute ref="{}destitle"/>
* <attribute ref="{}pretext"/>
* <attribute ref="{}posttext"/>
* <attribute ref="{}refapplic"/>
* </restriction>
* </complexContent>
* </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>
public GetCountry createGetCountry() {
return new GetCountry();
}
@XmlElementDecl(namespace = "my/name/space", name = "getCountry")
public JAXBElement<GetCountry> createGetCountry(GetCountry value) {
return new JAXBElement<GetCountry>(_GetCountry_QNAME, GetCountry.class, null, value);
}