You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2006/03/07 07:01:58 UTC
svn commit: r383794 -
/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConverter.java
Author: jukka
Date: Mon Mar 6 22:01:56 2006
New Revision: 383794
URL: http://svn.apache.org/viewcvs?rev=383794&view=rev
Log:
JCR-334: Use the DOM3 implementation registry instead of a direct reference to the Xerces XMLSchemaLoader class, to avoid using the old Xerces 2.4.0 implementation that Maven 1.0.2 incorrectly puts in the class path.
Modified:
incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConverter.java
Modified: incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConverter.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConverter.java?rev=383794&r1=383793&r2=383794&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConverter.java (original)
+++ incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConverter.java Mon Mar 6 22:01:56 2006
@@ -8,12 +8,14 @@
import org.apache.jackrabbit.core.nodetype.ValueConstraint;
import org.apache.jackrabbit.core.value.InternalValue;
import org.apache.jackrabbit.name.QName;
-import org.apache.xerces.impl.xs.XMLSchemaLoader;
+import org.apache.xerces.dom3.bootstrap.DOMImplementationRegistry;
import org.apache.xerces.xs.XSAttributeDeclaration;
import org.apache.xerces.xs.XSAttributeUse;
import org.apache.xerces.xs.XSComplexTypeDefinition;
import org.apache.xerces.xs.XSConstants;
import org.apache.xerces.xs.XSElementDeclaration;
+import org.apache.xerces.xs.XSImplementation;
+import org.apache.xerces.xs.XSLoader;
import org.apache.xerces.xs.XSModel;
import org.apache.xerces.xs.XSModelGroup;
import org.apache.xerces.xs.XSNamedMap;
@@ -23,6 +25,7 @@
import org.apache.xerces.xs.XSTerm;
import org.apache.xerces.xs.XSTypeDefinition;
import org.apache.xerces.xs.XSWildcard;
+
import javax.jcr.PropertyType;
import javax.jcr.version.OnParentVersionAction;
import java.io.File;
@@ -66,22 +69,37 @@
* convertSchema
*/
private void convertSchema(File file) throws SchemaConversionException {
- XMLSchemaLoader loader = new XMLSchemaLoader();
- String uri = file.toURI().toString();
- XSModel xsModel = loader.loadURI(uri);
-
- // Convert top level complex type definitions to node types
- XSNamedMap map = xsModel.getComponents(XSConstants.TYPE_DEFINITION);
- for (int i = 0; i < map.getLength(); i++) {
- XSTypeDefinition tDef = (XSTypeDefinition) map.item(i);
- checkAndConvert(tDef, null, null);
- }
- // Convert local (anonymous) complex type defs found in top level element declarations
- map = xsModel.getComponents(XSConstants.ELEMENT_DECLARATION);
- for (int i = 0; i < map.getLength(); i++) {
- XSElementDeclaration eDec = (XSElementDeclaration) map.item(i);
- XSTypeDefinition tDef = eDec.getTypeDefinition();
- checkAndConvert(tDef, eDec.getNamespace(), eDec.getName());
+ try {
+ // Find an XMLSchema loader instance
+ DOMImplementationRegistry registry =
+ DOMImplementationRegistry.newInstance();
+ XSImplementation implementation = (XSImplementation)
+ registry.getDOMImplementation("XS-Loader");
+ XSLoader loader = implementation.createXSLoader(null);
+
+ // Load the XML Schema
+ String uri = file.toURI().toString();
+ XSModel xsModel = loader.loadURI(uri);
+
+ // Convert top level complex type definitions to node types
+ XSNamedMap map = xsModel.getComponents(XSConstants.TYPE_DEFINITION);
+ for (int i = 0; i < map.getLength(); i++) {
+ XSTypeDefinition tDef = (XSTypeDefinition) map.item(i);
+ checkAndConvert(tDef, null, null);
+ }
+ // Convert local (anonymous) complex type defs found in top level element declarations
+ map = xsModel.getComponents(XSConstants.ELEMENT_DECLARATION);
+ for (int i = 0; i < map.getLength(); i++) {
+ XSElementDeclaration eDec = (XSElementDeclaration) map.item(i);
+ XSTypeDefinition tDef = eDec.getTypeDefinition();
+ checkAndConvert(tDef, eDec.getNamespace(), eDec.getName());
+ }
+ } catch (ClassNotFoundException e) {
+ throw new SchemaConversionException("XSLoader not found", e);
+ } catch (InstantiationException e) {
+ throw new SchemaConversionException("XSLoader instantiation error", e);
+ } catch (IllegalAccessException e) {
+ throw new SchemaConversionException("XSLoader access error", e);
}
}