I do not see anything in that stack trace that leads me to believe
iBATIS is involved in any way.
I'd take a closer look at the
gnu.xml.pipeline.ValidationConsumer$ChildrenRecognizer stuff, wherever
that is coming from.
Larry
On 11/17/06, Gary Griffin <[EMAIL PROTECTED]> wrote:
Hi!
I'm new to iBatis and am trying to implement it in some of my code that's
running in a J2EE enivronment on JBoss. Using the following code, I get a
StackOverflowError:
try {
// neither my SqlMapConfig file nor the example one delivered with
iBatis seems to work:
String resource = "WEB-INF/SqlMapConfig.xml";
// the following line works:
Reader configReader = Resources.getResourceAsReader(resource);
/*
* I used this code to make sure the reading of the XML was working:
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(configReader);
char[] cbuf = new char[65536];
int read_this_time = 0;
read_this_time = br.read(cbuf,0,65536);
sb.append(cbuf,0,read_this_time);
System.out.println(sb.toString());
*/
//...but this line fails:
SqlMapClient sqlMap =
SqlMapClientBuilder.buildSqlMapClient(configReader);
List rowList = sqlMap.queryForList("getRowList", listParams);
data.getRequest().setAttribute("rowlist", rowList);
} catch (IOException io) {
throw new RuntimeException("Error: " + io, io);
} catch (SQLException se) {
throw new RuntimeException("Error: " + se, se);
} catch (Exception e) {
throw new RuntimeException("Error: " + e, e);
}
The stack trace:
javax.servlet.ServletException: Servlet execution threw an exception
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
root cause
java.lang.StackOverflowError
java.lang.Object.hashCode(Native Method)
java.util.Hashtable.get(Hashtable.java:336)
gnu.xml.pipeline.ValidationConsumer$ChildrenRecognizer.patchNext(ValidationConsumer.java:1570)
gnu.xml.pipeline.ValidationConsumer$ChildrenRecognizer.patchNext(ValidationConsumer.java:1591)
gnu.xml.pipeline.ValidationConsumer$ChildrenRecognizer.patchNext(ValidationConsumer.java:1591)
gnu.xml.pipeline.ValidationConsumer$ChildrenRecognizer.patchNext(ValidationConsumer.java:1591)
gnu.xml.pipeline.ValidationConsumer$ChildrenRecognizer.patchNext(ValidationConsumer.java:1591)
...
Here's the config file that came with the iBatis I have.
(Build Date: 2006/08/16 19:50 Build Number: 638):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!-- Configure a built-in transaction manager. If you're using an
app server, you probably want to use its transaction manager
and a managed datasource -->
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="org.hsqldb.jdbcDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:hsqldb:."/>
<property name="JDBC.Username" value="sa"/>
<property name="JDBC.Password" value="sa"/>
</dataSource>
</transactionManager>
<!-- List the SQL Map XML files. They can be loaded from the
classpath, as they are here (com.domain.data...) -->
<sqlMap resource="com/mydomain/data/Account.xml"/>
<!-- List more here...
<sqlMap resource="com/mydomain/data/Order.xml"/>
<sqlMap resource="com/mydomain/data/Documents.xml"/>
-->
</sqlMapConfig>
If you have any idea what I might be doing wrong, please let me know. It's
as if the XML is causing a never ending loop for some reason. I validated my
XML against the DTD and it looked okay. Here's my XML. I tried with and
without lazy loading enabled:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!-- <settings useStatementNamespaces="false" /> -->
<settings lazyLoadingEnabled="false" />
<transactionManager type="JDBC" >
<dataSource type="JNDI">
<property name="DataSource"
value="java:comp/env/jdbc/qcsql"/>
</dataSource>
</transactionManager>
<sqlMap resource="RowList.xml"/>
</sqlMapConfig>
THANKS!
Gary