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

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

Comments this out and try in the testCase - testGenericsAndSingleContext2

// provider.init(Collections.singletonList(cri));

Also try a full blown client / server model. Where the client is hitting jaxrs 
service using WebClient. How this provider.init method get called in a 
configuration like this in server side. 

<jaxrs:server address="http://localhost:8080/jaxrs";>
                <jaxrs:serviceBeans>
                        <ref bean="bookstore" />
                </jaxrs:serviceBeans>
                <jaxrs:providers>
                        <ref bean="jaxbProvider" />
                </jaxrs:providers>
        </jaxrs:server>

        <bean id="jaxbProvider"
                class="com.foo.soa.providers.JAXBElementProvider">
        </bean>

In your example when you call provider.init(), the flow is completely different 
and what is written in that should happen when readFrom/writeTo call happens. 
When i configure a jaxb provider as a bean, i didnt see the init method getting 
called. 
                
> 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