[ 
https://issues.apache.org/jira/browse/CXF-4799?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13569850#comment-13569850
 ] 

Sambit Dikshit commented on CXF-4799:
-------------------------------------

Hi Sergey,
Thanks for the response. I tried setting "singleJaxbContext" and it didn't 
work. 

If you look at getJAXBContext(Class<?> type, Type genericType) method of 
AbstractJAXBProvider. It does not consider the generic type if its a 
paramterized type or not. If yes, it should ideally find the exact type and 
then associate the package of that exact type to existing package level jaxb 
context so that all classes inside that exact type will be automatically added 
to the jaxb context provided they have a package-info.java file. This method 
getJAXBContext needs to be altered to consider generic parameterized types. 

Regards
-Sambit  
                
> Parameterized Classes should be automatically added to JAXBContext
> ------------------------------------------------------------------
>
>                 Key: CXF-4799
>                 URL: https://issues.apache.org/jira/browse/CXF-4799
>             Project: CXF
>          Issue Type: Improvement
>          Components: JAXB Databinding
>    Affects Versions: 2.7.2
>            Reporter: Sambit Dikshit
>
> We are using a payload type which is a parameterized generic. For example, 
> ServiceResponse<T>  { 
> T payload;
> public T getPayload() { 
> return T
> }
> public void setPayload(T t){
> this.payload = t;
> }
> We are using this as a payload wrapper for JAXRS services.  The payload can 
> be any type at runtime. Unless we set the extraClass, the JAXBContext created 
> in AbstractJAXBProvider is not picking up the actual parameter types. I was 
> thinking of extending to add to existing jaxb context map, i could not since 
> its a private scoped hashmap. This should be automatically handled in 
> AbstractJAXBProvider class.  Following check can be made and added for actual 
> type. 
> ParameterizedType paramType = (genericType instanceof ParameterizedType) ? 
> (ParameterizedType) genericType: null;
> if (paramType.getActualTypeArguments().length > 0) {
>   // Fetch the actual type at index 0
>    actualWrapperParamType = InjectionUtils.getType(
>    paramType.getActualTypeArguments(), 0);
>    Class<?> actualWrapperClass = 
> InjectionUtils.getActualType(actualWrapperParamType);
>                               
> This actual class type check can be done inside getJAXBContext. This will do 
> automatic deep check and setting into JAXB context only for custom payload 
> types. 
> Or else expose the jaxb context map to be accessible when extend 
> AbstractJAXBprovider or JAXBElementProvider.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to