2

Java 6 で動作する XSD を解析する古いコードは、Java 7 で失敗します。理由は、プロパティhttp://www.oracle.com/xml/jaxp/properties/xmlSecurityPropertyManagerが設定されていないことに要約され、NullPointerException が発生します。コード:

System.setProperty(DOMImplementationRegistry.PROPERTY, "com.sun.org.apache.xerces.internal.dom.DOMXSImplementationSourceImpl");
    DOMImplementationRegistry registry = newInstance();
    XSImplementation impl = (XSImplementation) registry.getDOMImplementation("XS-Loader");
    XSLoader schemaLoader = impl.createXSLoader(null);

    String url = SchemaParser.class.getResource("/some.xsd").toURI().toString();

    XSModel model = schemaLoader.loadURI(url);

NPE は、loadUri、クラス XSDHandler.reset() 内で発生します。

    XMLSecurityPropertyManager securityPropertyMgr = (XMLSecurityPropertyManager)
            componentManager.getProperty(XML_SECURITY_PROPERTY_MANAGER);
    //Passing on the setting to the parser
    fSchemaParser.setProperty(XML_SECURITY_PROPERTY_MANAGER, securityPropertyMgr);;

securityPropertyMgr、setProperty() は NPE をスローします。どうすればこれを修正できますか?

4

1 に答える 1

0

== 比較を使用します。定数を使用する必要がありました:

((XSLoaderImpl)loader).setParameter(
     com.sun.org.apache.xerces.internal.impl.Constants.XML_SECURITY_PROPERTY_MANAGER, 
     new XMLSecurityPropertyManager());

http://osdir.com/ml/core-libs-dev/2013-08/msg00260.htmlを参照してください。ただし、これは JDK 8 用です。7 で修正されることを願っていますが、バグを投稿できませんでした。 .

于 2013-10-08T19:01:00.550 に答える