編集: Preetam Kumarのおかげで、この問題は解決されましたが、このエラーは他の場所にあります。JAXBを使用してアンマーシャリングしている間に不正な形式のXML
javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException; systemId: file:***/Workspace_XML/fichier_cri/xml/exemple1.xml; lineNumber: 5; columnNumber: 185; cvc-elt.1 : Declaration of element 'crifile' cannot be found.]
はしかし、私は、スキーマにXMLファイルに正しいパスを与えるが、それはそれを使用していないようだ:私は再び私のxmlファイルをアンマーシャリングしようとすると、私は、要素が見つからない私に言って、このエラーが出ます... わかりません。
NB:以下の例では、スキーマとxmlタグが完全に一致しないことがわかりました。私はすでにファイルで修正しました。
最近では、いくつかのXMLファイルをJavaオブジェクトに解析するためにJAXB Javaライブラリを使用する必要があります。
XMLスキーマ(.xsd)を作成し、ツールxjcを使用してコンパイルし、Javaクラスを生成しました。 (xsdファイルの例はここに私の質問を参照してください:schema.xsd)
私はカスタムXMLファイルをアンマーシャリングして、自分のスキーマと生成されたクラスをテストしようとしています。そして、ここに私の問題があります。私は名前空間を宣言するとき、私は数多くのウェブサイトや例で見てきたよう 私は常に、私のxmlは最初から不正な権利であるエラーを取得:
javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException; systemId: file:***/Workspace_XML/fichier_cri/xml/exemple1.xml; lineNumber: 2; columnNumber: 11; The type of element "xmlns:xsi" must be followed by attribut specifications, ">" or "/>".]
:
私はエラーを取得します
私はラインを変更しようとしたとしても、それを削除したが、その後、私は別のエラーを取得:今
javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException; systemId: file:***/Workspace_XML/fichier_cri/xml/exemple1.xml; lineNumber: 5; columnNumber: 10; cvc-elt.1 : Déclaration of element 'crifile' not found.]
を、私はもう何をすべきかわからないので、誰かがヒントやSOMETを持っている場合興、私はどちらか、私は私のJavaのテストプログラムでは、本当に自信を持っていないです...ない
を言うことはありません...しかし、ここにある:
import generated.FichierCri;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.xml.sax.SAXException;
public class main {
final static File baseDir = new File("***\\Workspace_XML\\fichier_cri\\");
public static void main(String[] args) {
System.out.println("*DEBUG* - load xml stream");
System.out.println("*DEBUG* - xml file location : " + baseDir.getPath() + "\\xml\\exemple1.xml");
File xmlFile = new File(baseDir, "\\xml\\exemple1.xml");
if (xmlFile == null)
throw new NullPointerException("xmlFile is null");
System.out.println("*DEBUG* - Instantiate SchemaFactory");
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
System.out.println("*DEBUG* - Load schema file");
System.out.println("*DEBUG* - schema location : " + baseDir.getPath() + "\\schema\\schema.xsd");
Schema schema = null;
try {
schema = schemaFactory.newSchema(new File(baseDir, "\\schema\\schema.xsd"));
}
catch (SAXException e) {
e.printStackTrace();
}
if (schema == null) throw new NullPointerException("schema is null");
System.out.println("*DEBUG* - Instantiate JAXBContext");
JAXBContext context = null;
try {
context = JAXBContext.newInstance(FichierCri.class);
}
catch (JAXBException e) {
e.printStackTrace();
}
System.out.println("*DEBUG* - create unmarshaller");
Unmarshaller unmarshaller = null;
try {
unmarshaller = context.createUnmarshaller();
}
catch (JAXBException e) {
e.printStackTrace();
}
System.out.println("*DEBUG* - set schema to unmarshaller");
unmarshaller.setSchema(schema);
System.out.println("*DEBUG* - Create unmarshall object of type FichierCri");
System.out.println("*DEBUG* - unmarshall from xml file");
try {
FichierCri unmarshall = (FichierCri) unmarshaller.unmarshal(xmlFile);
}
catch (JAXBException e) {
e.printStackTrace();
}
}
}
、ここでxmlファイルのサンプルです:
<?xml version="1.0" encoding="UTF-8"?>
<xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<xsi:schemaLocation="***\Desktop\Workspace_XML\fichier_cri\schema.xsd"/>
<crifile>
<init_liaison>
<source>value</source>
</init_liaison>
<liste_cri>
<demande_cri>
<fichier_erreur>value</fichier_erreur>
</demande_cri>
</liste_cri>
</crifile>
すべての要素(crifile、liste_cri、...)はスキーマで定義されています。あなたのXMLが不正な形式である
本当にありがとう、それは効果的に私の問題を解決しましたが、別の問題があります...私は新しいエラーで質問を編集しました。 –
「xml形式を指定する必要がありますか」ということはどういう意味ですか? –
私に見てみましょう。私はそのテキストを含めることを意味していない方法で –