Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java cvc elt.1:找不到根元素的元素声明_Java_Xml_Jaxb_Xsd - Fatal编程技术网

Java cvc elt.1:找不到根元素的元素声明

Java cvc elt.1:找不到根元素的元素声明,java,xml,jaxb,xsd,Java,Xml,Jaxb,Xsd,我使用以下模式生成了jaxb对象。我用数据填充jaxb对象,然后封送它。我想在封送jaxb对象的同时进行模式验证 ByteArrayOutputStream formXml = new ByteArrayOutputStream(); new JAXBElement<Form100DIV_V100>(new QName("http://example.org/types/2003/04", "Form100DIV_V100"), Form100DIVV100.class, (For

我使用以下模式生成了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>
ByteArrayOutputStream formXml=newbytearrayoutputstream();
新的JAXBElement(新的QName(“http://example.org/types/2003/04“,”Form100DIV_V100“),Form100DIVV100.class,(Form100DIVV100)form100);
如果(ISSCHEMAVALIDATIONED){
SchemaFactory sf=SchemaFactory.newInstance(xmlstants.W3C\u XML\u SCHEMA\u NS\u URI);
InputStream xsdStream=XmlUtil.class.getClassLoader().getResourceAsStream(“schema/form.xsd”);
StreamSource xsdSource=新的StreamSource(xsdStream);
Schema=sf.newSchema(xsdSource);
//m、 setEventHandler(新SchemaValidationEventHandler());
//m、 设置模式(模式);
Validator Validator=schema.newValidator();
试一试{
validator.validate(新的StreamSource(新的ByteArrayInputStream(formXml.toByteArray()));
System.out.println(“文件有效”);
}捕获(SAXE异常){
System.out.println(“文件无效”);
System.out.println(“原因:+e.getLocalizedMessage());
}捕获(IOE异常){
e、 printStackTrace();
}
}
---
----
-----
这是我在封送处理后得到的xml

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

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

  • Form100DIV\u V100
    在架构中未定义为顶级元素,仅定义为类型。您只需将
    xs:complexType
    包装在
    xs: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>
    
    虽然看起来不像

    <Form100DIV_V100 xmlns="http://example.org/types/2003/04">
      <AMOUNT>100.00</AMOUNT>
    </Form100DIV_V100>
    
    @XmlRootElement(name = "Form100DIV_V100")
    public class Form100DIVV100 extends AbstractForm100 {