You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Fábio Pisaruk <pi...@gmail.com> on 2007/08/30 22:36:14 UTC
xmlbeans and ibatis
Hello!
I´ve got something for you that migth help in getting started with ibatis +
xmlbeans.
Yes, you will have to implement your own ResultObjectFactory but no big deal
´cause it´s easy and painless.
The real problem is to fill xmlbeans arrays. Trust me, I haven´t found a
simple way to do it.
Well, forget this smalltalk and let´s talking business...
First and foremost your custom ResultObjectFactory should resemble this:
public class XMLBeansResultObjectFactory implements
com.ibatis.sqlmap.engine.mapping.result.ResultObjectFactory {
private static final Log logger = LogFactory
.getLog(XMLBeansResultObjectFactory.class);
public Object createInstance(String statement, Class c) {
try {
for (int i = 0; i < c.getDeclaredClasses().length; i++) {
if (c.getDeclaredClasses()[i].getName().endsWith("Factory"))
{
logger.debug(c.getDeclaredClasses()[i].getName());
Object obj = c.getDeclaredClasses()[i].getMethod(
"newInstance", null).invoke(null, null);
return obj;
}
}
if (Collection.class.isAssignableFrom (c))
return new ArrayList();
return c.newInstance();
} catch (Exception e) {
RuntimeException err = new RuntimeException(
"Erro na tentativa de instar objeto da classe "
+ c.getName() + "\n" + e.getMessage());
err.initCause(e);
throw err;
}
}
public void setProperty(String arg0, String arg1) {
}
}
It´s not that hard to see that it´s using inner static factioy class in
order to build xmlbean object instances.
Second you must inform ibatis to use your custom builder instead of the
provided one.
<sqlMapConfig>
<resultObjectFactory
type="CustomResultObjectFactory" />
...
Remember to use the full qualified class name otherwise it won´t work.
See ya.
--
Visto como se não executa logo a sentença sobre a má obra, o coração dos
filhos dos homens está inteiramente disposto a praticar o mal.
--Nerd´s sign
If you have four classes, Everybody, Somebody, Anybody, and Nobody, if
Somebody has a bug, it could be Anybody 's fault but Nobody really knows,
while Everybody shares responsibility.
--
Visto como se não executa logo a sentença sobre a má obra, o coração dos
filhos dos homens está inteiramente disposto a praticar o mal.
--Nerd´s sign
If you have four classes, Everybody, Somebody, Anybody, and Nobody, if
Somebody has a bug, it could be Anybody 's fault but Nobody really knows,
while Everybody shares responsibility.