web-dev-qa-db-ja.com

JAXBを使用してスキーマに対してXMLを検証する方法

XMLを非マーシャリングおよびマーシャリングしてJavaオブジェクトに、またはその逆を行っているため、XMLおよびJAXBを使用しています。今、XMLを検証して私たちのスキーマ(test.xsd)。XMLで必要なフィールドが欠落している場合、スキーマtest.xsdに対してXMLを検証した後、どのフィールドが欠落しているかを知りたいと思います。

public void unmarshal(final InputStream is) {
    final XMLInputFactory factory = XMLInputFactory.newInstance();
    final XMLStreamReader reader = factory.createXMLStreamReader(is);

    Object req = unmarshaller.unmarshal(reader);

    // how would I validate here?
}

XMLをtest.xsdスキーマに対して検証するにはどうすればよいですか。私のtest.xsdスキーマパスは-

C:\ workspace\one\two\three\src\main\Java\com\package\serv\ap\versionOne\test.xsd

更新:test.xsdを次のように読み込んでいます

Schema schema = factorySchema.newSchema(new File("C:\\workspace\\one\\two\\three\\src\\main\\Java\\com\\package\\serv\\ap\\versionOne\\test.xsd"));
14
AKIWEB

非整列化を行う前に、Unmarshallerjavax.xml.validation.Schema のインスタンスを設定する必要があります。 ValidationEventHandlerUnmarshallerの実装を指定して、非整列化プロセス中に発生する問題をキャッチできます。

詳細情報

この使用例については、ブログで詳しく説明しています。

22
bdoughan