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 12:48:04 UTC
Re: DON'T IGNORE ManageableCollectionUtil should not throw "unsupported"
JcrMapping exception.
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
>>
>>
>>
>
>