Hi there!
This one is good! ;D
I have nodetypes as follows:
Hierarchy:
CMSObject
Hierarchy
Page
Fragment
We only create nodes of type Page and Fragment and a page can contain
several fragments because hierarchy node specifies that one or more
CMSObjects can be children of nodes of it. And of course nodes that
extends it.
Well I can save a page with it's fragments. That works well. just adding
them as childrens. That's great!
And I can retrieve the page also! Normal eh? But not! This piece of code
fails:
Page page = pageManager.getPage("/test002.psml");
System.out.println("This is page " + page.getId());
// Temp test
JetspeedPageImpl jspage = (JetspeedPageImpl) page;
---->>> Here it fails: Because proxy inside the collection
for(Iterator<JetspeedCMSObject> it = jspage.getChildren().iterator();
it.hasNext(); )
{
JetspeedFragmentImpl child = (JetspeedFragmentImpl) it.next();
if(child instanceof JetspeedFragmentImpl)
{
System.out.println("Is Fragment: " + child.getId());
}
}
And it fails because the proxy fails to load childrens on first try.
Don't know why because of log problem I have (I have open another
thread).
SEE DEBUG BELOW
Curious thing is that it tries to load two times the fragment inside the
page. One as page and one as fragment. (Check last two lines of first
try).
When I stop to debug before that point I can use the watch window in
eclipse and click on the proxy that fills the collection. This causes it
to try loading. It shows same error. But if I try a second time it
shows. Last line with:
"Target loaded".
So it works! But only the second time.
Mmmmmmmmm. Strange...
Any help on this?
Thank you in advance.
========================= NOTICE (UPDATE)===================
I added a try like this before the sentence that fails:
List<JetspeedCMSObject> child = jspage.getChildren();
try
{
child.iterator();
}catch(Exception ex)
{
log.debug("Exception occurred: " + ex.getMessage());
}
And found a error like this one:
DEBUG
org.apache.jetspeed.page.TestJackrabbitPageManager.testBasicGetPage(TestJackrabbitPageManager.java:216):
Exception occurred: Cannot set the field parentFolder in the class :
org.apache.jetspeed.om.model.JetspeedFragmentImpl; nested exception is
java.lang.IllegalArgumentException: Cannot invoke
org.apache.jetspeed.om.model.JetspeedCMSObjectImpl.setParentFolder on bean
class 'class org.apache.jetspeed.om.model.JetspeedFragmentImpl' - argument type
mismatch - had objects of type "org.apache.jetspeed.om.model.JetspeedPageImpl"
but expected signature "org.apache.jetspeed.om.model.interfaces.JetspeedFolder"
But why the second time it works?! With this try and catch everything
works well...
===========================================================
============================================ LOG =================
DEBUG
org.apache.jackrabbit.ocm.manager.objectconverter.impl.SimpleFieldsHelper.retrieveSimpleField(SimpleFieldsHelper.java:184):
retrieveSimpleField: Use default value from property definition for missing
mapped property j2:name of class 'org.apache.jetspeed.om.model.JetspeedPageImpl'
DEBUG
org.apache.jackrabbit.ocm.manager.collectionconverter.impl.NTCollectionConverterImpl.doGetCollection(NTCollectionConverterImpl.java:230):
Collection node found : /test002.psml/P-129b887435c-10000
DEBUG
org.apache.jackrabbit.ocm.manager.objectconverter.impl.SimpleFieldsHelper.retrieveSimpleField(SimpleFieldsHelper.java:184):
retrieveSimpleField: Use default value from property definition for missing
mapped property j2:title of class
'org.apache.jetspeed.om.model.JetspeedFragmentImpl'
DEBUG
org.apache.jackrabbit.ocm.manager.objectconverter.impl.SimpleFieldsHelper.retrieveSimpleField(SimpleFieldsHelper.java:184):
retrieveSimpleField: Use default value from property definition for missing
mapped property j2:name of class
'org.apache.jetspeed.om.model.JetspeedFragmentImpl'
DEBUG
org.apache.jackrabbit.ocm.manager.objectconverter.impl.SimpleFieldsHelper.retrieveSimpleField(SimpleFieldsHelper.java:184):
retrieveSimpleField: Use default value from property definition for missing
mapped property j2:name of class 'org.apache.jetspeed.om.model.JetspeedPageImpl'
============= SECOND TRY WITH eclipse debugging after this it works.
DEBUG
org.apache.jackrabbit.ocm.manager.collectionconverter.impl.NTCollectionConverterImpl.doGetCollection(NTCollectionConverterImpl.java:230):
Collection node found : /test002.psml/P-129b887435c-10000
DEBUG
org.apache.jackrabbit.ocm.manager.objectconverter.impl.AbstractLazyLoader.getTarget(AbstractLazyLoader.java:59):
Target loaded