2012-06-08 42 views
8

jaxbを使用して作成したxmlファイルがあります。私はそれをxsdドキュメントに対して検証する必要があります。アンマーシャリングなしで検証を行うことは可能ですか?私はxmlファイルにエラーを出力する必要があります。xsdファイルに対してjaxbを使用してxmlを検証しました

+0

xsdからバインディングコードを生成し、インスタンスxmlを作成するコードを使用する主な利点の1つは、有効で整形式のXMLを出力することです。なぜそれをもう一度検証したいのか分かりません。 –

+1

SchemaおよびValidationEventHandlerは、マーシャラ自体で設定できます。マーシャリング中にスキーマに対して検証されます。 http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html#setSchema(javax.xml.validation.Schema) – Ritesh

答えて

10

はい、javaの1.5からバリデーターを使用できます。ここにリファレンスがありますdoc

DOMベースまたはストリームベースのAPIを使用して、xsdファイルに対してXMLドキュメントを検証できます。 あなたのタスクのためのSAXのAPIを使用したい場合は、聞くには例です:

try { 
    String schemaLang = "http://www.w3.org/2001/XMLSchema"; 

    SchemaFactory factory = SchemaFactory.newInstance(schemaLang); 

    Schema schema = factory.newSchema(new StreamSource("sample.xsd")); 
    Validator validator = schema.newValidator(); 

    validator.validate(new StreamSource("test.xml")); 

} catch (SAXException e) { 
    System.out.println(" sax exception :" + e.getMessage()); 
} catch (Exception ex) { 
    System.out.println("excep :" + ex.getMessage()); 
} 

そうでなければあなたはDOM、DOM4JまたはXOM APIを使用することができます。詳細はhereを参照してください。

関連性があります。answerもあります。

+1

を参照してください。マーシャリングする前に検証することもできます。JAXBSource source =新しいJAXBSource(jaxbContext、objectBeingMarshalled); \t \t validator.validate(source); – Ritesh

+0

このエクセプションサックスの例外が発生しました: "[xX] [mM] [lL]"に一致する処理命令のターゲットは許可されていません。 – AutoMEta

+0

これは、XMLの先頭にスペースがあるか、XMLの先頭にスペースやその他のものがないことを意味します。http://gonithethinker.blogspot.com/2012/06/processing-instruction-target-matching .html @AutoMeta – Forhad

関連する問題