質問

XSDに対してXMLを検証するJavaコードがいくつかあります。ここにあるエラーハンドラーの変更されたバージョンを使用しています: http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.html 検証中にすべての例外をキャッチして記録します。

エラーは非常に簡潔です、彼らは次のように見えます:

http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:cID&{"http://www.myschema.com/schema":txn}

などの他のメッセージ

http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:attributes&{"http://www.myschema.com/schema":sequence}

さらに不可解です。

ここで何がうまくいかなかったかを説明するSaxから明確でわかりやすいメッセージを得る簡単な方法はありますか?最初のエラーでは期待していたと思います txn 代わりに要素を見つけました cID. 。しかし... SAXによって生成される可能性のあるすべてのエラーがわからないので、翻訳テーブルを手動で作成しようとはしません。

この出力の最終的なユーザーはほとんど非技術的であるため、「要素などのシンプルで明確なメッセージを生成できる必要があります。 txn シーケンスから外れていた」。

それが役立つ場合、ここに検証に使用されるコード(多かれ少なかれ)があります。

Source schema1 = new StreamSource(new File("resources/schema1.xsd"));
Source schema2 = new StreamSource(new File("resources/schema2.xsd"));
Source[] sources = {schema1,schema2};
validator = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(sources).newValidator();
ErrorHandler lenient = new ForgivingErrorHandler();
validator.setErrorHandler(lenient);

他の場所...

StreamSource xmlSource = new StreamSource(new StringReader(XMLData) );
try
{
    validator.validate(xmlSource);
}
catch (SAXException e)
{
    logger.error("XML Validation Error: ",e);
}
役に立ちましたか?

解決

まあ、私は追加しなければならなかったようです xsi:schemaLocation="http://www.mycompany.com/schema resources/schema1.xsd " XMLドキュメントに s:http://www.mycompany.com/schema デフォルトの名前空間です。 xmlns="s:http://www.mycompany.com/schema". 。もちろん、XMLを生成するツールを変更するためにアクセスできないため、次の醜いハックが必要でした。

xmlDataStr = xmlDataStr.replace("<rootNode ", "<rootNode xsi:schemaLocation=\"http://www.mycompany.com/schema resources/schema1.xsd \" ");

...もちろん今、私は二重の検証エラーを取得しています!次のような明確でわかりやすいもの

cvc-complex-type.2.4.a: Invalid content was found starting with element 's:cID'. One of '{"http://www.mycompany.ca/schema":tdr}' is expected.

すぐに次のとおりです。

http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:cID&{"http://www.mycompany.com/schema":tdr}

ダブルエラーは迷惑ですが、少なくとも最初のものは使用可能です...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top