tuscany-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ramkumar R <ramkumar...@gmail.com>
Subject Re: Update on Databinding Scope & Issues
Date Wed, 11 Feb 2009 18:10:07 GMT
Hi All,

I am planning to fix the data binding issue with OMElement as described in
https://issues.apache.org/jira/browse/TUSCANY-2664,
by creating a pre-defined XMLAdapter called OMElementXMLAdapter.java as we
have done for CallableReferences earlier.

Please let me know if any one has issues in this fix.

By fixing TUSCANY-2664, we can now claim that we have a complete support for
Axis2 MTOM.

I have opened a seperate JIRA TUSCANY-2840 to track the issue around the
usage of @XmlJavaTypeAdapter in service methods.


On Wed, Feb 11, 2009 at 5:11 PM, Ramkumar R <ramkumar.rj@gmail.com> wrote:

> Hi Simon,
>
> You are right, by configuring our databinding framework to know about the
> types that JAXB struggles, its possible that we will get rid of this issue.
>
> In fact as I mentioned earlier, By adding XMLAdapter's in
> DataBindingModuleActivator.java, (as how we do for CallableReferences too)
> as shown below.....
>
> XMLAdapterExtensionPoint xmlAdapterExtensionPoint =
> registry.getExtensionPoint(XMLAdapterExtensionPoint.class);
> xmlAdapterExtensionPoint.addAdapter(Exception.class,
> ExceptionXMLAdapter.class);
>
> resolves the issue. I believe this solution holds good for some critical
> data types like OMElement that we like to support for Axis2 MTOM.
>
> But looking at the broader picture, there might me quite a lot of java
> defined interfaces that the user might want to use as a parameter
> types (for example java.lang.Exception), so in such cases it would be good
> we allow the users to define their own XMLAdapter's and allow them to use
> with
> our databinding framework, rather than we develop pre-defined XMLAdapter
> for possible interfaces that can be use.
>
> Please let me know, if you have any comments/sugggestion. Thanks.
>
>
> On Mon, Feb 9, 2009 at 6:47 PM, Simon Laws <simonslaws@googlemail.com>wrote:
>
>>
>>
>> On Mon, Feb 9, 2009 at 12:20 PM, Ramkumar R <ramkumar.rj@gmail.com>wrote:
>>
>>> As mentioned earlier, since JAXB can't handle interfaces like
>>> org.apache.axiom.om.OMElement OR java.lang.Exception
>>> one way to make this interfaces work with JAXB is to write an XMLAdapter
>>> to convert these data types to the known JAXB data types.
>>>
>>> Defining @XmlJavaTypeAdapter annotation with the XMLAdapter as value in
>>> the service method does not seem to work in Tuscany
>>> as I mentioned earlier.
>>>
>>> So I tried adding XMLAdapter's in DataBindingModuleActivator.java, as
>>> shown below.....
>>>
>>> XMLAdapterExtensionPoint xmlAdapterExtensionPoint =
>>> registry.getExtensionPoint(XMLAdapterExtensionPoint.class);
>>> xmlAdapterExtensionPoint.addAdapter(Exception.class,
>>> ExceptionXMLAdapter.class);
>>>
>>> This seem to be work fine for me, and now I am able to pass these
>>> interfaces as parameter through JAXB.
>>>
>>> Just wanted to make sure, if anyone have tried using @XmlJavaTypeAdapter
>>> annotations with the service methods,
>>> if not I can open JIRA to fix this issue.
>>>
>>>
>>>
>>> On Fri, Feb 6, 2009 at 5:49 PM, Ramkumar R <ramkumar.rj@gmail.com>wrote:
>>>
>>>> The DataBinding Scope wiki page
>>>> http://cwiki.apache.org/confluence/display/TUSCANYWIKI/Databinding+Scope
>>>>  is now updated with the databinding scope for Axis2 MTOM support.
>>>>
>>>> Just wanted to update everyone that, the standard type
>>>> javax.activation.DataHandler is now fully supported, more details
>>>> can be viewed from TUSCANY-2451.
>>>>
>>>> Currently we have 2 outstanding issue that needs to be resolved...
>>>>
>>>> 1. Support for javax.xml.transform.Source data type, raised as
>>>> TUSCANY-2386, TUSCANY-2387 and TUSCANY-2452.
>>>> 2. Support for org.apache.axiom.om.OMElement, raised as TUSCANY-2664
>>>>
>>>> Here I like to talk about the options to support
>>>> org.apache.axiom.om.OMElement datatype in our databinding scope....
>>>>
>>>> Since OMElement is an interface, the JAXB runtime throws the following
>>>> exception....
>>>>
>>>> org.apache.axiom.om.OMElement is an interface, and JAXB can't handle
>>>> interfaces.
>>>>     this problem is related to the following location:
>>>>         at org.apache.axiom.om.OMElement
>>>>         at protected org.apache.axiom.om.OMElement
>>>> org.apache.tuscany.sca.binding.ws.axis2.itests.mtom.jaxws.UploadOMElementFile.arg0
>>>>         at
>>>> org.apache.tuscany.sca.binding.ws.axis2.itests.mtom.jaxws.UploadOMElementFile
>>>>
>>>> JAXB recommends to use an XMLAdapter to solve this issue, by creating an
>>>> XMLAdapter for your interfaces (OMElement) and by using
>>>> @XmlJavaTypeAdapter in the service method as shown below.
>>>>
>>>> @XmlJavaTypeAdapter(value=OMElementXmlAdapter.class,
>>>> type=OMElement.class)
>>>> public String uploadOMElementFile(OMElement attachment) throws
>>>> Exception;
>>>>
>>>> Using @XmlJavaTypeAdapter in the service method, throws the following
>>>> exception.....
>>>>
>>>> java.lang.IllegalArgumentException: value class
>>>> org.apache.tuscany.sca.binding.ws.axis2.itests.mtom.OMElementXmlAdapter
>>>>     at org.objectweb.asm.ClassWriter.a(Unknown Source)
>>>>     at org.objectweb.asm.AnnotationWriter.visit(Unknown Source)
>>>>     at
>>>> org.apache.tuscany.sca.interfacedef.java.jaxws.BaseBeanGenerator.declareField(BaseBeanGenerator.java:250)
>>>>     at
>>>> org.apache.tuscany.sca.interfacedef.java.jaxws.BaseBeanGenerator.declareProperty(BaseBeanGenerator.java:195)
>>>>     at
>>>> org.apache.tuscany.sca.interfacedef.java.jaxws.BaseBeanGenerator.defineClass(BaseBeanGenerator.java:153)
>>>>     at
>>>> org.apache.tuscany.sca.interfacedef.java.jaxws.BaseBeanGenerator.generate(BaseBeanGenerator.java:437)
>>>>     at
>>>> org.apache.tuscany.sca.interfacedef.java.jaxws.WrapperBeanGenerator.generateResponseWrapper(WrapperBeanGenerator.java:190)
>>>>     at
>>>> org.apache.tuscany.sca.interfacedef.java.jaxws.GeneratedDataTypeImpl.getPhysical(GeneratedDataTypeImpl.java:101)
>>>>     at
>>>> org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper.findClasses(JAXBContextHelper.java:230)
>>>>     at
>>>> org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper.createJAXBContext(JAXBContextHelper.java:210)
>>>>     at
>>>> org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper.createJAXBContext(JAXBContextHelper.java:89)
>>>>     at
>>>> org.apache.tuscany.sca.databinding.jaxb.axiom.JAXB2OMElement.transform(JAXB2OMElement.java:52)
>>>>     at
>>>> org.apache.tuscany.sca.databinding.jaxb.axiom.JAXB2OMElement.transform(JAXB2OMElement.java:40)
>>>>     at
>>>> org.apache.tuscany.sca.databinding.DefaultTransformerExtensionPoint$LazyPullTransformer.transform(DefaultTransformerExtensionPoint.java:200)
>>>>     at
>>>> org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediate(MediatorImpl.java:81)
>>>>     at
>>>> org.apache.tuscany.sca.core.databinding.transformers.Input2InputTransformer.transform(Input2InputTransformer.java:190)
>>>>     at
>>>> org.apache.tuscany.sca.core.databinding.transformers.Input2InputTransformer.transform(Input2InputTransformer.java:1)
>>>>     at
>>>> org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediate(MediatorImpl.java:81)
>>>>     at
>>>> org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.transform(DataTransformationInterceptor.java:208)
>>>>     at
>>>> org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:97)
>>>>     at
>>>> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:310)
>>>>     at
>>>> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:163)
>>>>     at $Proxy19.uploadOMElementFile(Unknown Source)
>>>>
>>>> Like to know if we have any sample to demonstrate the use of  various
>>>> xml binding annotation like @XmlAttachmentRef, @XmlMimeType, and
>>>> @XmlJavaTypeAdapter in service interface methods.
>>>>
>>>> Any other comments and suggestions are appreciated. Thanks.
>>>>
>>>> --
>>>> Thanks & Regards,
>>>> Ramkumar Ramalingam
>>>>
>>>
>>>
>>>
>>> --
>>> Thanks & Regards,
>>> Ramkumar Ramalingam
>>>
>>
>> Ram
>>
>> Question for you. Are we able to do a similar transformation using our
>> databinding framework? I.e. can we configure our databinding framework to
>> know about the types that JAXB struggles with so that JAXB2OMElement doesn't
>> get used directly.
>>
>> This may not be practivcal if having these types messes up the WSDL
>> generation stage also but worth a look if it means we can do away with
>> mandatory requirement to add more annotations.
>>
>> I'm asking this question as when, a while back, we needed to do some
>> specific data transformation steps to handle callable references (which are
>> exterenalizble) that appear as arguments as service interfaces we wrote a
>> special transformer [1][2] and configured it as part of the databinding
>> framework [3]
>>
>> Maybe we can treat these problematic types in the same way? There is maybe
>> a good reason why this won't work but intersted in your thoughts.
>>
>> Regards
>>
>> Simon
>>
>> [1]
>> http://svn.apache.org/repos/asf/tuscany/branches/sca-java-1.x/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/Externalizable2OMElement.java
>> [2]
>> http://svn.apache.org/repos/asf/tuscany/branches/sca-java-1.x/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElement2Externalizable.java
>> [3]
>> http://svn.apache.org/repos/asf/tuscany/branches/sca-java-1.x/modules/databinding-axiom/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer
>>
>>
>>
>
>
> --
> Thanks & Regards,
> Ramkumar Ramalingam
>



-- 
Thanks & Regards,
Ramkumar Ramalingam

Mime
View raw message