7

特定の 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>

何か案が ?ありがとうございました

4

2 に答える 2

0

名前空間の問題かもしれません。import ./include/CJCommon.xsd を適切な名前空間宣言などで試す必要があります。リンク

于 2013-10-15T12:34:45.387 に答える