繁体   English   中英

cvc-elt.1:找不到RootElement的元素声明

[英]cvc-elt.1: Cannot find the declaration of element for RootElement

我遵循了使用该架构生成jaxb对象的架构。 我先用数据填充jaxb对象,然后将其封送处理。我想在封送jaxb对象时进行模式验证。

ByteArrayOutputStream formXml = new ByteArrayOutputStream();

new JAXBElement<Form100DIV_V100>(new QName("http://example.org/types/2003/04", "Form100DIV_V100"), Form100DIVV100.class, (Form100DIVV100) form100);

 if (isSchemaValidationNeeded) {
            SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

            InputStream xsdStream = XmlUtil.class.getClassLoader().getResourceAsStream("schema/form.xsd");
            StreamSource xsdSource = new StreamSource(xsdStream);
            Schema schema = sf.newSchema(xsdSource);

            //m.setEventHandler(new SchemaValidationEventHandler());
            //m.setSchema(schema);

            Validator validator = schema.newValidator();
            try {
              validator.validate(new StreamSource(new ByteArrayInputStream(formXml.toByteArray())));
              System.out.println("File is valid");
            } catch (SAXException e) {
              System.out.println("File is NOT valid");
              System.out.println("Reason: " + e.getLocalizedMessage());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://example.org/types/2003/04" targetNamespace="http://example.org/types/2003/04" 
elementFormDefault="qualified" attributeFormDefault="unqualified">

 <xs:complexType name="Form100DIV_V100">
    <xs:complexContent>
        <xs:extension base="AbstractForm100">
            <xs:sequence>
                <xs:element name="AMOUNT" type="AmountType" minOccurs="0"/>
               ---
           </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
----
-----
</xs:schema>

这是我经过封送处理后得到的xml

<Form100DIV_V100 xmlns="http://example.org/types/2003/04">
  <AMOUNT>100.00</AMOUNT>
  -------
  ---------
</Tax1099Div_V100>

尽管名称空间在xml和xsd中是正确的,但我遇到了以下错误。 原因:cvc-elt.1:找不到元素'Form100DIV_V100'的声明。

  1. 在您的架构中, Form100DIV_V100未被定义为顶级元素,仅被定义为一种类型。 你可以简单地只是包装的xs:complexTypexs:element

     <xs:element name="Form100DIV_V100"> <xs:complexType> <xs:complexContent> <xs:extension base="AbstractForm100"> <xs:sequence> <xs:element name="AMOUNT" type="AmountType" minOccurs="0" /> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> 
  2. 在您的xml实例中, <Form100DIV_V100>没有正确终止。 您将使用</Tax1099Div_V100>终止它。

     <Form100DIV_V100 xmlns="http://example.org/types/2003/04"> <AMOUNT>100.00</AMOUNT> </Form100DIV_V100> 

鉴于您已正确定义了AbstractForm100AmountType类型,而其余的-----都正确,则以上修复程序应得到验证。

另外,使用xjc进行编译应为您提供一个Form100DIVV100定义了您的类所必需的@XmlRootElement批注

@XmlRootElement(name = "Form100DIV_V100")
public class Form100DIVV100 extends AbstractForm100 {

虽然看起来不像

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM