[
https://issues.apache.org/jira/browse/CXF-4799?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13573829#comment-13573829
]
Sambit Dikshit edited comment on CXF-4799 at 2/7/13 7:52 PM:
-------------------------------------------------------------
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 client
side WebClient. It gets called in server side. So when writeTo method is
called, it writes correctly in server side. Now in client side when WebClient
is used, the readFrom method of povider tries to read but could not find the
class in jaxb context since the provider.init method is not called in client
side.
was (Author: sambitd):
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