当前位置: 首页 > 知识库问答 >
问题:

JAXB-SAXParseException找不到元素的声明

郁明诚
2023-03-14

我在用给定的xsd验证对象时遇到问题。已从类生成xsd。

SchemaFactory factory = SchemaFactory
                .newInstance("http://www.w3.org/2001/XMLSchema");
Schema schema = factory.newSchema(getClass().getResource("/xsd/test.xsd"));
JAXBContext context = JAXBContext.newInstance(aClass);
Unmarshaller u = context.createUnmarshaller();
u.setSchema(schema);
Object anObject = u.unmarshal(new StreamSource(new StringReader(
                MESSAGE)), aClass);

这里是例外消息

[org.xml.sax.SAXParseException:cvc elt.1:找不到元素“ACCESREFUSE”的声明。]

以下是XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:include schemaLocation="./include/CJCommon.xsd"/>
 <xs:element name="ACCESREFUSE">
<xs:complexType>
  <xs:sequence maxOccurs="1" minOccurs="1">
    <!-- Entete -->
    <xs:element maxOccurs="1" minOccurs="1" ref="IDOper"/>
    <xs:element maxOccurs="1" minOccurs="1" ref="DateEvt"/>
    <xs:element maxOccurs="1" minOccurs="1" ref="IDEvt"/>
    <xs:element maxOccurs="1" minOccurs="1" ref="IDJoueur"/>
    <xs:element maxOccurs="1" minOccurs="1" ref="HashJoueur"/>
    <xs:element maxOccurs="1" minOccurs="1" ref="IDSession"/>
    <xs:element maxOccurs="1" minOccurs="1" ref="IPJoueur"/>
    <xs:element maxOccurs="1" minOccurs="0" ref="IDCoffre"/>
    <!-- Corps -->
    <xs:element maxOccurs="1" minOccurs="1" ref="TypAg"/>
    <xs:element maxOccurs="1" minOccurs="0" name="CauseRefus" type="string-1024"/>
    <xs:element maxOccurs="1" minOccurs="0" name="TypeRefus">
      <xs:simpleType>
        <xs:restriction base="string-1024">
          <xs:enumeration value="DelaiIdentite"/>
          <xs:enumeration value="RejetIdentite"/>
          <xs:enumeration value="Interdit"/>
          <xs:enumeration value="AutoInterdit"/>
          <xs:enumeration value="OpVerrouille"/>
          <xs:enumeration value="Verrouille"/>
          <xs:enumeration value="Cloture"/>
          <xs:enumeration value="Autre"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
  </xs:sequence>
</xs:complexType>
</xs:element>

元素ACCESREFUSE是xml的根。

XML:

 <ACCESREFUSE>
      <dateEvt>Tue Oct 15 11:45:48 CEST 2013</dateEvt>
      <hashJoueur>0000000000000000000000000000000000000000</hashJoueur>
      <typAg>JC</typAg>
      <causeRefus>Interdit</causeRefus>
      <typeRefus>Interdiction Temporaire</typeRefus>
      <idjoueur>81.252.190.129</idjoueur>
      <idoper>002</idoper>
      <idsession>301090</idsession>
      <idevt>0</idevt>
      <ipjoueur/>
      <idcoffre/>
 </ACCESREFUSE>

知道吗?谢谢

共有2个答案

南门鸿雪
2023-03-14

可能是名称空间的问题.你应该尝试导入./包含/CJCommon.xsd与适当的名称空间声明等链接

晋功
2023-03-14

您是否可以尝试将您的模式修改为:

<xs:element name="ACCESREFUSE">
<xs:complexType name="ACCESREFUSE">
...
</xs:schema>

编辑:我认为你在加载XSD方面有问题。出于测试目的,您是否可以更改此代码:

InputStream xmlStream = ...
Schema schema = factory.newSchema(xmlStream);

请尝试一下!

编辑2:我试着用你的XSD解析ACCESREFUSE类。我不知道你的./包括/CJCommon.xsd模式,所以我省略了。这是我的代码:

        SchemaFactory factory = SchemaFactory
                .newInstance("http://www.w3.org/2001/XMLSchema");
        File file = new File("test.xml");
        Schema schema = factory.newSchema(file);

    JAXBContext context = JAXBContext.newInstance(ACCESREFUSE.class);
    Unmarshaller u = context.createUnmarshaller();
    u.setSchema(schema);
    Object anObject = u.unmarshal(new StreamSource(new StringReader(
            getMessage())), ACCESREFUSE.class);

我的账户失效了。课程:

@XmlRootElement(name="ACCESREFUSE")
public class ACCESREFUSE {

    protected String v1;
    protected String v2;
    protected String v3;
    protected String v4;
    protected String v5;
    protected String v6;
    protected String v7;
        protected String v8;
    protected String v9;
    protected String CauseRefus;
    protected TypeRefus typeRefus;

     public enum TypeRefus{
         DelaiIdentite, RejetIdentite, Interdit, AutoInterdit, OpVerrouille, Verrouille, Cloture, Autre;
    }

信息:

private static String getMessage() {

        return "<ACCESREFUSE>"
                + "<v1>Tue Oct 15 11:45:48 CEST 2013</v1>"
                + "<v2>0000000000000000000000000000000000000000</v2>"
                + "<v3>JC</v3>" + "<v4>Interdit</v4>"   
                + "<v5>81.252.190.129</v5>"
                + "<v6>002</v6>" + "<v7>301090</v7>"
                + "<v8>0</v8>" + "<v9> test </v9>"
                + "<TypeRefus>RejetIdentite</TypeRefus>"

                + "</ACCESREFUSE>";
    }

并将XSD修改为简单的字符串元素:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="ACCESREFUSE">
<xs:complexType>
  <xs:sequence maxOccurs="1" minOccurs="1">
    <!-- Entete -->
    <xs:element maxOccurs="1" minOccurs="1" type="xs:string" name="v1"/>
     ...

程序正常工作!:)

那么你能检查一下你的/包括/常见。xsd?您是否将xs前缀用于type=“xs:string”

 类似资料:
  • 我对camunda和DMN一无所知。我试图在spring启动运行DMN示例。这里是我尝试在我的机器上运行的例子的链接。 这里是我的pom依赖项, 当我运行它时,它显示遵循stacktrace null 我没有得到的一件事是,在资源中,他们在xml文件中有决策模式,而在那里,他们有用于xsd的url,这是不起作用的。 经过一些;)的研究,我找到了这个链接,其中给出了xsd url,我试过了,但名称空

  • 问题内容: 我有弹簧罐,并试图 从此处给出的教程中实现程序。xml配置文件为: 主要: 我不知道这些豆怎么了。到目前为止,关于其他问题的任何建议都无济于事。有什么帮助吗? 问题答案: 假设您使用的是Spring 3.1,请尝试以下操作: 在最后一行用您使用的 主要 Spring版本替换。含义:即使有Spring版本,也没有XSD 。

  • 我有这个问题 XML格式的文档 我的XSD 我有个神经衰弱的问题。有什么想法吗? 问候

  • 在spring中,每当我在dispatcher-servlet.xml中编写时,我都会得到这样的错误:-

  • 我从GitHub获取了一个android项目,并将其克隆到了我的android Studio中。当我试图运行ActivityMain时。xml文件为了检查项目是否正常工作,我遇到了这个错误“找不到元素'RelativeLayout'的声明”。我不知道怎么解决这个问题。如果任何人有任何其他方式运行该项目,请建议太多。 github文件的链接如下所示 https://github.com/PedroC

  • 我对XML非常陌生,我面临验证问题,如果我的XML和XSD文件结构良好,我也希望得到一些反馈。 在根据XSD验证XML时,我经常遇到错误- 我正在windows上使用程序XML复制编辑器。我还针对XSD尝试了一个在线验证器XML,但出现了这个错误。https://www.freeformatter.com/xml-validator-xsd.html I get error Src resolve