Author: jgbutler
Date: Tue Nov 28 13:55:59 2006
New Revision: 480230
URL: http://svn.apache.org/viewvc?view=rev&rev=480230
Log:
Changes for IBATIS-373 - Allow iBATIS to build SqlMapClient from InputStream
Modified:
ibatis/trunk/java/mapper/mapper2/build/version.properties
ibatis/trunk/java/mapper/mapper2/doc/release.txt
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/xml/NodeletParser.java
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/client/SqlMapClientBuilder.java
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XmlConverter.java
Modified: ibatis/trunk/java/mapper/mapper2/build/version.properties
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/build/version.properties?view=diff&rev=480230&r1=480229&r2=480230
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/build/version.properties (original)
+++ ibatis/trunk/java/mapper/mapper2/build/version.properties Tue Nov 28
13:55:59 2006
@@ -1,5 +1,5 @@
#Build version info
-#Mon Nov 27 20:26:47 CST 2006
+#Tue Nov 28 15:50:32 CST 2006
version=2.3.0
-buildDate=2006/11/27 20\:26
-buildNum=672
+buildDate=2006/11/28 15\:50
+buildNum=673
Modified: ibatis/trunk/java/mapper/mapper2/doc/release.txt
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/doc/release.txt?view=diff&rev=480230&r1=480229&r2=480230
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/doc/release.txt (original)
+++ ibatis/trunk/java/mapper/mapper2/doc/release.txt Tue Nov 28 13:55:59 2006
@@ -14,6 +14,8 @@
o Fixed IBATIS-340 - Provide ability to override the default encoding in the
Resources class
o Fixed IBATIS-353 - Probe exception when using inheritance hierarchies
o Fixed IBATIS-366 - Use ResultObjectFactory to create nested classes
+ o Fixed IBATIS-373 - Allow iBATIS to build SqlMapClient from InputStream
+
------------------------------
2.2.0 - Aug 15, 2006
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/xml/NodeletParser.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/xml/NodeletParser.java?view=diff&rev=480230&r1=480229&r2=480230
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/xml/NodeletParser.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/xml/NodeletParser.java
Tue Nov 28 13:55:59 2006
@@ -8,6 +8,7 @@
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
+import java.io.InputStream;
import java.io.Reader;
import java.util.*;
@@ -53,6 +54,15 @@
}
}
+ public void parse(InputStream inputStream) throws NodeletException {
+ try {
+ Document doc = createDocument(inputStream);
+ parse(doc.getLastChild());
+ } catch (Exception e) {
+ throw new NodeletException("Error parsing XML. Cause: " + e, e);
+ }
+ }
+
/**
* Begins parsing from the provided Node.
*/
@@ -147,6 +157,38 @@
return builder.parse(new InputSource(reader));
}
+ /**
+ * Creates a JAXP Document from an InoutStream.
+ */
+ private Document createDocument(InputStream inputStream) throws
ParserConfigurationException, FactoryConfigurationError,
+ SAXException, IOException {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setValidating(validation);
+
+ factory.setNamespaceAware(false);
+ factory.setIgnoringComments(true);
+ factory.setIgnoringElementContentWhitespace(false);
+ factory.setCoalescing(false);
+ factory.setExpandEntityReferences(true);
+
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ builder.setEntityResolver(entityResolver);
+ builder.setErrorHandler(new ErrorHandler() {
+ public void error(SAXParseException exception) throws SAXException {
+ throw exception;
+ }
+
+ public void fatalError(SAXParseException exception) throws SAXException {
+ throw exception;
+ }
+
+ public void warning(SAXParseException exception) throws SAXException {
+ }
+ });
+
+ return builder.parse(new InputSource(inputStream));
+ }
+
public void setValidation(boolean validation) {
this.validation = validation;
}
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/client/SqlMapClientBuilder.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/client/SqlMapClientBuilder.java?view=diff&rev=480230&r1=480229&r2=480230
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/client/SqlMapClientBuilder.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/client/SqlMapClientBuilder.java
Tue Nov 28 13:55:59 2006
@@ -17,6 +17,7 @@
import com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser;
+import java.io.InputStream;
import java.io.Reader;
import java.util.Properties;
@@ -78,4 +79,29 @@
return new SqlMapConfigParser().parse(reader, props);
}
+ /**
+ * Builds an SqlMapClient using the specified input stream.
+ *
+ * @param inputStream An InputStream instance that reads an
sql-map-config.xml file.
+ * The stream should read a well formed sql-map-config.xml
file.
+ * @return An SqlMapClient instance.
+ */
+ public static SqlMapClient buildSqlMapClient(InputStream inputStream) {
+ return new SqlMapConfigParser().parse(inputStream);
+ }
+
+ /**
+ * Builds an SqlMapClient using the specified input stream and properties
file.
+ * <p/>
+ *
+ * @param inputStream An InputStream instance that reads an
sql-map-config.xml file.
+ * The stream should read an well formed sql-map-config.xml
file.
+ * @param props Properties to be used to provide values to dynamic property
tokens
+ * in the sql-map-config.xml configuration file. This
provides an easy way to
+ * achieve some level of programmatic configuration.
+ * @return An SqlMapClient instance.
+ */
+ public static SqlMapClient buildSqlMapClient(InputStream inputStream,
Properties props) {
+ return new SqlMapConfigParser().parse(inputStream, props);
+ }
}
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java?view=diff&rev=480230&r1=480229&r2=480230
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
Tue Nov 28 13:55:59 2006
@@ -28,8 +28,10 @@
import com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig;
import com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig;
import com.ibatis.sqlmap.engine.type.*;
+
import org.w3c.dom.Node;
+import java.io.InputStream;
import java.io.Reader;
import java.util.Iterator;
import java.util.Properties;
@@ -37,6 +39,7 @@
public class SqlMapConfigParser extends BaseParser {
protected final NodeletParser parser = new NodeletParser();
+ private boolean usingStreams;
public SqlMapConfigParser() {
this(null, null);
@@ -78,6 +81,8 @@
reader = vars.sqlMapConfigConv.convertXml(reader);
}
+ usingStreams = false;
+
parser.parse(reader);
return vars.client;
} catch (Exception e) {
@@ -85,6 +90,26 @@
}
}
+ public SqlMapClient parse(InputStream inputStream, Properties props) {
+ vars.properties = props;
+ return parse(inputStream);
+ }
+
+ public SqlMapClient parse(InputStream inputStream) {
+ try {
+ if (vars.sqlMapConfigConv != null) {
+ inputStream = vars.sqlMapConfigConv.convertXml(inputStream);
+ }
+
+ usingStreams = true;
+
+ parser.parse(inputStream);
+ return vars.client;
+ } catch (Exception e) {
+ throw new RuntimeException("Error occurred. Cause: " + e, e);
+ }
+ }
+
private void addSqlMapConfigNodelets() {
parser.addNodelet("/sqlMapConfig/end()", new Nodelet() {
public void process(Node node) throws Exception {
@@ -351,21 +376,39 @@
String resource = attributes.getProperty("resource");
String url = attributes.getProperty("url");
- Reader reader = null;
- if (resource != null) {
- vars.errorCtx.setResource(resource);
- reader = Resources.getResourceAsReader(resource);
- } else if (url != null) {
- vars.errorCtx.setResource(url);
- reader = Resources.getUrlAsReader(url);
+ if (usingStreams) {
+ InputStream inputStream = null;
+ if (resource != null) {
+ vars.errorCtx.setResource(resource);
+ inputStream = Resources.getResourceAsStream(resource);
+ } else if (url != null) {
+ vars.errorCtx.setResource(url);
+ inputStream = Resources.getUrlAsStream(url);
+ } else {
+ throw new SqlMapException("The <sqlMap> element requires either a
resource or a url attribute.");
+ }
+
+ if (vars.sqlMapConv != null) {
+ inputStream = vars.sqlMapConv.convertXml(inputStream);
+ }
+ new SqlMapParser(vars).parse(inputStream);
} else {
- throw new SqlMapException("The <sqlMap> element requires either a
resource or a url attribute.");
- }
+ Reader reader = null;
+ if (resource != null) {
+ vars.errorCtx.setResource(resource);
+ reader = Resources.getResourceAsReader(resource);
+ } else if (url != null) {
+ vars.errorCtx.setResource(url);
+ reader = Resources.getUrlAsReader(url);
+ } else {
+ throw new SqlMapException("The <sqlMap> element requires either a
resource or a url attribute.");
+ }
- if (vars.sqlMapConv != null) {
- reader = vars.sqlMapConv.convertXml(reader);
+ if (vars.sqlMapConv != null) {
+ reader = vars.sqlMapConv.convertXml(reader);
+ }
+ new SqlMapParser(vars).parse(reader);
}
- new SqlMapParser(vars).parse(reader);
}
});
}
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java?view=diff&rev=480230&r1=480229&r2=480230
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
Tue Nov 28 13:55:59 2006
@@ -18,6 +18,7 @@
import com.ibatis.sqlmap.engine.type.TypeHandler;
import org.w3c.dom.Node;
+import java.io.InputStream;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
@@ -48,6 +49,10 @@
public void parse(Reader reader) throws NodeletException {
parser.parse(reader);
+ }
+
+ public void parse(InputStream inputStream) throws NodeletException {
+ parser.parse(inputStream);
}
private void addSqlMapNodelets() {
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java?view=diff&rev=480230&r1=480229&r2=480230
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java
Tue Nov 28 13:55:59 2006
@@ -58,7 +58,6 @@
String timeout = attributes.getProperty("timeout");
String[] additionalResultMapNames;
- List additionalResultMaps = new ArrayList();
vars.errorCtx.setObjectId(id + " statement");
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XmlConverter.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XmlConverter.java?view=diff&rev=480230&r1=480229&r2=480230
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XmlConverter.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XmlConverter.java
Tue Nov 28 13:55:59 2006
@@ -15,6 +15,7 @@
*/
package com.ibatis.sqlmap.engine.builder.xml;
+import java.io.InputStream;
import java.io.Reader;
import java.io.Writer;
@@ -37,4 +38,10 @@
*/
public void convertXml(Reader reader, Writer writer);
+ /**
+ * Get an InputStream based on another InputStream
+ * @param inputStream - an InputStream for the file to convert
+ * @return - the converted file
+ */
+ public InputStream convertXml(InputStream inputStream);
}