cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sambit Dikshit (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CXF-4799) Parameterized Classes should be automatically added to JAXBContext
Date Thu, 07 Feb 2013 19:31:13 GMT

    [ 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

Mime
View raw message