Thanks All,
To sum it up I did the following (please
comment if there is a faster/better way):
-Created a select statement that returns
xml:
<select
id="EmpSearch" resultClass="xml"
xmlResultName="Employee">
-Create an inner class in the DAO class
for the rowhandler to “stich” and control the creation of the xml
Document (using dom4j):
public
static class xmlRowHandler implements RowHandler{
private Document domDocument;
public xmlRowHandler(String xmlResultName){
domDocument = DocumentHelper.createDocument();
Element root = getDomDocument().addElement( xmlResultName );
}
public void handleRow(Object object){
try{
Document xmlFragment = DocumentHelper.parseText((String) object);
Element xmlElement = xmlFragment.getRootElement();
Element root = getDomDocument().getRootElement();
root.add(xmlElement);
}catch(DocumentException e){
}
}
public Document getDomDocument() {
return domDocument;
}
}
-Call the API to fetch the list “through”
the rowhandler:
public
Document EmpSearch(String keywords, String filter){
Object parameterObject = new EmployeeSearch(keywords,filter);
RowHandler rowHandler=new xmlRowHandler("Employees");
queryWithRowHandler("EmpSearch", parameterObject, rowHandler); // go
through the list
Document doc = ((xmlRowHandler) rowHandler).getDomDocument();
return doc;
}
Clinton; I found page 44 just after I’ve send the mail, this was
indeed good enough to get it working but I guess a bit outdated.
I had to make to make the following
assumptions
-The API methode is called queryWithRowHandler
and not queryForList
-The Rowhandler interface handleRow
methode has only the object as parameter and not object and list
F.Y.I. ( http://forum.java.sun.com/thread.jspa?forumID=34&tstart=30&threadID=542044&trange=15
)
When running the query with XML as result
on Tomcat with java 1.5.0_03 it result in error:
javax.xml.transform.TransformerFactoryConfigurationError:
Provider org.apache.xalan.processor.TransformerFactoryImpl not found
This is because tomcat
java is called with the following argument:
-Djava.endorsed.dirs="X:\my_app\Portal\tomcat\common\endorsed"
In this directory you find two jar files: xercesImpl.jar and xml-apis.jar
needed by tomcat and that must be loaded before all xmsl stuff present in the
jdk (1.4 naming problem). And in the file xml-apis.jar the
TransformerFactoryImpl is set to
"org.apache.xalan.processor.TransformerFactoryImpl".
The solution: remove the file xml-apis.jar from the directory.
From: Samael Cui
[mailto:[EMAIL PROTECTED]
Sent: 11 October 2005 04:09 AM
To: [email protected];
Clinton Begin
Subject: Re: XML document output
from ibatis
U can get a List by
queryForList or get a String object by queryForObject.The list contents a
String array.The String is xml format.
2005/10/10, Clinton Begin <[EMAIL PROTECTED]>:
RowHandler is fully documented in the iBATIS for Java developer
guide. Page 44 had an explanation, and page 45 has an example.
There's no difference in usage whether you're returning XML, a JavaBean or a
primitive.
Cheers,
Clinton
On 10/10/05, Meindert
<
[EMAIL PROTECTED]> wrote:
I can't find info about the use of a RowHandler in the wikki.
Could anybody please post code/example for returning an org.w3c.dom.Document
using a RowHandler?
-----Original Message-----
From: Ashish Kulkarni [mailto: [EMAIL PROTECTED]]
Sent: 13 September 2005 06:07 PM
To: [email protected]
Subject: Re: XML document output from ibatis
Parshanth
do you have a code/example of such DAO
--- Prashanth Sukumaran <[EMAIL PROTECTED] >
wrote:
> Hi Ashish,
>
> Cool this is fine. But the idea of a RowHandler is
> to have such conversions out of the DAO. Also it
> looks clean as if IBatis is returning the Document
> object.
>
> The work of the DAO layer is to only execute queries
> and return the data. You can externalize such
> transformations into the RowHandler.
>
> Rgds
> Prashanth Sukumaran.
>
> Ashish Kulkarni < [EMAIL PROTECTED]> wrote:
> Hi
> this is a way i got around my problem
> // definiation in xml file
>
>
parameterClass="java.math.BigDecimal"xmlResultName="PO">//
> SQL querry goes herre
> // to get a list of all data from ibatis
>
> List list = client.queryForList("getdata", new
> BigDecimal("12345"));
> // go through the list
> for (int i = 0; i < list.size(); i++)
> {
> String obj = (String) list.get(i);
> // get byte array input stream from string
> ByteArrayInputStream byteArray = new
> ByteArrayInputStream( obj.getBytes());
> // create DMO object
> Document doc =
> factory.newDocumentBuilder().parse(byteArray);
> }
>
>
> Ashish
>
>
> --- Larry Meadors wrote:
>
> > Wit apologies to Clinton,
my official opinion on
> > iBATIS XML results is
> > that they suck.
> >
> > If you want to do what you are describing, do it
> in
> > your DAO class. If
> > you want multiple records, do it with a
> RowHandler.
> >
> > Larry
> >
> >
> > On 9/12/05, Ashish Kulkarni
> > wrote:
> > > Hi
> > > Is it possible to get XML document from ibatis
> > > I am trying to get a XML document as a
> resultClass
> > > from ibatis, here is what i am doing
> > > > > parameterClass="java.math.BigDecimal">
>
> xmlResultName="PO" >>
> SELECT A.PCPORD AS PCPORD> >
> from Pu1012> > WHERE A.Pcpord = #value#> >
> > > String str =
> > > (String)client.queryForObject("getPOData",
> poNum);
> > >
> > > I cannot define resultClass =
> > "org.w3c.dom.Document"
> > >
> > > Is it possible to do so
> > >
> > > Ashish
> > >
> > >
> __________________________________________________
> > > Do You Yahoo!?
> > > Tired of spam? Yahoo! Mail has the best spam
> > protection around
> > > http://mail.yahoo.com
> > >
> >
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam
> protection around
> http://mail.yahoo.com
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam
> protection around
> http://mail.yahoo.com
A$HI$H
__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.com
--
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.344 / Virus Database: 267.10.19/92 - Release Date: 07/09/2005
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.344 / Virus Database: 267.11.13/126 - Release Date: 09/10/2005
--
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.344 / Virus Database: 267.11.13/126 - Release Date: 09/10/2005