From ec8711df9c86b5d9c54d15ba110978bac181092e Mon Sep 17 00:00:00 2001 From: Willem Date: Thu, 6 Nov 2025 18:42:35 +0100 Subject: [PATCH] X4O: Made session equal used in read and write and added closable --- .../java/org/x4o/xml/eld/EldModuleLoader.java | 6 +- .../org/x4o/xml/io/AbstractX4OConnection.java | 31 +++++-- .../org/x4o/xml/io/AbstractX4OReader.java | 41 ++++++--- .../x4o/xml/io/AbstractX4OReaderSession.java | 90 +++++-------------- .../org/x4o/xml/io/AbstractX4OWriter.java | 20 +++-- .../x4o/xml/io/AbstractX4OWriterSession.java | 13 ++- .../java/org/x4o/xml/io/DefaultX4OReader.java | 38 +++----- .../java/org/x4o/xml/io/DefaultX4OWriter.java | 4 - .../java/org/x4o/xml/io/X4OConnection.java | 21 +++-- .../java/org/x4o/xml/io/X4OReaderSession.java | 31 ++++--- .../java/org/x4o/xml/io/X4OWriterSession.java | 8 +- .../org/x4o/xml/lang/DefaultX4OLanguage.java | 25 +++--- .../xml/lang/DefaultX4OLanguageSession.java | 14 +++ .../org/x4o/xml/lang/X4OLanguageSession.java | 12 ++- .../lang/phase/DefaultX4OPhaseManager.java | 3 +- .../org/x4o/xml/core/NamespaceUriTest.java | 27 ++---- .../org/x4o/xml/core/X4ODebugWriterTest.java | 4 +- .../org/x4o/xml/io/X4OReaderSessionTest.java | 29 +++--- .../x4o/xml/lang/meta/ParentObjectTest.java | 11 +-- .../x4o/xml/lang/meta/ReferenceStoreTest.java | 33 +++---- 20 files changed, 220 insertions(+), 241 deletions(-) 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 3e6baab..079ef85 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 @@ -29,6 +29,7 @@ import javax.el.ValueExpression; import org.x4o.xml.X4ODriver; import org.x4o.xml.X4ODriverManager; +import org.x4o.xml.io.DefaultX4OReader; import org.x4o.xml.io.X4OConnectionException; import org.x4o.xml.io.X4OReader; import org.x4o.xml.lang.X4OLanguage; @@ -88,7 +89,6 @@ public class EldModuleLoader implements X4OLanguageModuleLoader { } else { driver = X4ODriverManager.getX4ODriver(EldDriver.LANGUAGE_NAME); } - X4OReader reader = driver.createReader(); //X4OLanguageSession eldLang = driver.createLanguageSession(driver.getLanguageVersionDefault()); @@ -97,6 +97,10 @@ 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); + //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/io/AbstractX4OConnection.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OConnection.java index 84720b1..e531d46 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OConnection.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OConnection.java @@ -28,6 +28,7 @@ import java.util.List; import org.x4o.sax3.io.SAX3PropertyConfig; import org.x4o.xml.lang.X4OLanguage; +import org.x4o.xml.lang.X4OLanguageSession; /** * AbstractX4OConnection is the read/write interface for the classes. @@ -42,14 +43,23 @@ public abstract class AbstractX4OConnection extends AbstractX4OConnectionDebug { protected List phaseSkip = null; public AbstractX4OConnection(X4OLanguage language) { - this.language=language; + if (language == null) { + throw new NullPointerException("Can't create X4O connection for null language."); + } + this.language = language; this.phaseSkip = new ArrayList(2); } - protected X4OLanguage getLanguage() { + @Override + public final X4OLanguage getLanguage() { return language; } + @Override + public final X4OLanguageSession createLanguageSession() { + return language.createLanguageSession(); + } + abstract SAX3PropertyConfig getPropertyConfig(); /** @@ -57,23 +67,28 @@ public abstract class AbstractX4OConnection extends AbstractX4OConnectionDebug { * @param key The key of the property to set. * @param value The vlue of the property to set. */ - public void setProperty(String key,Object value) { + @Override + public final void setProperty(String key,Object value) { getPropertyConfig().setProperty(key, value); } - public Object getProperty(String key) { + @Override + public final Object getProperty(String key) { return getPropertyConfig().getProperty(key); } - public Collection getPropertyKeys() { + @Override + public final Collection getPropertyKeys() { return getPropertyConfig().getPropertyKeys(); } - public void setPhaseStop(String phaseId) { + @Override + public final void setPhaseStop(String phaseId) { phaseStop = phaseId; } - public void addPhaseSkip(String phaseId) { - phaseSkip.add( phaseId ); + @Override + public final void addPhaseSkip(String phaseId) { + phaseSkip.add(phaseId); } } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OReader.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OReader.java index 7836e06..deccbe8 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OReader.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OReader.java @@ -29,6 +29,7 @@ import java.io.InputStream; import java.net.URL; import org.x4o.xml.lang.X4OLanguage; +import org.x4o.xml.lang.X4OLanguageSession; import org.xml.sax.SAXException; /** @@ -45,8 +46,11 @@ abstract public class AbstractX4OReader extends AbstractX4OReaderSession i super(language); } - public T read(InputStream input, String systemId, URL basePath) throws X4OConnectionException,SAXException,IOException { - return (T)readSession(input, systemId, basePath).getRootElement().getElementObject(); + public T read(InputStream input, String systemId, URL basePath) throws X4OConnectionException, SAXException, IOException { + try (X4OLanguageSession session = createLanguageSession()) { + readSession(session, input, systemId, basePath); + return (T)session.getRootElement().getElementObject(); + } } /** @@ -58,8 +62,11 @@ abstract public class AbstractX4OReader extends AbstractX4OReaderSession i * @throws IOException Is thrown after io exception. * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) */ - public T readFile(String fileName) throws X4OConnectionException,SAXException,IOException,FileNotFoundException { - return (T)readFileSession(fileName).getRootElement().getElementObject(); + public T readFile(String fileName) throws X4OConnectionException, SAXException, IOException, FileNotFoundException { + try (X4OLanguageSession session = createLanguageSession()) { + readFileSession(session, fileName); + return (T)session.getRootElement().getElementObject(); + } } /** @@ -71,8 +78,11 @@ abstract public class AbstractX4OReader extends AbstractX4OReaderSession i * @throws IOException Is thrown after io exception. * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) */ - public T readFile(File file) throws X4OConnectionException,SAXException,IOException,FileNotFoundException { - return (T)readFileSession(file).getRootElement().getElementObject(); + public T readFile(File file) throws X4OConnectionException, SAXException, IOException, FileNotFoundException { + try (X4OLanguageSession session = createLanguageSession()) { + readFileSession(session, file); + return (T)session.getRootElement().getElementObject(); + } } /** @@ -83,8 +93,11 @@ abstract public class AbstractX4OReader extends AbstractX4OReaderSession i * @throws IOException Is thrown after io exception. * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) */ - public T readResource(String resourceName) throws X4OConnectionException,SAXException,IOException { - return (T)readResourceSession(resourceName).getRootElement().getElementObject(); + public T readResource(String resourceName) throws X4OConnectionException, SAXException, IOException { + try (X4OLanguageSession session = createLanguageSession()) { + readResourceSession(session, resourceName); + return (T)session.getRootElement().getElementObject(); + } } /** @@ -95,8 +108,11 @@ abstract public class AbstractX4OReader extends AbstractX4OReaderSession i * @throws IOException Is thrown after io exception. * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) */ - public T readString(String xmlString) throws X4OConnectionException,SAXException,IOException { - return (T)readStringSession(xmlString).getRootElement().getElementObject(); + public T readString(String xmlString) throws X4OConnectionException, SAXException, IOException { + try (X4OLanguageSession session = createLanguageSession()) { + readStringSession(session, xmlString); + return (T)session.getRootElement().getElementObject(); + } } /** @@ -108,6 +124,9 @@ abstract public class AbstractX4OReader extends AbstractX4OReaderSession i * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) */ public T readUrl(URL url) throws X4OConnectionException,SAXException,IOException { - return (T)readUrlSession(url).getRootElement().getElementObject(); + try (X4OLanguageSession session = createLanguageSession()) { + readUrlSession(session, url); + return (T)session.getRootElement().getElementObject(); + } } } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OReaderSession.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OReaderSession.java index ae16010..ae8ec10 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OReaderSession.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OReaderSession.java @@ -48,64 +48,35 @@ abstract public class AbstractX4OReaderSession extends AbstractX4OConnection super(language); } - /** - * Reads the file fileName and reads it as an InputStream. - * @param fileName The file name to read. - * @throws FileNotFoundException Is thrown is file is not found. - * @throws X4OConnectionException Is thrown after x4o exception. - * @throws SAXException Is thrown after sax xml exception. - * @throws IOException Is thrown after io exception. - * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) - */ - public X4OLanguageSession readFileSession(String fileName) throws X4OConnectionException,SAXException,IOException,FileNotFoundException { - if (fileName==null) { + public void readFileSession(X4OLanguageSession session, String fileName) throws X4OConnectionException, SAXException, IOException, FileNotFoundException { + if (fileName == null) { throw new NullPointerException("Can't convert null fileName to file object."); - } - return readFileSession(new File(fileName)); + } + readFileSession(session, new File(fileName)); } - /** - * Reads the file and reads it as an InputStream. - * @param file The file to read. - * @throws FileNotFoundException Is thrown is file is not found. - * @throws X4OConnectionException Is thrown after x4o exception. - * @throws SAXException Is thrown after sax xml exception. - * @throws IOException Is thrown after io exception. - * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) - */ - public X4OLanguageSession readFileSession(File file) throws X4OConnectionException,SAXException,IOException,FileNotFoundException { - if (file==null) { + public void readFileSession(X4OLanguageSession session, File file) throws X4OConnectionException, SAXException, IOException, FileNotFoundException { + if (file == null) { throw new NullPointerException("Can't read null file."); } - if (file.exists()==false) { + if (file.exists() == false) { throw new FileNotFoundException("File does not exists; "+file); } - if (file.canRead()==false) { + if (file.canRead() == false) { throw new IOException("File exists but can't read file: "+file); } URL basePath = new File(file.getAbsolutePath()).toURI().toURL(); - InputStream inputStream = new FileInputStream(file); - try { - return readSession(inputStream,file.getAbsolutePath(),basePath); - } finally { - inputStream.close(); + try (InputStream inputStream = new FileInputStream(file)) { + readSession(session, inputStream,file.getAbsolutePath(),basePath); } } - /** - * reads an resource locaction. - * @param resourceName The resource to readr. - * @throws X4OConnectionException Is thrown after x4o exception. - * @throws SAXException Is thrown after sax xml exception. - * @throws IOException Is thrown after io exception. - * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) - */ - public X4OLanguageSession readResourceSession(String resourceName) throws X4OConnectionException,SAXException,IOException { - if (resourceName==null) { + public void readResourceSession(X4OLanguageSession session, String resourceName) throws X4OConnectionException, SAXException, IOException { + if (resourceName == null) { throw new NullPointerException("Can't read null resourceName from classpath."); } URL url = X4OLanguageClassLoader.getResource(resourceName); - if (url==null) { + if (url == null) { throw new NullPointerException("Could not find resource on classpath: "+resourceName); } String baseUrl = url.toExternalForm(); @@ -114,44 +85,25 @@ abstract public class AbstractX4OReaderSession extends AbstractX4OConnection baseUrl = baseUrl.substring(0,lastSlash+1); } URL basePath = new URL(baseUrl); - InputStream inputStream = X4OLanguageClassLoader.getResourceAsStream(resourceName); - try { - return readSession(inputStream,url.toExternalForm(),basePath); - } finally { - inputStream.close(); + try (InputStream inputStream = X4OLanguageClassLoader.getResourceAsStream(resourceName)) { + readSession(session, inputStream,url.toExternalForm(),basePath); } } - /** - * Converts a String to a InputStream to is can me read by SAX. - * @param xmlString The xml as (UTF-8) String to read. - * @throws X4OConnectionException Is thrown after x4o exception. - * @throws SAXException Is thrown after sax xml exception. - * @throws IOException Is thrown after io exception. - * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) - */ - public X4OLanguageSession readStringSession(String xmlString) throws X4OConnectionException,SAXException,IOException { - if (xmlString==null) { + public void readStringSession(X4OLanguageSession session, String xmlString) throws X4OConnectionException, SAXException, IOException { + if (xmlString == null) { throw new NullPointerException("Can't read null xml string."); } URL basePath = new File(System.getProperty("user.dir")).toURI().toURL(); String encoding = (String)getProperty(DefaultX4OReader.INPUT_ENCODING); - return readSession(new ByteArrayInputStream(xmlString.getBytes(encoding)),"inline-xml",basePath); + readSession(session, new ByteArrayInputStream(xmlString.getBytes(encoding)),"inline-xml",basePath); } - /** - * Fetched the data direct from remote url to a InputStream to is can me readd by SAX. - * @param url The url to read. - * @throws X4OConnectionException Is thrown after x4o exception. - * @throws SAXException Is thrown after sax xml exception. - * @throws IOException Is thrown after io exception. - * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) - */ - public X4OLanguageSession readUrlSession(URL url) throws X4OConnectionException,SAXException,IOException { - if (url==null) { + public void readUrlSession(X4OLanguageSession session, URL url) throws X4OConnectionException, SAXException, IOException { + if (url == null) { throw new NullPointerException("Can't read null url."); } URL basePath = new URL(url.toExternalForm().substring(0,url.toExternalForm().length()-url.getFile().length())); - return readSession(url.openStream(),url.toExternalForm(),basePath); + readSession(session, url.openStream(),url.toExternalForm(),basePath); } } 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 34fda3d..960a5c3 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 @@ -45,9 +45,7 @@ public abstract class AbstractX4OWriter extends AbstractX4OWriterSession i super(language); } - abstract X4OLanguageSession createLanguageSession(); - - private X4OLanguageSession toObjectContext(T object) throws SAXException { + protected X4OLanguageSession createObjectContext(T object) throws SAXException { X4OLanguageSession context = createLanguageSession(); Element rootElement = null; try { @@ -64,18 +62,26 @@ public abstract class AbstractX4OWriter extends AbstractX4OWriterSession i } public void write(T object,OutputStream output) throws X4OConnectionException,SAXException,IOException { - writeSession(toObjectContext(object), output); + try (X4OLanguageSession session = createObjectContext(object)) { + writeSession(session, output); + } } public void writeFile(T object,String fileName) throws X4OConnectionException,SAXException,IOException,FileNotFoundException { - writeFileSession(toObjectContext(object), fileName); + try (X4OLanguageSession session = createObjectContext(object)) { + writeFileSession(session, fileName); + } } public void writeFile(T object,File file) throws X4OConnectionException,SAXException,IOException,FileNotFoundException { - writeFileSession(toObjectContext(object), file); + try (X4OLanguageSession session = createObjectContext(object)) { + writeFileSession(session, file); + } } public String writeString(T object) throws X4OConnectionException,SAXException,IOException,FileNotFoundException { - return writeStringSession(toObjectContext(object)); + try (X4OLanguageSession session = createObjectContext(object)) { + return writeStringSession(session); + } } } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OWriterSession.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OWriterSession.java index 9953ed6..8fe0ab0 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OWriterSession.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/AbstractX4OWriterSession.java @@ -37,7 +37,7 @@ import org.xml.sax.SAXException; * AbstractX4OWriterSession. * * @author Willem Cazander - * @version 1.0 Apr 6, 2013\ + * @version 1.0 Apr 6, 2013 * @param The root element object type. */ public abstract class AbstractX4OWriterSession extends AbstractX4OConnection implements X4OWriterSession { @@ -47,21 +47,18 @@ public abstract class AbstractX4OWriterSession extends AbstractX4OConnection } public void writeFileSession(X4OLanguageSession languageSession,String fileName) throws X4OConnectionException,SAXException,IOException { - if (fileName==null) { + if (fileName == null) { throw new NullPointerException("Can't convert null fileName to file object."); - } + } writeFileSession(languageSession,new File(fileName)); } public void writeFileSession(X4OLanguageSession languageSession,File file) throws X4OConnectionException,SAXException,IOException { - if (file==null) { + if (file == null) { throw new NullPointerException("Can't read null file."); } - OutputStream outputStream = new FileOutputStream(file); - try { + try (OutputStream outputStream = new FileOutputStream(file)) { writeSession(languageSession,outputStream); - } finally { - outputStream.close(); } } 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 622430f..1e3c518 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 @@ -27,6 +27,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; +import java.util.HashMap; +import java.util.Map; import javax.el.ValueExpression; import javax.xml.parsers.ParserConfigurationException; @@ -54,12 +56,10 @@ import org.xml.sax.SAXException; */ public class DefaultX4OReader extends AbstractX4OReader { - private X4OLanguageSession languageSession = null; - private final SAX3PropertyConfig propertyConfig; + private final Map elBeans = new HashMap<>(); private final static String PROPERTY_CONTEXT_PREFIX = SAX3PropertyConfig.X4O_PROPERTIES_PREFIX+"reader/x4o/"; - public final static SAX3PropertyConfig DEFAULT_PROPERTY_CONFIG; public final static String SAX_ERROR_HANDLER = PROPERTY_CONTEXT_PREFIX + "sax/error-handler"; public final static String SAX_ENTITY_RESOLVER = PROPERTY_CONTEXT_PREFIX + "sax/entity-resolver"; @@ -101,7 +101,6 @@ public class DefaultX4OReader extends AbstractX4OReader { public DefaultX4OReader(X4OLanguage language) { super(language); - languageSession = language.createLanguageSession(); propertyConfig = new SAX3PropertyConfig(DEFAULT_PROPERTY_CONFIG,PROPERTY_CONTEXT_PREFIX); } @@ -110,15 +109,20 @@ public class DefaultX4OReader extends AbstractX4OReader { return propertyConfig; } - public X4OLanguageSession readSession(InputStream input, String systemId, URL basePath) throws X4OConnectionException, SAXException, IOException { + @Override + public void readSession(X4OLanguageSession languageSession, InputStream input, String systemId, URL basePath) throws X4OConnectionException, SAXException, IOException { setProperty(INPUT_STREAM, input); setProperty(INPUT_SYSTEM_ID, systemId); setProperty(INPUT_BASE_PATH, basePath); - read(); - return languageSession; + for (String name : elBeans.keySet()) { + Object bean = elBeans.get(name); + ValueExpression ve = languageSession.getExpressionLanguageFactory().createValueExpression(languageSession.getExpressionLanguageContext(),"${"+name+"}", bean.getClass()); + ve.setValue(languageSession.getExpressionLanguageContext(), bean); + } + readSession(languageSession); } - public void addELBeanInstance(String name,Object bean) { + public void addELBeanInstance(String name, Object bean) { if (name==null) { throw new NullPointerException("Can't add null name."); } @@ -128,14 +132,13 @@ public class DefaultX4OReader extends AbstractX4OReader { if (bean==null) { throw new NullPointerException("Can't add null bean."); } - ValueExpression ve = languageSession.getExpressionLanguageFactory().createValueExpression(languageSession.getExpressionLanguageContext(),"${"+name+"}", bean.getClass()); - ve.setValue(languageSession.getExpressionLanguageContext(), bean); + elBeans.put(name, bean); } /** * Parses the input stream as a X4O document. */ - protected void read() throws X4OConnectionException,SAXException,IOException { + protected void readSession(X4OLanguageSession languageSession) throws X4OConnectionException,SAXException,IOException { // Extra check if we have a language if (languageSession.getLanguage()==null) { throw new X4OConnectionException("languageSession is broken getLanguage() returns null."); @@ -186,17 +189,4 @@ public class DefaultX4OReader extends AbstractX4OReader { debugStop(languageSession); } } - - public void releaseSession(X4OLanguageSession context) throws X4OPhaseException { - if (context==null) { - return; - } - if (context.getLanguage()==null) { - return; - } - if (context.getLanguage().getPhaseManager()==null) { - return; - } - context.getLanguage().getPhaseManager().doReleasePhaseManual(context); - } } 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 f31849e..671f0c1 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 @@ -105,10 +105,6 @@ public class DefaultX4OWriter extends AbstractX4OWriter { return propertyConfig; } - X4OLanguageSession createLanguageSession() { - return getLanguage().createLanguageSession(); - } - /** * @see org.x4o.xml.io.X4OWriterSession#writeSession(org.x4o.xml.lang.X4OLanguageSession, java.io.OutputStream) */ diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OConnection.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OConnection.java index ed5a7c1..7aa1848 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OConnection.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OConnection.java @@ -24,26 +24,33 @@ package org.x4o.xml.io; import java.util.Collection; +import org.x4o.xml.lang.X4OLanguage; +import org.x4o.xml.lang.X4OLanguageSession; + /** - * X4OConnection interface for config the io drivers. + * X4OConnection interface for config the io-drivers. * * @author Willem Cazander * @version 1.0 Apr 6, 2013 */ public interface X4OConnection { + X4OLanguage getLanguage(); + + X4OLanguageSession createLanguageSession(); + /** * Sets an X4O Language property. * @param key The key of the property to set. - * @param value The vlue of the property to set. + * @param value The value of the property to set. */ - void setProperty(String key,Object value); + void setProperty(String key, Object value); - public Object getProperty(String key); + Object getProperty(String key); - public Collection getPropertyKeys(); + Collection getPropertyKeys(); - public void setPhaseStop(String phaseId); + void setPhaseStop(String phaseId); - public void addPhaseSkip(String phaseId); + void addPhaseSkip(String phaseId); } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OReaderSession.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OReaderSession.java index 1f7bc6f..0f16045 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OReaderSession.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OReaderSession.java @@ -29,7 +29,6 @@ import java.io.InputStream; import java.net.URL; import org.x4o.xml.lang.X4OLanguageSession; -import org.x4o.xml.lang.phase.X4OPhaseException; import org.xml.sax.SAXException; /** @@ -40,66 +39,70 @@ import org.xml.sax.SAXException; */ public interface X4OReaderSession extends X4OReader { - void releaseSession(X4OLanguageSession context) throws X4OPhaseException; - /** * Method to parse the xml data. + * @param session The language session. * @param input The inputStream to parse. * @throws X4OConnectionException Is thrown after x4o exception. * @throws SAXException Is thrown after sax xml exception. * @throws IOException Is thrown after io exception. */ - X4OLanguageSession readSession(InputStream input,String systemId,URL basePath) throws X4OConnectionException,SAXException,IOException; + void readSession(X4OLanguageSession session, InputStream input, String systemId, URL basePath) throws X4OConnectionException, SAXException, IOException; /** * Reads the file fileName and parses it as an InputStream. + * @param session The language session. * @param fileName The file name to parse. * @throws FileNotFoundException Is thrown is file is not found. * @throws X4OConnectionException Is thrown after x4o exception. * @throws SAXException Is thrown after sax xml exception. * @throws IOException Is thrown after io exception. - * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) + * @see org.x4o.xml.io.X4OReaderSession#readSession(org.x4o.xml.lang.X4OLanguageSession,java.io.InputStream,java.lang.String,java.net.URL) */ - X4OLanguageSession readFileSession(String fileName) throws X4OConnectionException,SAXException,IOException,FileNotFoundException; + void readFileSession(X4OLanguageSession session, String fileName) throws X4OConnectionException, SAXException, IOException, FileNotFoundException; /** * Reads the file and parses it as an InputStream. + * @param session The language session. * @param file The file to parse. * @throws FileNotFoundException Is thrown is file is not found. * @throws X4OConnectionException Is thrown after x4o exception. * @throws SAXException Is thrown after sax xml exception. * @throws IOException Is thrown after io exception. - * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) + * @see org.x4o.xml.io.X4OReaderSession#readSession(org.x4o.xml.lang.X4OLanguageSession,java.io.InputStream,java.lang.String,java.net.URL) */ - X4OLanguageSession readFileSession(File file) throws X4OConnectionException,SAXException,IOException,FileNotFoundException; + void readFileSession(X4OLanguageSession session, File file) throws X4OConnectionException, SAXException, IOException, FileNotFoundException; /** * Parses an resource locaction. + * @param session The language session. * @param resourceName The resource to parser. * @throws X4OConnectionException Is thrown after x4o exception. * @throws SAXException Is thrown after sax xml exception. * @throws IOException Is thrown after io exception. - * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) + * @see org.x4o.xml.io.X4OReaderSession#readSession(org.x4o.xml.lang.X4OLanguageSession,java.io.InputStream,java.lang.String,java.net.URL) */ - X4OLanguageSession readResourceSession(String resourceName) throws X4OConnectionException,SAXException,IOException; + void readResourceSession(X4OLanguageSession session, String resourceName) throws X4OConnectionException, SAXException, IOException; /** * Converts a String to a InputStream to is can be parsed by SAX. + * @param session The language session. * @param xmlString The xml as String to parse. * @throws X4OConnectionException Is thrown after x4o exception. * @throws SAXException Is thrown after sax xml exception. * @throws IOException Is thrown after io exception. - * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) + * @see org.x4o.xml.io.X4OReaderSession#readSession(org.x4o.xml.lang.X4OLanguageSession,java.io.InputStream,java.lang.String,java.net.URL) */ - X4OLanguageSession readStringSession(String xmlString) throws X4OConnectionException,SAXException,IOException; + void readStringSession(X4OLanguageSession session, String xmlString) throws X4OConnectionException, SAXException, IOException; /** * Fetched the data direct from remote url to a InputStream to is can be parsed by SAX. + * @param session The language session. * @param url The url to parse. * @throws X4OConnectionException Is thrown after x4o exception. * @throws SAXException Is thrown after sax xml exception. * @throws IOException Is thrown after io exception. - * @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL) + * @see org.x4o.xml.io.X4OReaderSession#readSession(org.x4o.xml.lang.X4OLanguageSession,java.io.InputStream,java.lang.String,java.net.URL) */ - X4OLanguageSession readUrlSession(URL url) throws X4OConnectionException,SAXException,IOException; + void readUrlSession(X4OLanguageSession session, URL url) throws X4OConnectionException, SAXException, IOException; } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OWriterSession.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OWriterSession.java index 08d5fce..eeafe21 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OWriterSession.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/io/X4OWriterSession.java @@ -37,11 +37,11 @@ import org.xml.sax.SAXException; */ public interface X4OWriterSession extends X4OWriter { - void writeSession(X4OLanguageSession context,OutputStream out) throws X4OConnectionException,SAXException,IOException; + void writeSession(X4OLanguageSession session, OutputStream out) throws X4OConnectionException, SAXException, IOException; - void writeFileSession(X4OLanguageSession context,String fileName) throws X4OConnectionException,SAXException,IOException; + void writeFileSession(X4OLanguageSession session, String fileName) throws X4OConnectionException, SAXException, IOException; - void writeFileSession(X4OLanguageSession context,File file) throws X4OConnectionException,SAXException,IOException; + void writeFileSession(X4OLanguageSession session, File file) throws X4OConnectionException, SAXException, IOException; - String writeStringSession(X4OLanguageSession context) throws X4OConnectionException,SAXException,IOException; + String writeStringSession(X4OLanguageSession session) throws X4OConnectionException, SAXException, IOException; } 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 fce7d6f..5e66951 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 @@ -38,7 +38,6 @@ import org.x4o.xml.element.ElementInterface; import org.x4o.xml.element.ElementNamespace; import org.x4o.xml.element.ElementNamespaceInstanceProviderException; import org.x4o.xml.element.ElementObjectPropertyValue; -import org.x4o.xml.lang.phase.X4OPhaseException; import org.x4o.xml.lang.phase.X4OPhaseManager; /** @@ -135,28 +134,24 @@ public class DefaultX4OLanguage implements X4OLanguageLocal { return result; } - protected X4OLanguageSession buildElementLanguage(X4OLanguageSession languageSession) { - if ((languageSession instanceof X4OLanguageSessionLocal)==false) { - throw new RuntimeException("Can't init X4OLanguageSession which has not X4OLanguageSessionLocal interface obj: "+languageSession); - } - X4OLanguageSessionLocal contextInit = (X4OLanguageSessionLocal)languageSession; + protected X4OLanguageSession buildElementLanguage(X4OLanguageSessionLocal languageSession) { try { - if (contextInit.getExpressionLanguageFactory()==null) { - contextInit.setExpressionLanguageFactory(X4OExpressionFactory.createExpressionFactory()); + if (languageSession.getExpressionLanguageFactory()==null) { + languageSession.setExpressionLanguageFactory(X4OExpressionFactory.createExpressionFactory()); } - if (contextInit.getExpressionLanguageContext()==null) { - contextInit.setExpressionLanguageContext(X4OExpressionFactory.createELContext(contextInit.getLanguage().getLanguageConfiguration().getDefaultExpressionLanguageContext())); + if (languageSession.getExpressionLanguageContext()==null) { + languageSession.setExpressionLanguageContext(X4OExpressionFactory.createELContext(languageSession.getLanguage().getLanguageConfiguration().getDefaultExpressionLanguageContext())); } - if (contextInit.getElementAttributeValueParser()==null) { - contextInit.setElementAttributeValueParser((ElementAttributeValueParser)X4OLanguageClassLoader.newInstance(getLanguageConfiguration().getDefaultElementAttributeValueParser())); + if (languageSession.getElementAttributeValueParser()==null) { + languageSession.setElementAttributeValueParser((ElementAttributeValueParser)X4OLanguageClassLoader.newInstance(getLanguageConfiguration().getDefaultElementAttributeValueParser())); } - if (contextInit.getElementObjectPropertyValue()==null) { - contextInit.setElementObjectPropertyValue((ElementObjectPropertyValue)X4OLanguageClassLoader.newInstance(getLanguageConfiguration().getDefaultElementObjectPropertyValue())); + if (languageSession.getElementObjectPropertyValue()==null) { + languageSession.setElementObjectPropertyValue((ElementObjectPropertyValue)X4OLanguageClassLoader.newInstance(getLanguageConfiguration().getDefaultElementObjectPropertyValue())); } } catch (Exception e) { throw new RuntimeException(e.getMessage(),e); } - return contextInit; + return languageSession; } /** diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguageSession.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguageSession.java index f8c0654..4310870 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguageSession.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/DefaultX4OLanguageSession.java @@ -22,6 +22,8 @@ */ package org.x4o.xml.lang; +import org.x4o.xml.io.X4OConnectionException; +import org.x4o.xml.lang.phase.X4OPhaseException; /** * An DefaultX4OLanguageSession. @@ -37,4 +39,16 @@ public class DefaultX4OLanguageSession extends AbstractX4OLanguageSession { public DefaultX4OLanguageSession(X4OLanguage language) { super(language); } + + @Override + public void close() throws X4OConnectionException { + if (getLanguage().getPhaseManager() == null) { + return; + } + try { + getLanguage().getPhaseManager().doReleasePhaseManual(this); + } catch (X4OPhaseException e) { + throw new X4OConnectionException(e); + } + } } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/X4OLanguageSession.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/X4OLanguageSession.java index 802f63e..9b2873d 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/X4OLanguageSession.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/X4OLanguageSession.java @@ -30,6 +30,7 @@ import javax.el.ExpressionFactory; import org.x4o.xml.element.Element; import org.x4o.xml.element.ElementAttributeValueParser; import org.x4o.xml.element.ElementObjectPropertyValue; +import org.x4o.xml.io.X4OConnectionException; import org.x4o.xml.io.X4ODebugWriter; import org.x4o.xml.lang.phase.X4OPhase; @@ -39,7 +40,7 @@ import org.x4o.xml.lang.phase.X4OPhase; * @author Willem Cazander * @version 1.0 Feb 14, 2007 */ -public interface X4OLanguageSession { +public interface X4OLanguageSession extends AutoCloseable { /** * @return Returns the language from which this session in created. @@ -112,10 +113,15 @@ public interface X4OLanguageSession { /** * @return Returns the phase this session will stop processing. */ - public String getPhaseStop(); + String getPhaseStop(); /** * @return Returns a list of phases we skip while processing. */ - public List getPhaseSkip(); + List getPhaseSkip(); + + /** + * Closes this language session + */ + void close() throws X4OConnectionException; } diff --git a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/DefaultX4OPhaseManager.java b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/DefaultX4OPhaseManager.java index 099d4b5..15e2318 100644 --- a/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/DefaultX4OPhaseManager.java +++ b/nx01-x4o-driver/src/main/java/org/x4o/xml/lang/phase/DefaultX4OPhaseManager.java @@ -225,7 +225,8 @@ PHASE_ORDER = { *startupX4OPhase, releaseRequested = X4OPhaseLanguageWrite.WRITE_RELEASE; } if (releaseRequested==null) { - throw new IllegalStateException("No manual release requested."); + return; // No manual release requested + //throw new IllegalStateException("No manual release requested."); } if (languageSession.getRootElement()==null) { return; // no root element , empty xml document ? diff --git a/nx01-x4o-driver/src/test/java/org/x4o/xml/core/NamespaceUriTest.java b/nx01-x4o-driver/src/test/java/org/x4o/xml/core/NamespaceUriTest.java index 4b8e9db..0cfef08 100644 --- a/nx01-x4o-driver/src/test/java/org/x4o/xml/core/NamespaceUriTest.java +++ b/nx01-x4o-driver/src/test/java/org/x4o/xml/core/NamespaceUriTest.java @@ -41,44 +41,35 @@ public class NamespaceUriTest { @Test public void testSimpleUri() throws Exception { - X4OLanguageSession context = null; TestDriver driver = TestDriver.getInstance(); X4OReaderSession reader = driver.createReaderSession(); reader.addPhaseSkip(X4OPhaseLanguageRead.READ_RELEASE); - try { - context = reader.readResourceSession("tests/namespace/uri-simple.xml"); - Assertions.assertEquals(true,context.getRootElement().getChilderen().size()==1); - } finally { - reader.releaseSession(context); + try (X4OLanguageSession session = reader.createLanguageSession()) { + reader.readResourceSession(session, "tests/namespace/uri-simple.xml"); + Assertions.assertEquals(true,session.getRootElement().getChilderen().size()==1); } } @Test public void testEmptyUri() throws Exception { - X4OLanguageSession context = null; TestDriver driver = TestDriver.getInstance(); X4OReaderSession reader = driver.createReaderSession(); reader.addPhaseSkip(X4OPhaseLanguageRead.READ_RELEASE); reader.setProperty(DefaultX4OReader.DOC_EMPTY_NAMESPACE_URI, "http://test.junit.x4o.org/xml/ns/junit-test-lang"); - try { - context = reader.readResourceSession("tests/namespace/uri-empty.xml"); - Assertions.assertEquals(true,context.getRootElement().getChilderen().size()==1); - } finally { - reader.releaseSession(context); + try (X4OLanguageSession session = reader.createLanguageSession()) { + reader.readResourceSession(session, "tests/namespace/uri-empty.xml"); + Assertions.assertEquals(true,session.getRootElement().getChilderen().size()==1); } } @Test public void testSchemaUri() throws Exception { - X4OLanguageSession context = null; TestDriver driver = TestDriver.getInstance(); X4OReaderSession reader = driver.createReaderSession(); reader.addPhaseSkip(X4OPhaseLanguageRead.READ_RELEASE); - try { - context = reader.readResourceSession("tests/namespace/uri-schema.xml"); - Assertions.assertEquals(true,context.getRootElement().getChilderen().size()==1); - } finally { - reader.releaseSession(context); + try (X4OLanguageSession session = reader.createLanguageSession()) { + reader.readResourceSession(session, "tests/namespace/uri-schema.xml"); + Assertions.assertEquals(true,session.getRootElement().getChilderen().size()==1); } } } diff --git a/nx01-x4o-driver/src/test/java/org/x4o/xml/core/X4ODebugWriterTest.java b/nx01-x4o-driver/src/test/java/org/x4o/xml/core/X4ODebugWriterTest.java index b030b70..b3714c7 100644 --- a/nx01-x4o-driver/src/test/java/org/x4o/xml/core/X4ODebugWriterTest.java +++ b/nx01-x4o-driver/src/test/java/org/x4o/xml/core/X4ODebugWriterTest.java @@ -86,8 +86,8 @@ public class X4ODebugWriterTest { Assertions.assertFalse(debug.length()==0, "no debug content"); Assertions.assertTrue(debug.length()>20, "debug content to small"); - //System.out.println("=================== Reader Output ======================"); - //System.out.println(debug); + System.out.println("=================== Reader Output ======================"); + System.out.println(debug); debugFile.delete(); } diff --git a/nx01-x4o-driver/src/test/java/org/x4o/xml/io/X4OReaderSessionTest.java b/nx01-x4o-driver/src/test/java/org/x4o/xml/io/X4OReaderSessionTest.java index bcffe16..691d7d3 100644 --- a/nx01-x4o-driver/src/test/java/org/x4o/xml/io/X4OReaderSessionTest.java +++ b/nx01-x4o-driver/src/test/java/org/x4o/xml/io/X4OReaderSessionTest.java @@ -62,8 +62,7 @@ public class X4OReaderSessionTest { TestDriver driver = TestDriver.getInstance(); X4OReaderSession reader = driver.createReaderSession(); File xmlFile = copyResourceToTempFile(); - X4OLanguageSession context = reader.readFileSession(xmlFile.getAbsolutePath()); - TestObjectRoot root = (TestObjectRoot)context.getRootElement().getElementObject(); + TestObjectRoot root = reader.readFile(xmlFile.getAbsolutePath()); Assertions.assertNotNull(root); Assertions.assertTrue(root.getTestBeans().size()>0); TestBean bean = root.getTestBeans().get(0); @@ -77,7 +76,7 @@ public class X4OReaderSessionTest { Exception e = null; try { String nullFileName = null; - reader.readFileSession(nullFileName); + reader.readFile(nullFileName); } catch (Exception catchE) { e = catchE; } @@ -92,8 +91,7 @@ public class X4OReaderSessionTest { TestDriver driver = TestDriver.getInstance(); X4OReaderSession reader = driver.createReaderSession(); File xmlFile = copyResourceToTempFile(); - X4OLanguageSession context = reader.readFileSession(xmlFile); - TestObjectRoot root = (TestObjectRoot)context.getRootElement().getElementObject(); + TestObjectRoot root = reader.readFile(xmlFile); Assertions.assertNotNull(root); Assertions.assertTrue(root.getTestBeans().size()>0); TestBean bean = root.getTestBeans().get(0); @@ -107,7 +105,7 @@ public class X4OReaderSessionTest { Exception e = null; try { File nullFile = null; - reader.readFileSession(nullFile); + reader.readFile(nullFile); } catch (Exception catchE) { e = catchE; } @@ -125,7 +123,7 @@ public class X4OReaderSessionTest { try { File tempFile = File.createTempFile("test-file", ".xml"); tempFile.delete(); - reader.readFileSession(tempFile); + reader.readFile(tempFile); } catch (Exception catchE) { e = catchE; } @@ -144,7 +142,7 @@ public class X4OReaderSessionTest { X4OReaderSession reader = driver.createReaderSession(); Exception e = null; try { - reader.readFileSession(new File("/etc/shadow")); + reader.readFile(new File("/etc/shadow")); } catch (Exception catchE) { e = catchE; } @@ -158,8 +156,7 @@ public class X4OReaderSessionTest { public void testReadResource() throws Exception { TestDriver driver = TestDriver.getInstance(); X4OReaderSession reader = driver.createReaderSession(); - X4OLanguageSession context = reader.readResourceSession("tests/attributes/test-bean.xml"); - TestObjectRoot root = (TestObjectRoot)context.getRootElement().getElementObject(); + TestObjectRoot root = reader.readResource("tests/attributes/test-bean.xml"); Assertions.assertNotNull(root); } @@ -169,7 +166,7 @@ public class X4OReaderSessionTest { X4OReaderSession reader = driver.createReaderSession(); Exception e = null; try { - reader.readResourceSession(null); + reader.readResource(null); } catch (Exception catchE) { e = catchE; } @@ -183,13 +180,12 @@ public class X4OReaderSessionTest { public void testReadString() throws Exception { TestDriver driver = TestDriver.getInstance(); X4OReaderSession reader = driver.createReaderSession(); - X4OLanguageSession context = reader.readStringSession( + TestObjectRoot root = reader.readString( ""+ ""+ ""+ "" ); - TestObjectRoot root = (TestObjectRoot)context.getRootElement().getElementObject(); Assertions.assertNotNull(root); Assertions.assertTrue(root.getTestBeans().size()>0); TestBean bean = root.getTestBeans().get(0); @@ -203,7 +199,7 @@ public class X4OReaderSessionTest { X4OReaderSession reader = driver.createReaderSession(); Exception e = null; try { - reader.readStringSession(null); + reader.readString(null); } catch (Exception catchE) { e = catchE; } @@ -218,8 +214,7 @@ public class X4OReaderSessionTest { TestDriver driver = TestDriver.getInstance(); X4OReaderSession reader = driver.createReaderSession(); URL xmlUrl = Thread.currentThread().getContextClassLoader().getResource("tests/attributes/test-bean.xml"); - X4OLanguageSession context = reader.readUrlSession(xmlUrl); - TestObjectRoot root = (TestObjectRoot)context.getRootElement().getElementObject(); + TestObjectRoot root = reader.readUrl(xmlUrl); Assertions.assertNotNull(root); Assertions.assertTrue(root.getTestBeans().size()>0); TestBean bean = root.getTestBeans().get(0); @@ -232,7 +227,7 @@ public class X4OReaderSessionTest { X4OReaderSession reader = driver.createReaderSession(); Exception e = null; try { - reader.readUrlSession(null); + reader.readUrl(null); } catch (Exception catchE) { e = catchE; } diff --git a/nx01-x4o-driver/src/test/java/org/x4o/xml/lang/meta/ParentObjectTest.java b/nx01-x4o-driver/src/test/java/org/x4o/xml/lang/meta/ParentObjectTest.java index d0da6dc..3682889 100644 --- a/nx01-x4o-driver/src/test/java/org/x4o/xml/lang/meta/ParentObjectTest.java +++ b/nx01-x4o-driver/src/test/java/org/x4o/xml/lang/meta/ParentObjectTest.java @@ -42,18 +42,15 @@ public class ParentObjectTest { @Test public void testParentElement() throws Exception { - X4OLanguageSession context = null; MTestDriver driver = new MTestDriver(); X4OReaderSession reader = driver.createReaderSession(); reader.addPhaseSkip(X4OPhaseLanguageRead.READ_RELEASE); - try { - context = reader.readResourceSession("junit/test-meta-parent-element.xml"); - Assertions.assertEquals(1,context.getRootElement().getChilderen().size()); - Element childElement = context.getRootElement().getChilderen().get(0); + try (X4OLanguageSession session = reader.createLanguageSession()) { + reader.readResourceSession(session, "junit/test-meta-parent-element.xml"); + Assertions.assertEquals(1,session.getRootElement().getChilderen().size()); + Element childElement = session.getRootElement().getChilderen().get(0); JLabel test = (JLabel)childElement.getElementObject(); Assertions.assertEquals("parentTest",test.getText()); - } finally { - reader.releaseSession(context); } } diff --git a/nx01-x4o-driver/src/test/java/org/x4o/xml/lang/meta/ReferenceStoreTest.java b/nx01-x4o-driver/src/test/java/org/x4o/xml/lang/meta/ReferenceStoreTest.java index 37c2368..571371b 100644 --- a/nx01-x4o-driver/src/test/java/org/x4o/xml/lang/meta/ReferenceStoreTest.java +++ b/nx01-x4o-driver/src/test/java/org/x4o/xml/lang/meta/ReferenceStoreTest.java @@ -40,46 +40,37 @@ public class ReferenceStoreTest { @Test public void testMetaGeneric() throws Exception { - X4OLanguageSession context = null; MTestDriver driver = new MTestDriver(); X4OReaderSession reader = driver.createReaderSession(); reader.addPhaseSkip(X4OPhaseLanguageRead.READ_RELEASE); - try { - context = reader.readResourceSession("junit/test-meta-generic.xml"); - Assertions.assertEquals(Date.class.getName(),context.getRootElement().getChilderen().get(0).getElementObject().getClass().getName()); - } finally { - reader.releaseSession(context); + try (X4OLanguageSession session = reader.createLanguageSession()) { + reader.readResourceSession(session, "junit/test-meta-generic.xml"); + Assertions.assertEquals(Date.class.getName(),session.getRootElement().getChilderen().get(0).getElementObject().getClass().getName()); } } @Test public void testLoadClass() throws Exception { - X4OLanguageSession context = null; MTestDriver driver = new MTestDriver(); X4OReaderSession reader = driver.createReaderSession(); reader.addPhaseSkip(X4OPhaseLanguageRead.READ_RELEASE); - try { - context = reader.readResourceSession("junit/test-meta-reference.xml"); - Assertions.assertEquals(Date.class.getName(),context.getRootElement().getChilderen().get(0).getElementObject().getClass().getName()); - } finally { - reader.releaseSession(context); + try (X4OLanguageSession session = reader.createLanguageSession()) { + reader.readResourceSession(session, "junit/test-meta-reference.xml"); + Assertions.assertEquals(Date.class.getName(),session.getRootElement().getChilderen().get(0).getElementObject().getClass().getName()); } } @Test public void testStoreRef() throws Exception { - X4OLanguageSession context = null; MTestDriver driver = new MTestDriver(); X4OReaderSession reader = driver.createReaderSession(); reader.addPhaseSkip(X4OPhaseLanguageRead.READ_RELEASE); - try { - context = reader.readResourceSession("junit/test-meta-reference.xml"); - Assertions.assertEquals(Date.class.getName(),context.getRootElement().getChilderen().get(0).getElementObject().getClass().getName()); - Assertions.assertEquals(Date.class.getName(),context.getRootElement().getChilderen().get(1).getElementObject().getClass().getName()); - Assertions.assertEquals(Date.class.getName(),context.getRootElement().getChilderen().get(2).getElementObject().getClass().getName()); - Assertions.assertEquals(Date.class.getName(),context.getRootElement().getChilderen().get(3).getElementObject().getClass().getName()); - } finally { - reader.releaseSession(context); + try (X4OLanguageSession session = reader.createLanguageSession()) { + reader.readResourceSession(session, "junit/test-meta-reference.xml"); + Assertions.assertEquals(Date.class.getName(),session.getRootElement().getChilderen().get(0).getElementObject().getClass().getName()); + Assertions.assertEquals(Date.class.getName(),session.getRootElement().getChilderen().get(1).getElementObject().getClass().getName()); + Assertions.assertEquals(Date.class.getName(),session.getRootElement().getChilderen().get(2).getElementObject().getClass().getName()); + Assertions.assertEquals(Date.class.getName(),session.getRootElement().getChilderen().get(3).getElementObject().getClass().getName()); } } }