You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-dev@portals.apache.org by "Ate Douma (JIRA)" <ji...@apache.org> on 2008/10/21 18:21:44 UTC

[jira] Reopened: (PLUTO-509) JAXB portlet descriptor model handling broken with respect to the different namespace handling for portlet API 1.0 and 2.0

     [ https://issues.apache.org/jira/browse/PLUTO-509?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ate Douma reopened PLUTO-509:
-----------------------------


Reopening as the pluto container implementation actually *requires* that at runtime the descriptor model is portlet 2.0 based... even when a portlet 1.0 descriptor was loaded.

So, going to a third rewrite here, now providing a even more clean om interface api with now only 1 single implementation for the portlet 2.0.
For the portlet 1.0 descriptors, still a separate JAXB "struct" classes are used, but only for loading now.
If a portlet 1.0 model was loaded, it will be automatically "upgraded" to a full blown 2.0 model which implements the api interfaces.
And, for writing out, this can be done in reverse *if* the application version is still 1.0  

> JAXB portlet descriptor model handling broken with respect to the different namespace handling for portlet API 1.0 and 2.0
> --------------------------------------------------------------------------------------------------------------------------
>
>                 Key: PLUTO-509
>                 URL: https://issues.apache.org/jira/browse/PLUTO-509
>             Project: Pluto
>          Issue Type: Bug
>          Components: descriptor
>    Affects Versions: 2.0-refactoring, 2.0.0
>            Reporter: Ate Douma
>            Assignee: Ate Douma
>            Priority: Critical
>             Fix For: 2.0-refactoring, 2.0.0
>
>
> The current Portlet 1.0 and Portlet 2.0 JAXB descriptor api is an ackward merge of both namespaces in one object model.
> While this did seem to "work" more or less correct, when testing it more thoroughly it complete blew to pieces ...
> JAXB really cannot properly handle two namespaces blended on top of a single object model, it uses java packaging to map namespaces.
> And while you can have multiple fields mapped to multiple namespaces in one bean, one cannot do the same with one class: you really need to duplicate the classes to support multiple namespaces.
> This really becomes clear as soon as you try to actually write out an JAXB managed object tree.
> Using the current Pluto descriptor mapping this simply isn't possible to do without a corrupting the output or just exceptions thrown all over the place.
> So, as we do need to have this managed properly, I have started out *rewriting* the whole JAXB mapping mostly from scratch again, now properly using two implementation packages for the two namespaces (portlet10 and portlet20).
> As we already had extracted the descriptor api interfaces, the two new implementation packages both implement the *most* common denominator (e.g. portlet20) interface, where the portlet10 implementations throw an UnsupportedOperationException when trying to use portlet20 specific features (write *and* read methods).
> As the JAXB jxc compiler generates classes based on the xsd type definitions, all *DD classes ended up to be called *Type now. I've kept it that way as the *DD classes are no longer directly used anyway (or at least shouldn't).
> Finally, to be able to modify an JAXB loaded portlet10 or portlet20 descriptor model, while only dealing with the interfaces, a solution is needed for creating new instances of objects managed through lists, e.g. portletApp.getPortlets().add(Portlet).
> For this purpose, I've created a new ElementFactoryList<E> extending ArrayList<E> which provides a factory method for creating new elements for itself: E ElementFactoryList<E>.newElement().
> So, like for a org.apache.pluto.om.portlet.Portlet interface, you have to use: portletApp.getPortlets().add(portletApp.getPortlets().newElement()).
>  
>     

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.