Hi Raymond, I have a difficulty in understanding your comment here, Please help me understand by elaborating a bit more. Thanks.
On Thu, Feb 12, 2009 at 12:08 AM, Raymond Feng <[email protected]> wrote: > Hi, > > Do we want to generalize the fix a bit to have a XmlJavaTypeAdapter backed > by the databinding framework to deal with XML-friendly types that are not > JAXB? The only difficulty is that the adapter has to access the databinding > framework statically (for example, from a static variable or some context on > the thread) as the instance will be instantiated by the JAXB runtime. > > Thanks, > Raymond > > *From:* Ramkumar R <[email protected]> > *Sent:* Wednesday, February 11, 2009 10:10 AM > *To:* [email protected] > *Subject:* Re: Update on Databinding Scope & Issues > > 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 <[email protected]> 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 <[email protected]>wrote: >> >>> >>> >>> On Mon, Feb 9, 2009 at 12:20 PM, Ramkumar R <[email protected]>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 <[email protected]>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 > -- Thanks & Regards, Ramkumar Ramalingam
