From 889e4b9eb853eb6fc2b9cc866c64910f789e2205 Mon Sep 17 00:00:00 2001 From: Willem Date: Thu, 6 Nov 2025 21:27:47 +0100 Subject: [PATCH] X4O: Some java cleanup and using new sax parser factory lookup --- .../java/org/x4o/xml/X4ODriverManager.java | 212 ++++++++---------- .../org/x4o/xml/conv/text/ByteConverter.java | 2 +- .../x4o/xml/conv/text/CharacterConverter.java | 2 +- .../x4o/xml/conv/text/DoubleConverter.java | 2 +- .../org/x4o/xml/conv/text/FloatConverter.java | 2 +- .../x4o/xml/conv/text/IntegerConverter.java | 2 +- .../org/x4o/xml/conv/text/LongConverter.java | 2 +- .../org/x4o/xml/el/X4OExpressionFactory.java | 16 +- .../java/org/x4o/xml/eld/EldModuleLoader.java | 22 +- .../org/x4o/xml/eld/EldModuleLoaderCore.java | 30 +-- .../org/x4o/xml/eld/lang/BeanElement.java | 2 +- .../eld/lang/ElementModuleBindingHandler.java | 4 +- .../org/x4o/xml/element/AbstractElement.java | 12 +- ...faultElementNamespaceInstanceProvider.java | 8 +- .../org/x4o/xml/io/AbstractX4OWriter.java | 7 +- .../java/org/x4o/xml/io/DefaultX4OReader.java | 1 - .../java/org/x4o/xml/io/DefaultX4OWriter.java | 131 +++++------ .../java/org/x4o/xml/io/X4OContentParser.java | 36 +-- .../java/org/x4o/xml/io/X4ODebugWriter.java | 2 +- .../org/x4o/xml/lang/DefaultX4OLanguage.java | 137 +++++------ .../xml/lang/DefaultX4OLanguageLoader.java | 41 ++-- .../x4o/xml/lang/X4OLanguageClassLoader.java | 32 ++- .../xml/lang/phase/X4OPhaseLanguageInit.java | 4 +- .../xml/lang/phase/X4OPhaseLanguageRead.java | 2 +- 24 files changed, 346 insertions(+), 365 deletions(-) diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/X4ODriverManager.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/X4ODriverManager.java index f2b4c04..999c5c6 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/X4ODriverManager.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/X4ODriverManager.java @@ -33,6 +33,10 @@ import java.util.List; import java.util.Map; import java.util.logging.Logger; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + import org.x4o.xml.lang.DefaultX4OLanguage; import org.x4o.xml.lang.DefaultX4OLanguageConfiguration; import org.x4o.xml.lang.X4OLanguage; @@ -51,10 +55,9 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.ext.DefaultHandler2; -import org.xml.sax.helpers.XMLReaderFactory; /** - * X4ODriverManager controls all the x4o driver and languages loaded in the classpath. + * X4ODriverManager controls all the x4o driver and languages loaded in the class-path. * * @author Willem Cazander * @version 1.0 Apr 6, 2013 @@ -65,57 +68,53 @@ public final class X4ODriverManager { private final static X4ODriverManager instance; private Logger logger = null; private volatile boolean reloadDrivers = true; - private Map classdrivers = null; - private Map defaultDrivers = null; - private Map> drivers = null; - private Map languageTasks = null; - + private Map classdrivers = null; + private Map defaultDrivers = null; + private Map> drivers = null; + private Map languageTasks = null; + private X4ODriverManager() { logger = Logger.getLogger(X4ODriverManager.class.getName()); - classdrivers = new HashMap(10); - defaultDrivers = new HashMap(10); - drivers = new HashMap>(10); - languageTasks = new HashMap(10); + classdrivers = new HashMap(10); + defaultDrivers = new HashMap(10); + drivers = new HashMap>(10); + languageTasks = new HashMap(10); } - + static { instance = new X4ODriverManager(); } - + private void registerX4OLanguageTask(String className) { try { - X4OLanguageTask task = (X4OLanguageTask)X4OLanguageClassLoader.newInstance(className); + X4OLanguageTask task = (X4OLanguageTask) X4OLanguageClassLoader.newInstance(className); if (languageTasks.containsKey(task.getId())) { - throw new RuntimeException("Can't add duplicate language task: "+task.getId()); + throw new RuntimeException("Can't add duplicate language task: " + task.getId()); } languageTasks.put(task.getId(), task); } catch (ClassNotFoundException e) { - throw new IllegalStateException(e.getMessage(),e); - } catch (InstantiationException e) { - throw new IllegalStateException(e.getMessage(),e); - } catch (IllegalAccessException e) { - throw new IllegalStateException(e.getMessage(),e); + throw new IllegalStateException(e.getMessage(), e); } } - + static public X4OLanguageTask getX4OLanguageTask(String taskId) { instance.lazyInit(); // fixme return instance.languageTasks.get(taskId); } - + static public List getX4OLanguageTasks() { instance.lazyInit(); // fixme return new ArrayList(instance.languageTasks.values()); } - + static protected String getDefaultLanguageVersion(String[] languages) { - if (languages==null || languages.length==0) { + if (languages == null || languages.length == 0) { return X4ODriver.DEFAULT_LANGUAGE_VERSION; } - String languageVersion = languages[languages.length-1]; + String languageVersion = languages[languages.length - 1]; return languageVersion; } - + static protected X4OPhaseManager getDefaultBuildPhaseManager() { DefaultX4OPhaseManager manager = new DefaultX4OPhaseManager(); new X4OPhaseLanguageInit().createPhases(manager); @@ -123,85 +122,61 @@ public final class X4ODriverManager { new X4OPhaseLanguageWrite().createPhases(manager); return manager; } - - static protected X4OLanguage getDefaultBuildLanguage(X4ODriver driver,String version) { - if (version==null) { + + static protected X4OLanguage getDefaultBuildLanguage(X4ODriver driver, String version) { + if (version == null) { version = driver.getLanguageVersionDefault(); } - DefaultX4OLanguage result = new DefaultX4OLanguage( - driver.buildLanguageConfiguration(), - driver.buildPhaseManager(), - driver.getLanguageName(), - version - ); + DefaultX4OLanguage result = new DefaultX4OLanguage(driver.buildLanguageConfiguration(), driver.buildPhaseManager(), driver.getLanguageName(), version); try { result.getPhaseManager().runPhases(result.createLanguageSession(), X4OPhaseType.INIT); // TODO: fix phase to interface T } catch (X4OPhaseException e) { - throw new RuntimeException(e); //TODO: change layer + throw new RuntimeException(e); // TODO: change layer } return result; } - + static protected X4OLanguageConfiguration getDefaultBuildLanguageConfiguration() { DefaultX4OLanguageConfiguration config = new DefaultX4OLanguageConfiguration(); config.fillDefaults(); X4OLanguageConfiguration result = config.createProxy(); return result; } - - /* - static public void setGlobalProperty(X4ODriver driver,String key,Object value) { - Map driverProperties = instance.globalProperties.get(driver.getLanguageName()); - if (driverProperties==null) { - driverProperties = new HashMap(20); - instance.globalProperties.put(driver.getLanguageName(), driverProperties); - } - String keyLimits[] = driver.getGlobalPropertyKeySet(); - for (int i=0;i driver) { - if (driver==null) { + if (driver == null) { throw new NullPointerException("Can't register null driver."); } - if (driver.getLanguageName()==null) { - throw new NullPointerException("Error in driver impl languageName is null in: "+driver.getClass()); + if (driver.getLanguageName() == null) { + throw new NullPointerException("Error in driver impl languageName is null in: " + driver.getClass()); } - if (driver.getLanguageName().length()==0) { - throw new IllegalArgumentException("Error in driver impl languageName is empty in: "+driver.getClass()); + if (driver.getLanguageName().length() == 0) { + throw new IllegalArgumentException("Error in driver impl languageName is empty in: " + driver.getClass()); } - if (driver.getLanguageVersions()==null) { - throw new NullPointerException("Error in driver impl languageVersions is null in: "+driver.getClass()); + if (driver.getLanguageVersions() == null) { + throw new NullPointerException("Error in driver impl languageVersions is null in: " + driver.getClass()); } - if (driver.getLanguageVersions().length==0) { - throw new IllegalArgumentException("Error in driver impl languageVersions is empty in: "+driver.getClass()); + if (driver.getLanguageVersions().length == 0) { + throw new IllegalArgumentException("Error in driver impl languageVersions is empty in: " + driver.getClass()); } instance.drivers.put(driver.getLanguageName(), driver); } - + static public void deregisterX4ODriver(X4ODriver driver) { - if (driver==null) { + if (driver == null) { throw new NullPointerException("Can't deregister null driver."); } - if (driver.getLanguageName()==null) { - throw new NullPointerException("Error in driver impl languageName is null in: "+driver.getClass()); + if (driver.getLanguageName() == null) { + throw new NullPointerException("Error in driver impl languageName is null in: " + driver.getClass()); } instance.drivers.remove(driver.getLanguageName()); } - + static public X4ODriver getX4ODriver(String language) { - if (language==null) { + if (language == null) { throw new NullPointerException("Can't provider driver for null language."); } - if (language.length()==0) { + if (language.length() == 0) { throw new IllegalArgumentException("Can't provider driver for empty language."); } if (instance.drivers.containsKey(language)) { @@ -209,12 +184,12 @@ public final class X4ODriverManager { } instance.lazyInit(); X4ODriver result = instance.createX4ODriver(language); - if (result==null) { - throw new IllegalArgumentException("Can't find driver for language: "+language); + if (result == null) { + throw new IllegalArgumentException("Can't find driver for language: " + language); } return result; } - + static public List getX4OLanguages() { instance.lazyInit(); List result = new ArrayList(10); @@ -223,15 +198,15 @@ public final class X4ODriverManager { Collections.sort(result); return result; } - + private void lazyInit() { - if (reloadDrivers==false) { + if (reloadDrivers == false) { return; } instance.loadLanguageDrivers(); reloadDrivers = false; } - + private X4ODriver createX4ODriver(String language) { String driverClassName = null; if (classdrivers.containsKey(language)) { @@ -239,71 +214,70 @@ public final class X4ODriverManager { } else if (defaultDrivers.containsKey(language)) { driverClassName = defaultDrivers.get(language); } - if (driverClassName==null) { + if (driverClassName == null) { return null; } try { Class driverClass = X4OLanguageClassLoader.loadClass(driverClassName); - //Constructor markedConstructor = driverClass.getDeclaredConstructor(new Class[]{ConstructorMarker.class}); - //X4ODriver driver = (X4ODriver)markedConstructor.newInstance(new Object[]{new ConstructorMarker()}); - X4ODriver driver = (X4ODriver)driverClass.newInstance(); + // Constructor markedConstructor = driverClass.getDeclaredConstructor(new Class[]{ConstructorMarker.class}); + // X4ODriver driver = (X4ODriver)markedConstructor.newInstance(new Object[]{new ConstructorMarker()}); + X4ODriver driver = (X4ODriver) X4OLanguageClassLoader.newInstance(driverClass); registerX4ODriver(driver); return driver; } catch (ClassNotFoundException e) { - throw new IllegalStateException(e.getMessage(),e); - } catch (InstantiationException e) { - throw new IllegalStateException(e.getMessage(),e); - } catch (IllegalAccessException e) { - throw new IllegalStateException(e.getMessage(),e); + throw new IllegalStateException(e.getMessage(), e); } } - + /* - * Class to make sure all driver instances are created by this manager instance. - - final public class ConstructorMarker { - private ConstructorMarker() { - } - }*/ - + * TODO: Class to make sure all driver instances are created by this manager instance. + * + * final public class ConstructorMarker { private ConstructorMarker() { } } + */ + /** * Loads all defined language drivers in classpath. */ private void loadLanguageDrivers() { - logger.finer("loading x4o drivers from: "+X4O_DRIVERS_RESOURCE); + logger.finer("loading x4o drivers from: " + X4O_DRIVERS_RESOURCE); try { Enumeration e = Thread.currentThread().getContextClassLoader().getResources(X4O_DRIVERS_RESOURCE); - while(e.hasMoreElements()) { + while (e.hasMoreElements()) { URL u = e.nextElement(); loadDriversXml(u.openStream()); } - e = Thread.currentThread().getContextClassLoader().getResources("/"+X4O_DRIVERS_RESOURCE); - while(e.hasMoreElements()) { + e = Thread.currentThread().getContextClassLoader().getResources("/" + X4O_DRIVERS_RESOURCE); + while (e.hasMoreElements()) { URL u = e.nextElement(); loadDriversXml(u.openStream()); } } catch (Exception e) { - throw new IllegalStateException(e.getMessage(),e); + throw new IllegalStateException(e.getMessage(), e); } } - + /** * Parser xml inputstream and add into drivers and defaultDrivers lists. - * @param in The inputstream to parser. + * + * @param in The inputstream to parser. * @throws IOException * @throws SAXException + * @throws ParserConfigurationException */ - private void loadDriversXml(InputStream in) throws IOException, SAXException { - if (in==null) { + private void loadDriversXml(InputStream in) throws IOException, SAXException, ParserConfigurationException { + if (in == null) { throw new NullPointerException("Can't parse null input stream"); } DriversTagHandler xth = new DriversTagHandler(); - XMLReader saxParser = XMLReaderFactory.createXMLReader(); - saxParser.setContentHandler(xth); - saxParser.setProperty("http://xml.org/sax/properties/lexical-handler", xth); - saxParser.setProperty("http://xml.org/sax/properties/declaration-handler",xth); + SAXParserFactory factory = SAXParserFactory.newInstance(); + factory.setNamespaceAware(true); + SAXParser parser = factory.newSAXParser(); + XMLReader reader = parser.getXMLReader(); + reader.setContentHandler(xth); + reader.setProperty("http://xml.org/sax/properties/lexical-handler", xth); + reader.setProperty("http://xml.org/sax/properties/declaration-handler", xth); try { - saxParser.parse(new InputSource(in)); + reader.parse(new InputSource(in)); } finally { in.close(); } @@ -311,26 +285,26 @@ public final class X4ODriverManager { private class DriversTagHandler extends DefaultHandler2 { @Override - public void startElement(String namespaceUri, String tag, String qName,Attributes attr) throws SAXException { + public void startElement(String namespaceUri, String tag, String qName, Attributes attr) throws SAXException { if ("drivers".equals(tag)) { String version = attr.getValue("version"); - logger.finest("Version attribute: "+version); + logger.finest("Version attribute: " + version); } else if ("driver".equals(tag)) { String language = attr.getValue("language"); String className = attr.getValue("className"); - logger.finest("Driver className: "+className+" for language: "+language); - if (classdrivers.containsKey(className)==false) { - classdrivers.put(language,className); + logger.finest("Driver className: " + className + " for language: " + language); + if (classdrivers.containsKey(className) == false) { + classdrivers.put(language, className); } } else if ("defaultDriver".equals(tag)) { String language = attr.getValue("language"); - logger.finest("DefaultDriver language: "+language); - if (defaultDrivers.containsKey(language)==false) { - defaultDrivers.put(language,language); + logger.finest("DefaultDriver language: " + language); + if (defaultDrivers.containsKey(language) == false) { + defaultDrivers.put(language, language); } } else if ("languageTask".equals(tag)) { String className = attr.getValue("className"); - logger.finest("Language task className: "+className); + logger.finest("Language task className: " + className); X4ODriverManager.instance.registerX4OLanguageTask(className); } } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/ByteConverter.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/ByteConverter.java index c190cac..70f9b86 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/ByteConverter.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/ByteConverter.java @@ -57,7 +57,7 @@ public class ByteConverter extends AbstractStringObjectConverter { * @throws ObjectConverterException When conversion fails. */ public Object convertStringTo(String str, Locale locale) throws ObjectConverterException { - return new Byte(str); + return Byte.valueOf(str); } /** diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/CharacterConverter.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/CharacterConverter.java index 79aeead..5ca6ad8 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/CharacterConverter.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/CharacterConverter.java @@ -57,7 +57,7 @@ public class CharacterConverter extends AbstractStringObjectConverter { * @throws ObjectConverterException When conversion fails. */ public Object convertStringTo(String str, Locale locale) throws ObjectConverterException { - return new Character(str.charAt(0)); + return Character.valueOf(str.charAt(0)); } /** diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/DoubleConverter.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/DoubleConverter.java index 3c00da0..57207cf 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/DoubleConverter.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/DoubleConverter.java @@ -57,7 +57,7 @@ public class DoubleConverter extends AbstractStringObjectConverter { * @throws ObjectConverterException When conversion fails. */ public Object convertStringTo(String str, Locale locale) throws ObjectConverterException { - return new Double(str); + return Double.valueOf(str); } /** diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/FloatConverter.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/FloatConverter.java index 37913b7..e7720e5 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/FloatConverter.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/FloatConverter.java @@ -57,7 +57,7 @@ public class FloatConverter extends AbstractStringObjectConverter { * @throws ObjectConverterException When conversion fails. */ public Object convertStringTo(String str, Locale locale) throws ObjectConverterException { - return new Float(str); + return Float.valueOf(str); } /** diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/IntegerConverter.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/IntegerConverter.java index 1c03095..e941dd3 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/IntegerConverter.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/IntegerConverter.java @@ -57,7 +57,7 @@ public class IntegerConverter extends AbstractStringObjectConverter { * @throws ObjectConverterException When conversion fails. */ public Object convertStringTo(String str, Locale locale) throws ObjectConverterException { - return new Integer(str); + return Integer.valueOf(str); } /** diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/LongConverter.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/LongConverter.java index 09ec814..fa6c9d7 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/LongConverter.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/conv/text/LongConverter.java @@ -57,7 +57,7 @@ public class LongConverter extends AbstractStringObjectConverter { * @throws ObjectConverterException When conversion fails. */ public Object convertStringTo(String str, Locale locale) throws ObjectConverterException { - return new Long(str); + return Long.valueOf(str); } /** diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/el/X4OExpressionFactory.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/el/X4OExpressionFactory.java index e03a570..d7c0de0 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/el/X4OExpressionFactory.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/el/X4OExpressionFactory.java @@ -42,25 +42,23 @@ public class X4OExpressionFactory { ExpressionFactory result = null; try { Class expressionFactoryClass = X4OLanguageClassLoader.loadClass(EL_FACTORY_IMPL_APACHE); - result = (ExpressionFactory) expressionFactoryClass.newInstance(); - } catch (Exception e) { + result = X4OLanguageClassLoader.newInstance(ExpressionFactory.class, expressionFactoryClass); + } catch (ClassNotFoundException e) { try { Class expressionFactoryClass = X4OLanguageClassLoader.loadClass(EL_FACTORY_IMPL_ODYSSEUS); - result = (ExpressionFactory) expressionFactoryClass.newInstance(); - } catch (Exception ee) { + result = X4OLanguageClassLoader.newInstance(ExpressionFactory.class, expressionFactoryClass); + } catch (ClassNotFoundException ee) { throw new RuntimeException("Could not load ExpressionFactory tried: "+EL_FACTORY_IMPL_APACHE+" and "+EL_FACTORY_IMPL_ODYSSEUS+" but could not load one of them."); } } return result; } - static public ELContext createELContext(Class elContextClass) { - ELContext result = null; + static public ELContext createELContext(Class elContextClass) { try { - result = (ELContext)X4OLanguageClassLoader.newInstance(elContextClass); - } catch (Exception e) { + return X4OLanguageClassLoader.newInstance(ELContext.class, elContextClass); + } catch (ClassNotFoundException e) { throw new RuntimeException("Could not create instance of ELContext: "+e.getMessage(),e); } - return result; } } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/EldModuleLoader.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/EldModuleLoader.java index 079ef85..e02e45d 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/EldModuleLoader.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/EldModuleLoader.java @@ -49,9 +49,9 @@ import org.xml.sax.SAXException; */ public class EldModuleLoader implements X4OLanguageModuleLoader { - private Logger logger = null; - private String eldResource = null; - private boolean isEldCore = false; + private final Logger logger; + private final String eldResource; + private final boolean isEldCore; /** The EL key to access the parent language module. */ public static final String EL_PARENT_LANGUAGE_MODULE = "parentLanguageModule"; @@ -65,12 +65,12 @@ public class EldModuleLoader implements X4OLanguageModuleLoader { * @param isEldCore If true then load CEL else load ELD. */ public EldModuleLoader(String eldResource,boolean isEldCore) { - if (eldResource==null) { + if (eldResource == null) { throw new NullPointerException("Can't load null eld resource."); } - logger = Logger.getLogger(EldModuleLoader.class.getName()); - this.eldResource=eldResource; - this.isEldCore=isEldCore; + this.logger = Logger.getLogger(EldModuleLoader.class.getName()); + this.eldResource = eldResource; + this.isEldCore = isEldCore; } /** @@ -80,8 +80,8 @@ public class EldModuleLoader implements X4OLanguageModuleLoader { * @throws X4OLanguageModuleLoaderException When eld language could not be loaded. * @see org.x4o.xml.lang.X4OLanguageModuleLoader#loadLanguageModule(org.x4o.xml.lang.X4OLanguageLocal, org.x4o.xml.lang.X4OLanguageModuleLocal) */ - public void loadLanguageModule(X4OLanguageLocal language,X4OLanguageModuleLocal languageModule) throws X4OLanguageModuleLoaderException { - logger.fine("Loading name eld file from resource: "+eldResource); + public void loadLanguageModule(X4OLanguageLocal language, X4OLanguageModuleLocal languageModule) throws X4OLanguageModuleLoaderException { + logger.fine("Loading name eld file from resource: " + eldResource); try { X4ODriver driver = null; if (isEldCore) { @@ -97,9 +97,7 @@ public class EldModuleLoader implements X4OLanguageModuleLoader { reader.addELBeanInstance(EL_PARENT_LANGUAGE, language); reader.addELBeanInstance(EL_PARENT_LANGUAGE_MODULE, languageModule); - //language.createLanguageSession() - - reader.setProperty(DefaultX4OReader.DEBUG_OUTPUT_HANDLER, reader); + reader.setProperty(DefaultX4OReader.DEBUG_OUTPUT_HANDLER, null); //TODO: if (language.getLanguageConfiguration().getLanguagePropertyBoolean(X4OLanguageProperty.DEBUG_OUTPUT_ELD_PARSER)) { // eldLang.setX4ODebugWriter(elementLanguage.getLanguageConfiguration().getX4ODebugWriter()); diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/EldModuleLoaderCore.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/EldModuleLoaderCore.java index 9fc5f9b..ccca958 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/EldModuleLoaderCore.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/EldModuleLoaderCore.java @@ -210,21 +210,17 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader { logger.finer("Creating "+language.getLanguageName()+" namespace."); ElementNamespace namespace; try { - namespace = (ElementNamespace)X4OLanguageClassLoader.newInstance(language.getLanguageConfiguration().getDefaultElementNamespace()); - } catch (InstantiationException e) { + namespace = X4OLanguageClassLoader.newInstance(ElementNamespace.class, language.getLanguageConfiguration().getDefaultElementNamespace()); + } catch (ClassNotFoundException e) { throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e); - } catch (IllegalAccessException e) { - throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e); - } + } try { - namespace.setElementNamespaceInstanceProvider((ElementNamespaceInstanceProvider) - X4OLanguageClassLoader.newInstance(language.getLanguageConfiguration().getDefaultElementNamespaceInstanceProvider()) + namespace.setElementNamespaceInstanceProvider( + X4OLanguageClassLoader.newInstance(ElementNamespaceInstanceProvider.class, language.getLanguageConfiguration().getDefaultElementNamespaceInstanceProvider()) ); - } catch (InstantiationException e) { + } catch (ClassNotFoundException e) { throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e); - } catch (IllegalAccessException e) { - throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e); - } + } namespace.setId(id); namespace.setUri(uri); @@ -236,15 +232,13 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader { private ElementClass createElementClass(X4OLanguage language,String tag,Class objectClass,Class elementClass,String description) throws X4OLanguageModuleLoaderException { try { - ElementClass result = (ElementClass)X4OLanguageClassLoader.newInstance(language.getLanguageConfiguration().getDefaultElementClass()); + ElementClass result = X4OLanguageClassLoader.newInstance(ElementClass.class, language.getLanguageConfiguration().getDefaultElementClass()); result.setId(tag); result.setObjectClass(objectClass); result.setElementClass(elementClass); result.setDescription(description); return result; - } catch (InstantiationException e) { - throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e); - } catch (IllegalAccessException e) { + } catch (ClassNotFoundException e) { throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e); } } @@ -260,7 +254,7 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader { */ private ElementClassAttribute createElementClassAttribute(X4OLanguage language,String name,boolean required,ObjectConverter converter) throws X4OLanguageModuleLoaderException { try { - ElementClassAttribute result = (ElementClassAttribute)X4OLanguageClassLoader.newInstance(language.getLanguageConfiguration().getDefaultElementClassAttribute()); + ElementClassAttribute result = X4OLanguageClassLoader.newInstance(ElementClassAttribute.class, language.getLanguageConfiguration().getDefaultElementClassAttribute()); result.setId(name); if (required) { result.setRequired(required); @@ -269,9 +263,7 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader { result.setObjectConverter(converter); } return result; - } catch (InstantiationException e) { - throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e); - } catch (IllegalAccessException e) { + } catch (ClassNotFoundException e) { throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e); } } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/lang/BeanElement.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/lang/BeanElement.java index 98e545f..dd2c486 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/lang/BeanElement.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/lang/BeanElement.java @@ -59,7 +59,7 @@ public class BeanElement extends AbstractElement { try { Class beanClass = X4OLanguageClassLoader.loadClass(className); if (constructorArguments.isEmpty()) { - setElementObject(beanClass.newInstance()); + setElementObject(X4OLanguageClassLoader.newInstance(beanClass)); } else { Class[] arguClass = new Class[constructorArguments.size()]; constructorArguments.toArray(arguClass); diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/lang/ElementModuleBindingHandler.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/lang/ElementModuleBindingHandler.java index c15424f..9f2953f 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/lang/ElementModuleBindingHandler.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/eld/lang/ElementModuleBindingHandler.java @@ -131,8 +131,8 @@ public class ElementModuleBindingHandler extends AbstractElementBindingHandler< } try { - elementNamespace.setElementNamespaceInstanceProvider((ElementNamespaceInstanceProvider)X4OLanguageClassLoader.newInstance(childElement.getLanguageSession().getLanguage().getLanguageConfiguration().getDefaultElementNamespaceInstanceProvider())); - } catch (Exception e) { + elementNamespace.setElementNamespaceInstanceProvider(X4OLanguageClassLoader.newInstance(ElementNamespaceInstanceProvider.class, childElement.getLanguageSession().getLanguage().getLanguageConfiguration().getDefaultElementNamespaceInstanceProvider())); + } catch (ClassNotFoundException e) { throw new ElementBindingHandlerException("Error loading: "+e.getMessage(),e); } try { diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/element/AbstractElement.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/element/AbstractElement.java index 2b67851..994291a 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/element/AbstractElement.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/element/AbstractElement.java @@ -132,10 +132,10 @@ public abstract class AbstractElement implements Element { */ public void doCharacters(String characters) throws ElementException { try { - Element e = (Element)X4OLanguageClassLoader.newInstance(getLanguageSession().getLanguage().getLanguageConfiguration().getDefaultElementBodyCharacters()); + Element e = X4OLanguageClassLoader.newInstance(Element.class, getLanguageSession().getLanguage().getLanguageConfiguration().getDefaultElementBodyCharacters()); e.setElementObject(characters); addChild(e); - } catch (Exception exception) { + } catch (ClassNotFoundException exception) { throw new ElementException(exception); } } @@ -145,10 +145,10 @@ public abstract class AbstractElement implements Element { */ public void doComment(String comment) throws ElementException { try { - Element e = (Element)X4OLanguageClassLoader.newInstance(getLanguageSession().getLanguage().getLanguageConfiguration().getDefaultElementBodyComment()); + Element e = X4OLanguageClassLoader.newInstance(Element.class, getLanguageSession().getLanguage().getLanguageConfiguration().getDefaultElementBodyComment()); e.setElementObject(comment); addChild(e); - } catch (Exception exception) { + } catch (ClassNotFoundException exception) { throw new ElementException(exception); } } @@ -158,10 +158,10 @@ public abstract class AbstractElement implements Element { */ public void doIgnorableWhitespace(String space) throws ElementException { try { - Element e = (Element)X4OLanguageClassLoader.newInstance(getLanguageSession().getLanguage().getLanguageConfiguration().getDefaultElementBodyWhitespace()); + Element e = X4OLanguageClassLoader.newInstance(Element.class, getLanguageSession().getLanguage().getLanguageConfiguration().getDefaultElementBodyWhitespace()); e.setElementObject(space); addChild(e); - } catch (Exception exception) { + } catch (ClassNotFoundException exception) { throw new ElementException(exception); } } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/element/DefaultElementNamespaceInstanceProvider.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/element/DefaultElementNamespaceInstanceProvider.java index 34658e6..83296e4 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/element/DefaultElementNamespaceInstanceProvider.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/element/DefaultElementNamespaceInstanceProvider.java @@ -86,13 +86,9 @@ public class DefaultElementNamespaceInstanceProvider implements ElementNamespace if (elementClass.getObjectClass()!=null) { element.setElementObject(X4OLanguageClassLoader.newInstance(elementClass.getObjectClass())); } - } catch (InstantiationException e) { + } catch (ClassNotFoundException e) { throw new ElementNamespaceInstanceProviderException(this,"Error while providing Element: "+e.getMessage(),e); - } catch (IllegalAccessException e) { - throw new ElementNamespaceInstanceProviderException(this,"Error while providing Element: "+e.getMessage(),e); - } /*catch (ClassNotFoundException e) { - throw new ElementNamespaceInstanceProviderException(this,"Error while providing Element: "+e.getMessage(),e); - } */ + } element.setElementClass(elementClass); element.setLanguageSession(languageSession); return element; diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OWriter.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OWriter.java index 960a5c3..3289c8e 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OWriter.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OWriter.java @@ -29,6 +29,7 @@ import java.io.OutputStream; import org.x4o.xml.element.Element; import org.x4o.xml.lang.X4OLanguage; +import org.x4o.xml.lang.X4OLanguageClassLoader; import org.x4o.xml.lang.X4OLanguageSession; import org.xml.sax.SAXException; @@ -49,10 +50,8 @@ public abstract class AbstractX4OWriter extends AbstractX4OWriterSession i X4OLanguageSession context = createLanguageSession(); Element rootElement = null; try { - rootElement = (Element)context.getLanguage().getLanguageConfiguration().getDefaultElement().newInstance(); - } catch (InstantiationException e) { - throw new SAXException(e); - } catch (IllegalAccessException e) { + rootElement = X4OLanguageClassLoader.newInstance(Element.class, context.getLanguage().getLanguageConfiguration().getDefaultElement()); + } catch (ClassNotFoundException e) { throw new SAXException(e); } rootElement.setElementObject(object); diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/DefaultX4OReader.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/DefaultX4OReader.java index 1e3c518..c6a042d 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/DefaultX4OReader.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/DefaultX4OReader.java @@ -40,7 +40,6 @@ import org.x4o.sax3.io.SAX3PropertyConfig.PropertyConfigItem; import org.x4o.xml.lang.X4OLanguage; import org.x4o.xml.lang.X4OLanguageSession; import org.x4o.xml.lang.X4OLanguageSessionLocal; -import org.x4o.xml.lang.phase.X4OPhaseException; import org.x4o.xml.lang.phase.X4OPhaseType; import org.xml.sax.EntityResolver; import org.xml.sax.ErrorHandler; diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/DefaultX4OWriter.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/DefaultX4OWriter.java index 671f0c1..529a3ef 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/DefaultX4OWriter.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/DefaultX4OWriter.java @@ -64,11 +64,12 @@ import org.xml.sax.helpers.AttributesImpl; public class DefaultX4OWriter extends AbstractX4OWriter { private final SAX3PropertyConfig propertyConfig; + private boolean schemaUriPrint; + private String schemaUriRoot; + private final static AttributeEntryComparator ATTR_ENTRY_COMPARATOR = new AttributeEntryComparator(); private final static String PROPERTY_CONTEXT_PREFIX = SAX3PropertyConfig.X4O_PROPERTIES_PREFIX+"writer/x4o/"; - public final static SAX3PropertyConfig DEFAULT_PROPERTY_CONFIG; - public final static String OUTPUT_STREAM = PROPERTY_CONTEXT_PREFIX+"output/stream"; public final static String OUTPUT_XDBX = PROPERTY_CONTEXT_PREFIX+"output/xdbx"; public final static String SCHEMA_PRINT = PROPERTY_CONTEXT_PREFIX+"schema/print"; @@ -95,7 +96,7 @@ public class DefaultX4OWriter extends AbstractX4OWriter { */ public DefaultX4OWriter(X4OLanguage language) { super(language); - propertyConfig = new SAX3PropertyConfig(DEFAULT_PROPERTY_CONFIG,PROPERTY_CONTEXT_PREFIX); + propertyConfig = new SAX3PropertyConfig(DEFAULT_PROPERTY_CONFIG, PROPERTY_CONTEXT_PREFIX); } /** @@ -108,7 +109,7 @@ public class DefaultX4OWriter extends AbstractX4OWriter { /** * @see org.x4o.xml.io.X4OWriterSession#writeSession(org.x4o.xml.lang.X4OLanguageSession, java.io.OutputStream) */ - public void writeSession(X4OLanguageSession languageSession,OutputStream output) throws X4OConnectionException,SAXException,IOException { + public void writeSession(X4OLanguageSession languageSession, OutputStream output) throws X4OConnectionException,SAXException,IOException { setProperty(OUTPUT_STREAM, output); addPhaseSkip(X4OPhaseLanguageWrite.WRITE_RELEASE); debugStart(languageSession, DEBUG_OUTPUT_HANDLER, DEBUG_OUTPUT_STREAM, DEBUG_OUTPUT_STREAM_CLOSE); @@ -120,23 +121,20 @@ public class DefaultX4OWriter extends AbstractX4OWriter { runWrite(languageSession); } - private AttributeEntryComparator attributeEntryComparator = new AttributeEntryComparator(); - private boolean schemaUriPrint; - private String schemaUriRoot; - private void runWrite(X4OLanguageSession languageSession) throws X4OConnectionException { OutputStream out = (OutputStream)getProperty(OUTPUT_STREAM); try { String encoding = getPropertyConfig().getPropertyString(SAX3WriterXml.OUTPUT_ENCODING); schemaUriPrint = getPropertyConfig().getPropertyBoolean(SCHEMA_PRINT); schemaUriRoot = getPropertyConfig().getPropertyString(SCHEMA_ROOT_URI); - if (encoding==null) { encoding = SAX3XMLConstants.XML_DEFAULT_ENCODING; } - + if (encoding == null) { + encoding = SAX3XMLConstants.XML_DEFAULT_ENCODING; + } Element root = languageSession.getRootElement(); - if (schemaUriRoot==null) { + if (schemaUriRoot == null) { String rootUri = findElementUri(root); ElementNamespace ns = languageSession.getLanguage().findElementNamespace(rootUri); - if (ns!=null) { + if (ns != null) { schemaUriRoot = ns.getSchemaUri(); } } @@ -153,9 +151,9 @@ public class DefaultX4OWriter extends AbstractX4OWriter { } writer.startDocument(); - Map prefixes = new HashMap(); + Map prefixes = new HashMap<>(); startPrefixTree(root,prefixes); - for (String uri:prefixes.keySet()) { + for (String uri : prefixes.keySet()) { String prefix = prefixes.get(uri); writer.startPrefixMapping(prefix, uri); } @@ -182,20 +180,20 @@ public class DefaultX4OWriter extends AbstractX4OWriter { } } - private void startPrefixTree(Element element,Map result) throws SAXException { + private void startPrefixTree(Element element, Map result) throws SAXException { String elementUri = findElementUri(element); - if (result.containsKey(elementUri)==false) { - String elementUriPrefix = findNamespacePrefix(element,elementUri); + if (result.containsKey(elementUri) == false) { + String elementUriPrefix = findNamespacePrefix(element, elementUri); result.put(elementUri, elementUriPrefix); } - for (Element e:element.getChilderen()) { + for (Element e : element.getChilderen()) { startPrefixTree(e,result); } } private List getProperties(Class objectClass) { List result = new ArrayList(); - for (Method m:objectClass.getMethods()) { + for (Method m : objectClass.getMethods()) { Class[] types = m.getParameterTypes(); if (types.length != 0) { continue; @@ -206,78 +204,81 @@ public class DefaultX4OWriter extends AbstractX4OWriter { if (m.getName().startsWith("get")==false) { continue; } - String name = m.getName().substring(3,4).toLowerCase()+m.getName().substring(4); + String name = m.getName().substring(3, 4).toLowerCase() + m.getName().substring(4); result.add(name); - } return result; } - class AttributeEntry { - String id; - String value; - Integer writeOrder; + + static final class AttributeEntry { + final String id; + final String value; + final Integer writeOrder; + + public AttributeEntry(String id, String value, Integer writeOrder) { + this.id = id; + this.value = value; + this.writeOrder = writeOrder; + } } - class AttributeEntryComparator implements Comparator { + + static final class AttributeEntryComparator implements Comparator { + + @Override public int compare(AttributeEntry o1, AttributeEntry o2) { return o1.writeOrder.compareTo(o2.writeOrder); } } - private void writeTree(ContentWriter writer,Element element,boolean isRoot) throws SAXException, ElementObjectPropertyValueException { + + private void writeTree(ContentWriter writer, Element element, boolean isRoot) throws SAXException, ElementObjectPropertyValueException { List attr = new ArrayList(20); - if (element.getElementClass().getAutoAttributes()!=null && element.getElementClass().getAutoAttributes()==false) { + if (element.getElementClass().getAutoAttributes() != null && element.getElementClass().getAutoAttributes() == false) { for (ElementClassAttribute eca:element.getElementClass().getElementClassAttributes()) { - if (eca.getRunBeanValue()!=null && eca.getRunBeanValue()==false) { + if (eca.getRunBeanValue() != null && eca.getRunBeanValue() == false) { continue; } - - Object value = element.getLanguageSession().getElementObjectPropertyValue().getProperty(element.getElementObject(),eca.getId()); - if (value==null) { + Object value = element.getLanguageSession().getElementObjectPropertyValue().getProperty(element.getElementObject(), eca.getId()); + if (value == null) { continue; } - AttributeEntry e = new AttributeEntry(); - e.id = eca.getId(); - e.value = ""+value; - e.writeOrder = calcOrderNumber(e.id,eca.getWriteOrder()); + AttributeEntry e = new AttributeEntry(eca.getId(), ""+value, calcOrderNumber(eca.getId(),eca.getWriteOrder())); attr.add(e); } } else { - for (String p:getProperties(element.getElementObject().getClass())) { + for (String p : getProperties(element.getElementObject().getClass())) { Integer writeOrder = null; ElementClassAttribute eca = element.getElementClass().getElementClassAttributeByName(p); - if (eca!=null) { + if (eca != null) { writeOrder = eca.getWriteOrder(); } - if (eca!=null && eca.getRunBeanValue()!=null && eca.getRunBeanValue()) { + if (eca != null && eca.getRunBeanValue() != null && eca.getRunBeanValue()) { continue; } boolean writeValue = true; - for (ElementInterface ei:element.getLanguageSession().getLanguage().findElementInterfaces(element.getElementObject().getClass())) { + for (ElementInterface ei : element.getLanguageSession().getLanguage().findElementInterfaces(element.getElementObject().getClass())) { eca = ei.getElementClassAttributeByName(p); - if (eca!=null && writeOrder==null) { + if (eca != null && writeOrder == null) { writeOrder = eca.getWriteOrder(); // add interface but allow override local } - if (eca!=null && eca.getRunBeanValue()!=null && eca.getRunBeanValue()==false) { + if (eca != null && eca.getRunBeanValue() != null && eca.getRunBeanValue() == false) { writeValue = false; break; } } - if (writeValue==false) { + if (writeValue == false) { continue; } // TODO: check attr see reader - Object value = element.getLanguageSession().getElementObjectPropertyValue().getProperty(element.getElementObject(),p); - if (value==null) { + Object value = element.getLanguageSession().getElementObjectPropertyValue().getProperty(element.getElementObject(), p); + if (value == null) { continue; } if (value instanceof List || value instanceof Collection) { continue; // TODO; filter on type of childeren } - AttributeEntry e = new AttributeEntry(); - e.id = p; - e.value = ""+value; - e.writeOrder = calcOrderNumber(e.id,writeOrder); + AttributeEntry e = new AttributeEntry(p, ""+value, calcOrderNumber(p,writeOrder)); attr.add(e); } } @@ -291,8 +292,8 @@ public class DefaultX4OWriter extends AbstractX4OWriter { } // Sort attributes in natural order of localName and add to attributes - Collections.sort(attr, attributeEntryComparator); - for (int i=0;i extends AbstractX4OWriter { // Write Element tree recursive. String elementUri = findElementUri(element); writer.startElement(elementUri, element.getElementClass().getId(), "", atts); - for (Element e:element.getChilderen()) { - writeTree(writer,e,false); + for (Element e : element.getChilderen()) { + writeTree(writer, e, false); } writer.endElement(elementUri, element.getElementClass().getId(), ""); } // TODO: move to defaults layer so visible in docs. - private Integer calcOrderNumber(String name,Integer orderNumberOverride) { - if (orderNumberOverride!=null) { + private Integer calcOrderNumber(String name, Integer orderNumberOverride) { + if (orderNumberOverride != null) { return orderNumberOverride; } - if (name==null) { + if (name == null) { throw new NullPointerException("Can't calculate order of null name."); } int nameSize = name.length(); - if (nameSize==1) { + if (nameSize == 1) { return (name.charAt(0) * 1000); } - if (nameSize==2) { + if (nameSize == 2) { return (name.charAt(0) * 1000) + (name.charAt(1) * 100); } - if (nameSize==3) { + if (nameSize == 3) { return (name.charAt(0) * 1000) + (name.charAt(1) * 100) + (name.charAt(2) * 10); } - if (nameSize>3) { + if (nameSize > 3) { return (name.charAt(0) * 1000) + (name.charAt(1) * 100) + (name.charAt(2) * 10) + (name.charAt(3) * 1); } throw new IllegalArgumentException("Can't calculate order of empty name."); } private String findElementUri(Element e) { - for (X4OLanguageModule mod:e.getLanguageSession().getLanguage().getLanguageModules()) { - for (ElementNamespace c:mod.getElementNamespaces()) { + for (X4OLanguageModule mod : e.getLanguageSession().getLanguage().getLanguageModules()) { + for (ElementNamespace c : mod.getElementNamespaces()) { ElementClass ec = c.getElementClass(e.getElementClass().getId()); - if (ec!=null) { + if (ec != null) { return c.getUri(); } } @@ -342,9 +343,9 @@ public class DefaultX4OWriter extends AbstractX4OWriter { return null; } - private String findNamespacePrefix(Element e,String uri) { + private String findNamespacePrefix(Element e, String uri) { ElementNamespace ns = e.getLanguageSession().getLanguage().findElementNamespace(uri); - if (ns.getPrefixMapping()!=null) { + if (ns.getPrefixMapping() != null) { return ns.getPrefixMapping(); } return ns.getId(); diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OContentParser.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OContentParser.java index d4e79a4..da0e1c4 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OContentParser.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OContentParser.java @@ -29,7 +29,6 @@ import org.x4o.xml.lang.X4OLanguageSession; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; import java.io.IOException; import java.io.InputStream; @@ -38,6 +37,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + /** * X4OContentParser Runs the SAX parser with the X4OContentHandler. * @@ -56,7 +59,7 @@ public class X4OContentParser { return propertyConfig; } - public void parse(X4OLanguageSession languageSession) throws SAXException, IOException { + public void parse(X4OLanguageSession languageSession) throws SAXException, IOException, ParserConfigurationException { // Group debug config property messages if (languageSession.hasX4ODebugWriter()) { languageSession.getX4ODebugWriter().debugSAXConfigStart(); @@ -70,7 +73,7 @@ public class X4OContentParser { } } - private void parseSax(X4OLanguageSession languageSession) throws SAXException, IOException { + private void parseSax(X4OLanguageSession languageSession) throws SAXException, IOException, ParserConfigurationException { // If xsd caching is needed this should be the way //XMLParserConfiguration config = new XIncludeAwareParserConfiguration(); //config.setProperty("http://apache.org/xml/properties/internal/grammar-pool",myFullGrammarPool); @@ -78,19 +81,22 @@ public class X4OContentParser { // Create Sax parser with x4o tag handler X4OContentHandler xth = new X4OContentHandler(languageSession,getPropertyConfig()); - XMLReader saxParser = XMLReaderFactory.createXMLReader(); - saxParser.setErrorHandler(new X4OErrorHandler(languageSession,getPropertyConfig())); - saxParser.setEntityResolver(new X4OEntityResolver(languageSession,getPropertyConfig())); - saxParser.setContentHandler(xth); - saxParser.setProperty("http://xml.org/sax/properties/lexical-handler", xth); - saxParser.setProperty("http://xml.org/sax/properties/declaration-handler",xth); + SAXParserFactory factory = SAXParserFactory.newInstance(); + factory.setNamespaceAware(true); + SAXParser parser = factory.newSAXParser(); + XMLReader reader = parser.getXMLReader(); + reader.setErrorHandler(new X4OErrorHandler(languageSession,getPropertyConfig())); + reader.setEntityResolver(new X4OEntityResolver(languageSession,getPropertyConfig())); + reader.setContentHandler(xth); + reader.setProperty("http://xml.org/sax/properties/lexical-handler", xth); + reader.setProperty("http://xml.org/sax/properties/declaration-handler",xth); // Set properties and optional Map saxParserProperties = getSAXParserProperties(languageSession); for (Map.Entry entry:saxParserProperties.entrySet()) { String name = entry.getKey(); Object value= entry.getValue(); - saxParser.setProperty(name, value); + reader.setProperty(name, value); debugMessage("property",name,value,languageSession); } Map saxParserPropertiesOptional = getSAXParserPropertiesOptional(languageSession); @@ -98,7 +104,7 @@ public class X4OContentParser { String name = entry.getKey(); Object value= entry.getValue(); try { - saxParser.setProperty(name, value); + reader.setProperty(name, value); debugMessage("optional-property",name,value,languageSession); } catch (SAXException e) { debugMessageLog("Could not set optional SAX property: "+name+" to: "+value+" error: "+e.getMessage(),languageSession); @@ -109,14 +115,14 @@ public class X4OContentParser { Map features = getSAXParserFeatures(languageSession); for (String key:features.keySet()) { Boolean value=features.get(key); - saxParser.setFeature(key, value); + reader.setFeature(key, value); debugMessage("feature",key,value,languageSession); } Map featuresOptional = getSAXParserFeaturesOptional(languageSession); for (String key:featuresOptional.keySet()) { Boolean value=featuresOptional.get(key); try { - saxParser.setFeature(key, value); + reader.setFeature(key, value); debugMessage("optional-feature",key,value,languageSession); } catch (SAXException e) { debugMessageLog("Could not set optional SAX feature: "+key+" to: "+value+" error: "+e.getMessage(),languageSession); @@ -126,7 +132,7 @@ public class X4OContentParser { // check for required features List requiredFeatures = getSAXParserFeaturesRequired(languageSession); for (String requiredFeature:requiredFeatures) { - if (saxParser.getFeature(requiredFeature)==false) { + if (reader.getFeature(requiredFeature)==false) { throw new IllegalStateException("Missing required feature: "+requiredFeature); } debugMessage("required",requiredFeature,"true",languageSession); @@ -153,7 +159,7 @@ public class X4OContentParser { } try { - saxParser.parse(input); + reader.parse(input); } finally { if (inputStream!=null) { inputStream.close(); diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4ODebugWriter.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4ODebugWriter.java index 246f41d..728eb5e 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4ODebugWriter.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4ODebugWriter.java @@ -176,7 +176,7 @@ public class X4ODebugWriter { StringBuilder buf = new StringBuilder(); buf.append("0x"); for (char c:newline.toCharArray()) { - Integer i = new Integer(c); + Integer i = Integer.valueOf(c); if (i<16) { buf.append('0'); } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguage.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguage.java index 5e66951..6103267 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguage.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguage.java @@ -48,30 +48,30 @@ import org.x4o.xml.lang.phase.X4OPhaseManager; */ public class DefaultX4OLanguage implements X4OLanguageLocal { - private Logger logger = null; - private X4OLanguageConfiguration languageConfiguration = null; - private List elementLanguageModules = null; - private String languageName = null; - private String languageVersion = null; - private X4OPhaseManager phaseManager = null; - private Map keyedNamespaceLookup = null; - - public DefaultX4OLanguage(X4OLanguageConfiguration languageConfiguration,X4OPhaseManager phaseManager,String languageName,String languageVersion) { - if (languageName==null) { + private final Logger logger; + private final X4OLanguageConfiguration languageConfiguration; + private final List elementLanguageModules; + private final String languageName; + private final String languageVersion; + private final X4OPhaseManager phaseManager; + private final Map keyedNamespaceLookup; + + public DefaultX4OLanguage(X4OLanguageConfiguration languageConfiguration, X4OPhaseManager phaseManager, String languageName, String languageVersion) { + if (languageName == null) { throw new NullPointerException("Can't define myself with null name."); } - if (languageVersion==null) { + if (languageVersion == null) { throw new NullPointerException("Can't define myself with null version."); } - logger = Logger.getLogger(DefaultX4OLanguage.class.getName()); - elementLanguageModules = new ArrayList(20); - keyedNamespaceLookup = new HashMap(20); - this.languageConfiguration=languageConfiguration; - this.languageName=languageName; - this.languageVersion=languageVersion; - this.phaseManager=phaseManager; + this.logger = Logger.getLogger(DefaultX4OLanguage.class.getName()); + this.elementLanguageModules = new ArrayList(20); + this.keyedNamespaceLookup = new HashMap(20); + this.languageConfiguration = languageConfiguration; + this.languageName = languageName; + this.languageVersion = languageVersion; + this.phaseManager = phaseManager; } - + /** * @see org.x4o.xml.lang.X4OLanguage#getLanguageName() */ @@ -85,7 +85,7 @@ public class DefaultX4OLanguage implements X4OLanguageLocal { public String getLanguageVersion() { return languageVersion; } - + /** * @see org.x4o.xml.lang.X4OLanguage#getPhaseManager() */ @@ -104,28 +104,27 @@ public class DefaultX4OLanguage implements X4OLanguageLocal { * @see org.x4o.xml.lang.X4OLanguageLocal#addLanguageModule(org.x4o.xml.lang.X4OLanguageModule) */ public void addLanguageModule(X4OLanguageModule elementLanguageModule) { - if (elementLanguageModule.getId()==null) { + if (elementLanguageModule.getId() == null) { throw new NullPointerException("Can't add module without id."); } - for (X4OLanguageModule mod:elementLanguageModules) { + for (X4OLanguageModule mod : elementLanguageModules) { if (mod.getId().equals(elementLanguageModule.getId())) { - throw new IllegalArgumentException("Can't add module with duplicate id; "+elementLanguageModule.getId()); + throw new IllegalArgumentException("Can't add module with duplicate id; " + elementLanguageModule.getId()); } } elementLanguageModules.add(elementLanguageModule); - - for (ElementNamespace ns:elementLanguageModule.getElementNamespaces()) { + for (ElementNamespace ns : elementLanguageModule.getElementNamespaces()) { keyedNamespaceLookup.put(ns.getUri(), ns); } } - + /** * @see org.x4o.xml.lang.X4OLanguage#getLanguageModules() */ public Collection getLanguageModules() { return elementLanguageModules; } - + /** * @see org.x4o.xml.lang.X4OLanguage#createLanguageSession() */ @@ -134,22 +133,25 @@ public class DefaultX4OLanguage implements X4OLanguageLocal { return result; } - protected X4OLanguageSession buildElementLanguage(X4OLanguageSessionLocal languageSession) { + protected X4OLanguageSession buildElementLanguage(X4OLanguageSessionLocal languageSession) { try { - if (languageSession.getExpressionLanguageFactory()==null) { + if (languageSession.getExpressionLanguageFactory() == null) { languageSession.setExpressionLanguageFactory(X4OExpressionFactory.createExpressionFactory()); } - if (languageSession.getExpressionLanguageContext()==null) { - languageSession.setExpressionLanguageContext(X4OExpressionFactory.createELContext(languageSession.getLanguage().getLanguageConfiguration().getDefaultExpressionLanguageContext())); + if (languageSession.getExpressionLanguageContext() == null) { + languageSession.setExpressionLanguageContext( + X4OExpressionFactory.createELContext(languageSession.getLanguage().getLanguageConfiguration().getDefaultExpressionLanguageContext())); } - if (languageSession.getElementAttributeValueParser()==null) { - languageSession.setElementAttributeValueParser((ElementAttributeValueParser)X4OLanguageClassLoader.newInstance(getLanguageConfiguration().getDefaultElementAttributeValueParser())); + if (languageSession.getElementAttributeValueParser() == null) { + languageSession.setElementAttributeValueParser(X4OLanguageClassLoader.newInstance(ElementAttributeValueParser.class, + getLanguageConfiguration().getDefaultElementAttributeValueParser())); } - if (languageSession.getElementObjectPropertyValue()==null) { - languageSession.setElementObjectPropertyValue((ElementObjectPropertyValue)X4OLanguageClassLoader.newInstance(getLanguageConfiguration().getDefaultElementObjectPropertyValue())); + if (languageSession.getElementObjectPropertyValue() == null) { + languageSession.setElementObjectPropertyValue(X4OLanguageClassLoader.newInstance(ElementObjectPropertyValue.class, + getLanguageConfiguration().getDefaultElementObjectPropertyValue())); } - } catch (Exception e) { - throw new RuntimeException(e.getMessage(),e); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e.getMessage(), e); } return languageSession; } @@ -157,21 +159,21 @@ public class DefaultX4OLanguage implements X4OLanguageLocal { /** * @see org.x4o.xml.lang.X4OLanguage#createElementInstance(org.x4o.xml.lang.X4OLanguageSession,java.lang.Class) */ - public Element createElementInstance(X4OLanguageSession context,Class objectClass) { - for (X4OLanguageModule modContext:getLanguageModules()) { - for (ElementNamespace nsContext:modContext.getElementNamespaces()) { - for (ElementClass ec:nsContext.getElementClasses()) { - if (ec.getObjectClass()!=null && ec.getObjectClass().equals(objectClass)) { + public Element createElementInstance(X4OLanguageSession context, Class objectClass) { + for (X4OLanguageModule modContext : getLanguageModules()) { + for (ElementNamespace nsContext : modContext.getElementNamespaces()) { + for (ElementClass ec : nsContext.getElementClasses()) { + if (ec.getObjectClass() != null && ec.getObjectClass().equals(objectClass)) { try { return nsContext.getElementNamespaceInstanceProvider().createElementInstance(context, ec.getId()); } catch (ElementNamespaceInstanceProviderException e) { - throw new RuntimeException(e.getMessage(),e); // TODO: fix me + throw new RuntimeException(e.getMessage(), e); // TODO: fix me } } } } } - throw new IllegalArgumentException("Could not find ElementClass for: "+objectClass.getName()); + throw new IllegalArgumentException("Could not find ElementClass for: " + objectClass.getName()); } /** @@ -179,9 +181,9 @@ public class DefaultX4OLanguage implements X4OLanguageLocal { */ public List findElementBindingHandlers(Object parent) { List result = new ArrayList(50); - for (int i=0;i findElementBindingHandlers(Object parent,Object child) { + public List findElementBindingHandlers(Object parent, Object child) { List result = new ArrayList(50); - for (int i=0;i result,List checkList,boolean checkChild) { - for (ElementBindingHandler binding:checkList) { + private void findElementBindingHandlerInList(Object parent, Object child, List result, List checkList, + boolean checkChild) { + for (ElementBindingHandler binding : checkList) { boolean parentBind = false; if (parent instanceof Class) { - parentBind = binding.getBindParentClass().isAssignableFrom((Class)parent); + parentBind = binding.getBindParentClass().isAssignableFrom((Class) parent); } else { parentBind = binding.getBindParentClass().isInstance(parent); } - if (parentBind==false) { + if (parentBind == false) { continue; } - if (checkChild==false) { + if (checkChild == false) { result.add(binding); // All all handlers for parent only continue; } boolean childBind = false; - for (Class childClass:binding.getBindChildClasses()) { - if (child instanceof Class && childClass.isAssignableFrom((Class)child)) { - childBind=true; - break; + for (Class childClass : binding.getBindChildClasses()) { + if (child instanceof Class && childClass.isAssignableFrom((Class) child)) { + childBind = true; + break; } else if (childClass.isInstance(child)) { - childBind=true; + childBind = true; break; } } @@ -228,25 +231,25 @@ public class DefaultX4OLanguage implements X4OLanguageLocal { } } } - + /** * @see org.x4o.xml.lang.X4OLanguage#findElementInterfaces(java.lang.Object) */ public List findElementInterfaces(Object elementObject) { - if (elementObject==null) { + if (elementObject == null) { throw new NullPointerException("Can't search for null object."); } List result = new ArrayList(50); - for (int i=0;i eClass = ei.getInterfaceClass(); - logger.finest("Checking interface handler: "+ei+" for class: "+eClass); - if (elementObject instanceof Class && eClass.isAssignableFrom((Class)elementObject)) { - logger.finer("Found interface match from class; "+elementObject); + logger.finest("Checking interface handler: " + ei + " for class: " + eClass); + if (elementObject instanceof Class && eClass.isAssignableFrom((Class) elementObject)) { + logger.finer("Found interface match from class; " + elementObject); result.add(ei); } else if (eClass.isInstance(elementObject)) { - logger.finer("Found interface match from object; "+elementObject); + logger.finer("Found interface match from object; " + elementObject); result.add(ei); } } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguageLoader.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguageLoader.java index 5891361..dcc1334 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguageLoader.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguageLoader.java @@ -31,6 +31,10 @@ import java.util.Enumeration; import java.util.List; import java.util.logging.Logger; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + import org.x4o.xml.eld.EldDriver; import org.x4o.xml.eld.EldModuleLoader; import org.x4o.xml.lang.phase.X4OPhaseLanguageInit; @@ -40,7 +44,6 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.ext.DefaultHandler2; -import org.xml.sax.helpers.XMLReaderFactory; /** * DefaultX4OLanguageLoader loads the modules of language. @@ -101,7 +104,7 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) { } for (String value:versionedResources.moduleLoaders) { try { - loader = (X4OLanguageModuleLoader)X4OLanguageClassLoader.loadClass(value).newInstance(); + loader = (X4OLanguageModuleLoader)X4OLanguageClassLoader.newInstance(value); } catch (Exception ee) { throw new X4OLanguageLoaderException("Could not load class: "+value+" error: "+ee.getMessage(),ee); } @@ -109,7 +112,7 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) { } for (String value:versionedResources.siblingLoaders) { try { - loader = (X4OLanguageModuleLoader)X4OLanguageClassLoader.loadClass(value).newInstance(); + loader = (X4OLanguageModuleLoader)X4OLanguageClassLoader.newInstance(value); } catch (Exception ee) { throw new X4OLanguageLoaderException("Could not load class: "+value+" error: "+ee.getMessage(),ee); } @@ -135,10 +138,8 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) { List result = new ArrayList(resources.size()); X4OLanguageVersionFilter lvf; try { - lvf = (X4OLanguageVersionFilter)X4OLanguageClassLoader.newInstance(languageLocal.getLanguageConfiguration().getDefaultLanguageVersionFilter()); - } catch (InstantiationException e) { - throw new X4OLanguageLoaderException(e); - } catch (IllegalAccessException e) { + lvf = X4OLanguageClassLoader.newInstance(X4OLanguageVersionFilter.class, languageLocal.getLanguageConfiguration().getDefaultLanguageVersionFilter()); + } catch (ClassNotFoundException e) { throw new X4OLanguageLoaderException(e); } for (VersionedResources versionedResources:resources) { @@ -178,10 +179,8 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) { private void loadModule(X4OLanguageLocal languageLocal,X4OLanguageModuleLoader loader,String resource,VersionedResources versionedResources) throws X4OLanguageLoaderException { X4OLanguageModuleLocal module; try { - module = (X4OLanguageModuleLocal)X4OLanguageClassLoader.newInstance(languageLocal.getLanguageConfiguration().getDefaultElementLanguageModule()); - } catch (InstantiationException e) { - throw new X4OLanguageLoaderException(e); - } catch (IllegalAccessException e) { + module = X4OLanguageClassLoader.newInstance(X4OLanguageModuleLocal.class, languageLocal.getLanguageConfiguration().getDefaultElementLanguageModule()); + } catch (ClassNotFoundException e) { throw new X4OLanguageLoaderException(e); } logMessage(languageLocal,"Created module: "+module); @@ -236,9 +235,7 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) { result.addAll(loadLanguageModulesXml(u.openStream(),u.toString())); } return result; - } catch (IOException e) { - throw new X4OLanguageLoaderException(e); - } catch (SAXException e) { + } catch (IOException | SAXException | ParserConfigurationException e) { throw new X4OLanguageLoaderException(e); } } @@ -248,18 +245,22 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) { * @param in The inputstream to parser. * @throws IOException * @throws SAXException + * @throws ParserConfigurationException */ - protected List loadLanguageModulesXml(InputStream in,String loadedFrom) throws IOException, SAXException { + protected List loadLanguageModulesXml(InputStream in,String loadedFrom) throws IOException, SAXException, ParserConfigurationException { if (in==null) { throw new NullPointerException("Can't parse null input stream"); } ModulesTagHandler xth = new ModulesTagHandler(loadedFrom); - XMLReader saxParser = XMLReaderFactory.createXMLReader(); - saxParser.setContentHandler(xth); - saxParser.setProperty("http://xml.org/sax/properties/lexical-handler", xth); - saxParser.setProperty("http://xml.org/sax/properties/declaration-handler",xth); + SAXParserFactory factory = SAXParserFactory.newInstance(); + factory.setNamespaceAware(true); + SAXParser parser = factory.newSAXParser(); + XMLReader reader = parser.getXMLReader(); + reader.setContentHandler(xth); + reader.setProperty("http://xml.org/sax/properties/lexical-handler", xth); + reader.setProperty("http://xml.org/sax/properties/declaration-handler",xth); try { - saxParser.parse(new InputSource(in)); + reader.parse(new InputSource(in)); return xth.getResult(); } finally { in.close(); diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/X4OLanguageClassLoader.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/X4OLanguageClassLoader.java index 55fabf2..0c6351c 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/X4OLanguageClassLoader.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/X4OLanguageClassLoader.java @@ -23,6 +23,7 @@ package org.x4o.xml.lang; import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; import java.net.URL; /** @@ -62,27 +63,40 @@ public final class X4OLanguageClassLoader { public static Class loadClass(String className) throws ClassNotFoundException { return getClassLoader().loadClass(className); } - + + /** + * Creates new instance of clazz. + * @param resultType The result type to cast to.. + * @param clazz The class to make object from. + * @return The object of the clazz. + * @throws ClassNotFoundException On any construct access or invoke error. + */ + @SuppressWarnings("unchecked") + public static T newInstance(Class resultType, Class clazz) throws ClassNotFoundException { + return (T) newInstance(clazz); + } + /** * Creates new instance of clazz. * @param clazz The class to make object from. * @return The object of the clazz. - * @throws InstantiationException When className has no default constructor. - * @throws IllegalAccessException When class loading has security error. + * @throws ClassNotFoundException On any construct access or invoke error. */ - public static Object newInstance(Class clazz) throws InstantiationException, IllegalAccessException { - return clazz.newInstance(); + public static Object newInstance(Class clazz) throws ClassNotFoundException { + try { + return clazz.getConstructor().newInstance(); + } catch (IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException e) { + throw new ClassNotFoundException(e.getMessage(), e); + } } /** * Creates new instance of className. * @param className The className to create object from. * @return The object of the className. - * @throws ClassNotFoundException When className is not found. - * @throws InstantiationException When className has no default constructor. - * @throws IllegalAccessException When class loading has security error. + * @throws ClassNotFoundException When className is not found or can't be created. */ - public static Object newInstance(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException { + public static Object newInstance(String className) throws ClassNotFoundException { return newInstance(loadClass(className)); } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/X4OPhaseLanguageInit.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/X4OPhaseLanguageInit.java index c279734..ecfb6e7 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/X4OPhaseLanguageInit.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/X4OPhaseLanguageInit.java @@ -103,7 +103,7 @@ public class X4OPhaseLanguageInit { public void runPhase(X4OLanguageSession languageSession) throws X4OPhaseException { try { //debugPhaseMessage("Loading main language: "+elementLanguage.getLanguage(),this,elementLanguage); - X4OLanguageLoader loader = (X4OLanguageLoader)X4OLanguageClassLoader.newInstance(languageSession.getLanguage().getLanguageConfiguration().getDefaultLanguageLoader()); + X4OLanguageLoader loader = X4OLanguageClassLoader.newInstance(X4OLanguageLoader.class, languageSession.getLanguage().getLanguageConfiguration().getDefaultLanguageLoader()); loader.loadLanguage((X4OLanguageLocal)languageSession.getLanguage(),languageSession.getLanguage().getLanguageName(),languageSession.getLanguage().getLanguageVersion()); if (languageSession.hasX4ODebugWriter()) { @@ -141,7 +141,7 @@ public class X4OPhaseLanguageInit { public void runPhase(X4OLanguageSession languageSession) throws X4OPhaseException { try { if (siblingLoaders.isEmpty()==false) { - X4OLanguageLoader loader = (X4OLanguageLoader)X4OLanguageClassLoader.newInstance(languageSession.getLanguage().getLanguageConfiguration().getDefaultLanguageLoader()); + X4OLanguageLoader loader = X4OLanguageClassLoader.newInstance(X4OLanguageLoader.class, languageSession.getLanguage().getLanguageConfiguration().getDefaultLanguageLoader()); for (X4OLanguageModuleLoaderSibling siblingLoader:siblingLoaders) { //debugPhaseMessage("Loading sibling langauge loader: "+siblingLoader,this,elementLanguage); siblingLoader.loadLanguageSibling((X4OLanguageLocal)languageSession.getLanguage(), loader); diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/X4OPhaseLanguageRead.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/X4OPhaseLanguageRead.java index 70907f0..edcb7e4 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/X4OPhaseLanguageRead.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/X4OPhaseLanguageRead.java @@ -277,7 +277,7 @@ public class X4OPhaseLanguageRead { if (elementNamespaceAttributeComparator==null) { try { elementNamespaceAttributeComparator = (Comparator)X4OLanguageClassLoader.newInstance(element.getLanguageSession().getLanguage().getLanguageConfiguration().getDefaultElementNamespaceAttributeComparator()); - } catch (Exception e) { + } catch (ClassNotFoundException e) { throw new X4OPhaseException(this,e); } }