1

安全な https サイトにあるスキーマを使用して XML ファイルを検証したいと考えています。バリデーターに自己署名証明書を除外するか、https URL を使用するように指示するにはどうすればよいですか? test.xml というファイルと .xml にあるスキーマがありますhttps://localhost:1234/module/testschema.xsd。ここにあるのと同じコードを使用しています。通常の URL ( http://localhost/module/testschema.xsd) を使用すると、うまく機能します。https URL に置き換えると、次のエラーが発生します。

schema_reference.4: スキーマ ドキュメント ' https://localhost:1234/module/testschema.xsd ' の読み取りに失敗しました。1) ドキュメントが見つからなかったためです。2) ドキュメントを読み取ることができませんでした。3) ドキュメントのルート要素は ではありません<xsd:schema>

コピーされたコード:

public boolean validateFile(String xml, String strSchemaLocation)
{
Source xmlFile = null;
try {
    URL schemaFile = new URL(strSchemaLocation);
    xmlFile = new StreamSource(new File(xml));
    SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = schemaFactory.newSchema(schemaFile);
    Validator validator = schema.newValidator();
    validator.validate(xmlFile);
    System.out.println(xmlFile.getSystemId() + " is valid");
} catch (SAXException e) {
    System.out.println(xmlFile.getSystemId() + " is NOT valid");
    System.out.println("Reason: " + e.getLocalizedMessage());
    return false;
} catch (IOException ioe) {
    System.out.println("IOException");
    return false;
}

return true;
}
4

2 に答える 2

1

これは、スキーマの検証とはほとんど関係ありません。問題は、HTTPS 接続を確立し、自己署名証明書を信頼する必要があることです。特定の接続で異なる証明書を使用するにはどうすればよいですか? を参照してください。または、そのためにグーグルで検索してください。

ファイルを受け取るファクトリ メソッドを使用できるとは思わないSchemaFactory.newSchemaので、StreamSource を受け取るメソッドを使用してください。

URL schemaFile = new URL(strSchemaLocation);
HttpsURLConnection schemaConn = (HttpsURLConnection)schemaFile.openConnection();
// Magic from the other answer to accept self-signed cert
InputStream is = schemaConn.getInputStream();
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(new StreamSource(is));

(入力ストリームと接続を閉じるために try..catch を省略しています)

于 2013-01-11T00:30:17.350 に答える
0

検証の問題ではありません。java.net.URL は https をサポートしています。bo の違いがあるはずです。https://localhost:1234/module/testschema.xsdブラウザで開くことができることを確認してください。

于 2013-01-11T01:58:31.833 に答える