You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Sergey Beryozkin (JIRA)" <ji...@apache.org> on 2012/06/17 19:17:42 UTC
[jira] [Commented] (CXF-4359)
ParameterizedType#getActualTypeArguments() classes not added to the
JAXBContext for JAX-RS providers
[ https://issues.apache.org/jira/browse/CXF-4359?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13393572#comment-13393572 ]
Sergey Beryozkin commented on CXF-4359:
---------------------------------------
Hi Angelo, I have a code ready to be committed. I'm coming to the conclusion that at the moment it will be simpler to support this feature only if a 'singleJaxbContext' property is set. The patch is technically very good but I'm concerned of introducing some instability by having a fairly rare use case supported (where JAXBContext is re-created dynamically): the question then is, why only do it for parameterized types, should we simply have a single context for all the classes, etc.
Right now, the 'protection' of 'singleJaxbContext' will let us experiment a bit with adding the types derived from Parameterized types to a single JAXB context. That can be expanded in the future. This property still has to be set :-), but at least you won't have to specify the list of extra classes
> ParameterizedType#getActualTypeArguments() classes not added to the JAXBContext for JAX-RS providers
> ----------------------------------------------------------------------------------------------------
>
> Key: CXF-4359
> URL: https://issues.apache.org/jira/browse/CXF-4359
> Project: CXF
> Issue Type: New Feature
> Components: JAX-RS
> Affects Versions: 2.6.1
> Reporter: Angelo
> Assignee: Sergey Beryozkin
> Attachments: cxf-patch.txt, src.zip
>
>
> Take a parameterized class like PageResult<T> :
> --------------------------------------------------------
> @XmlRootElement
> @XmlAccessorType(XmlAccessType.FIELD)
> public class ResultPage<T> {
> private List<T> content;
> public List<T> getContent() {
> return content;
> }
>
> public void setContent(List<T> content) {
> this.content = content;
> }
> }
> --------------------------------------------------------
> And take a service which uses this parameterized class :
> --------------------------------------------------------
> public interface UserService {
> @GET
> public PageResult<User> findUsers();
> @GET
> public PageResult<Role> findRoles();
> }
> --------------------------------------------------------
> When provider create JAXBContext (eg: JSONProvider) for this interface, only PageResult class is added to the JAXBContext and we need declare the 2 classes
> -------------------------------------------------------------
> <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
> <property name="singleJaxbContext" value="true" />
> <property name="extraClass">
> <list>
> <value>User</value>
> <value>Role</value>
> </list>
> </property>
> </bean>
> -------------------------------------------------------------
> This mean can be boring, because as soon as you add new domain class, you must modify too this declaration.
> In my case I cannot use XmlSeeAlso because PageResult belongs to another Java Project (Spring Data) and it can be used with any domain classes.
> To fix this problem, the JAX-RS CXF provider should populate the JAXBContext with PageResult, A and B instead of just with PageResult.
> The attached patch manage this case.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira