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 をスローします。どうすればこれを修正できますか?