gpt4 book ai didi

java - cvc-elt.1 : Cannot find the declaration of element for RootElement

转载 作者:行者123 更新时间:2023-12-01 12:30:57 25 4
gpt4 key购买 nike

我遵循生成 jaxb 对象的架构。我正在用数据填充 jaxb 对象,然后对其进行编码(marshal)。我想在编码(marshal) 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: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>
  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 {

虽然看起来不像

关于java - cvc-elt.1 : Cannot find the declaration of element for RootElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com