You are viewing a plain text version of this content. The canonical link for it is here.
Posted to graffito-dev@incubator.apache.org by Dan Connelly <ds...@adelphia.net> on 2006/09/02 10:38:18 UTC
Re: IGNORE ManageableCollectionUtil should not throw "unsupported"
JcrMapping exception.
Oops. This is problem is solved fairly easily by over-riding the
getCollection method. (But, it is a bit tricky there to search the
type hierarchy of the Class collectionFieldClass to determine the
wrapper to use.)
Sorry for posting half-baked my problems and solutions. (But my
fumbling is a case-study on why the "Advanced Mapping Strategy" pages
need to be completed.)
Dan Connelly wrote:
> I want to use a custom collectionConverter, MyCollectionConverterImpl.
>
> That collectionConverter can decide what to do with "unsupported"
> collections from my *given* object model. (Object model cannot be
> changed.) In particular, MyCollectionConverterImpl will wrap an
> unsupported collection as a ManageableCollection and delegate its work
> to a standard collection converter.
> The collection type is discovered by reflection in the
> objectConverter, so it cannot be coerced in the ocm mapping.
>
> Unfortunately, the default objectConverter invokes its own wrapping
> tool, ManageableCollectionUtil, just before the call to
> insertCollection in the custom collectionConverter.
> ManageableCollectionUtil will throw an exception before the custom
> collectionConverter gets its chance to wrap the unsupported collection
> type. The call to insertCollection in the custom
> collectionConverter is never invoked.
>
> A workaround would be to over-ride method insertCollectionFields using
> a custom objectConverter. However, this method is private in the
> standard objectConverter. Thus the method work cannot be delegated.
> Code would need to be copied into the custom objectConverter. Not
> good. But even if this method was public and code copying was not
> needed, the object converter is not the right place for collection
> conversions.
>
> Why not make the collectionConverters responsible for throwing an
> exception on (truly) unsupported collection types?
> Don't throw this exception from ManageableCollectionUtil. Just leave
> an "unsupported" collection type alone there and let the
> collectionConverter deal with any unsupported collection type that may
> be given to it.
>
> -- Dan
>
>
>
Re: DON'T IGNORE ManageableCollectionUtil should not throw "unsupported"
JcrMapping exception.
Posted by Dan Connelly <ds...@adelphia.net>.
Hmmm. That didn't work either. There really is no good way to do
this except to copy code from ObjectConverterImpl into
MyObjectConverterImpl where I can hack my ManageableCollection wrapper
for collection types I need to support. I also needed to make 2
methods public in ObjectConverterImpl. Ugh.
Dan Connelly wrote:
> Oops. This is problem is solved fairly easily by over-riding the
> getCollection method. (But, it is a bit tricky there to search the
> type hierarchy of the Class collectionFieldClass to determine the
> wrapper to use.)
>
> Sorry for posting half-baked my problems and solutions. (But my
> fumbling is a case-study on why the "Advanced Mapping Strategy" pages
> need to be completed.)
>
>
> Dan Connelly wrote:
>
>> I want to use a custom collectionConverter, MyCollectionConverterImpl.
>>
>> That collectionConverter can decide what to do with "unsupported"
>> collections from my *given* object model. (Object model cannot be
>> changed.) In particular, MyCollectionConverterImpl will wrap an
>> unsupported collection as a ManageableCollection and delegate its
>> work to a standard collection converter. The collection type is
>> discovered by reflection in the objectConverter, so it cannot be
>> coerced in the ocm mapping.
>>
>> Unfortunately, the default objectConverter invokes its own wrapping
>> tool, ManageableCollectionUtil, just before the call to
>> insertCollection in the custom collectionConverter.
>> ManageableCollectionUtil will throw an exception before the custom
>> collectionConverter gets its chance to wrap the unsupported
>> collection type. The call to insertCollection in the custom
>> collectionConverter is never invoked.
>>
>> A workaround would be to over-ride method insertCollectionFields
>> using a custom objectConverter. However, this method is private in
>> the standard objectConverter. Thus the method work cannot be
>> delegated. Code would need to be copied into the custom
>> objectConverter. Not good. But even if this method was public and
>> code copying was not needed, the object converter is not the right
>> place for collection conversions.
>>
>> Why not make the collectionConverters responsible for throwing an
>> exception on (truly) unsupported collection types? Don't throw this
>> exception from ManageableCollectionUtil. Just leave an
>> "unsupported" collection type alone there and let the
>> collectionConverter deal with any unsupported collection type that
>> may be given to it.
>>
>> -- Dan
>>
>>
>>
>
>