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
