<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">


<META content="MSHTML 5.00.3103.1000" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>There IS more to the 
story.&nbsp; We are using EJB.&nbsp; When we get rid of the EJB aspect the 
problem goes away.&nbsp; So, we find that the problem is returning a jdom 8 
Document from EJB.&nbsp; Something in the marshalling process is messing up the 
document so that root.hasChildren() returns true while root.getChildren returns 
a zero sized list after ANY Document has been returned from ANY EJB 
method.&nbsp; Here is the trivial example for reproduction:</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>Make an EJB which 
has this signature in the RemoteInterface:</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>&nbsp; public 
Document getSimpleDoc() throws Exception, RemoteException;</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>In the EJBean class 
implement the remote interface:</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>&nbsp; public 
Document getSimpleDoc() throws Exception {<BR>&nbsp;&nbsp;&nbsp; Element theRoot 
= new Element("Root");<BR>&nbsp;&nbsp;&nbsp; Element levelA = new 
Element("A");<BR>&nbsp;&nbsp;&nbsp; Element levelB = new 
Element("B");<BR>&nbsp;&nbsp;&nbsp; levelB.addContent(new 
Element("levelB").addContent("5"));<BR>&nbsp;&nbsp;&nbsp; 
theRoot.addContent(levelA.addContent(levelB));<BR>&nbsp;&nbsp;&nbsp; Document 
doc = new Document(theRoot);<BR>Element root = 
doc.getRootElement();<BR>System.out.println("Inside of the EJB Method: 
root.hasChildren(): " + root.hasChildren() + " root.getChildren().size(): " 
+&nbsp; root.getChildren().size() );<BR>&nbsp;&nbsp;&nbsp; return doc;<BR>&nbsp; 
}<BR></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>Now make a trivial 
JSP to call the EJB getSimpleDoc() method:</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>&lt;%@ page 
import="<BR>&nbsp; javax.naming.*;<BR>&nbsp; 
com.mycompany.ejb.session.productdisplay.*;<BR>&nbsp; org.jdom.*;<BR>&nbsp; 
org.jdom.output.XMLOutputter;<BR>&nbsp; 
com.mycompany.utilities.*;"&nbsp;&nbsp;&nbsp; <BR>&nbsp; 
errorPage="/components/common/ErrorPage.jsp"<BR>%&gt;<BR>&lt;%<BR>&nbsp; Context 
ctx = Utils.getServerInitialContext();<BR>&nbsp; ProductDisplayHome 
productDisplayHome = 
(ProductDisplayHome)ctx.lookup("ProductDisplayHome");<BR>&nbsp; ProductDisplay 
productDisplay = productDisplayHome.create();<BR>&nbsp; Document doc = 
productDisplay.getSimpleDoc();<BR>Element root = 
doc.getRootElement();<BR>out.print("Inside of the JSP (the Caller) Method: 
root.hasChildren(): " + root.hasChildren() + " root.getChildren().size(): " 
+&nbsp; root.getChildren().size() );<BR>//&nbsp; XMLOutputter xo = new 
XMLOutputter("&nbsp; ", true);<BR>//&nbsp; 
xo.output(doc,System.out);</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002><BR>%&gt;</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>You will see that 
the System.out.println from WITHIN the EJB (before the Document gets returned -- 
and therefore, before it gets marshalled and unmarshalled) prints 
out:</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>&nbsp;&nbsp; Inside 
of the EJB Method: root.hasChildren(): true root.getChildren().size(): 
1</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>But inside of the 
JSP when dealing with the Document that has gone thru serialization (marshalling 
and unmarshalling) you get:</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>&nbsp; Inside of the 
JSP (the Caller) Method: root.hasChildren(): true root.getChildren().size(): 0 
</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>For the very same 
Document...the only difference being that the Document was passed thru EJB 
Marshalling and Unmarshalling, you have two different getChildren() of root 
results.&nbsp; </SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>My theory is that 
something in JDOM version 8 RC has made some field "transient" that shouldn't be 
and therefore the Document object is different before serialization than it is 
after serialization.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002>I think that this is 
a major problem for anyone returning Document objects from EJB methods (like we 
were).</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002>Thanks</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=503405916-29032002></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=503405916-29032002></SPAN></FONT><FONT 
face=Arial size=2><SPAN class=503405916-29032002>Tom 
Preston<BR></DIV></SPAN></FONT></BODY></HTML>