Could we (in theory at least), on the XML->JAXB path, look at the xsi:type,
and see if we can find anything in the classloader to match it that we
haven't already registered with the JAXBContext, and then make a new
JAXBContext including the subclass package if necessary?
Maybe we could cache the new context (though this might mean doing a
synchronize{} somewhere).
This is all starting to sound pretty expensive... is this a valuable enough
use case?... I wonder what other web service implementations do with this
issue?
Scott
On Wed, Sep 10, 2008 at 1:10 PM, Raymond Feng <[EMAIL PROTECTED]> wrote:
> Let's assume java.lang.Object maps to xsd:anyType. Maybe we can check the
> object to see if it is a subclass of the parameter type. If the subclass is
> not part of the JAXBContext, then we create a new JAXBContext to include it.
> It might help the transformation from JAXB to XML (I expect to see a
> xsi:type for the subtype such as xsi:type="foo:FooType"). But we cannot
> handle the XML to JAXB path because we don't know the subclass for the JAXB
> object. IIRC, the XML will be unmarshalled into the base type and the
> properties in the subtype lost.
>
> Thanks,
> Raymond
>
> From: Scott Kurz
> Sent: Wednesday, September 10, 2008 6:53 AM
> To: [email protected]
> Subject: Re: JAXBException
>
>
>
> Dave,
>
> The issue is that we look at the interface to determine what types to
> register with the JAXBContext. Your interface only shows java.lang.Object
> as the input type... and though
> com.example.jms.JMSPOJO extends Object, the JAXBContext was not set up to
> know about this type.
>
> I was wondering myself what to do about this issue... and also what, say,
> the Axis2 runtime does in this situation.
>
> Scott
>
>
>
> On Wed, Sep 10, 2008 at 9:28 AM, Dave Sowerby <[EMAIL PROTECTED]>
> wrote:
>
> Hey guys,
>
> I'm encountering a problem in the serialization of Objects when using
> binding.jms and a method signature of:
>
> public String sayHello(Object obj);
>
> Basically, I pass a POJO and on the client side during transformation
> for transport, I get the below stack...
>
> It looks like the class in question hasn't been registered with the
> JAXBContext - can anyone give me any pointers here, I'm concerned I'm
> doing something obviously silly!
>
> Cheers,
>
> Dave.
>
> org.apache.tuscany.sca.databinding.TransformationException:
> javax.xml.bind.MarshalException - with linked exception:
> [javax.xml.bind.JAXBException: class com.example.jms.JMSPOJO nor any
> of its super class is known to this context.]
> at
> org.apache.tuscany.sca.databinding.jaxb.JAXB2Node.transform(JAXB2Node.java:52)
> at
> org.apache.tuscany.sca.databinding.jaxb.JAXB2Node.transform(JAXB2Node.java:36)
> at
> org.apache.tuscany.sca.databinding.DefaultTransformerExtensionPoint$LazyPullTransformer.transform(DefaultTransformerExtensionPoint.java:199)
> at
> org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediate(MediatorImpl..java:81)
> at
> org.apache.tuscany.sca.core.databinding.transformers.Input2InputTransformertransform(Input2InputTransformer.java:247)
> at
> org.apache.tuscany.sca.core.databinding.transformers.Input2InputTransformertransform(Input2InputTransformer.java:45)
> at
> org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediate(MediatorImpl..java:81)
> at
> org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.transform(DataTransformationInterceptor.java:186)
> at
> org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:76)
> at
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:287)
> at
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:154)
> at $Proxy9.sayHello(Unknown Source)
>
> --
> Dave Sowerby MEng MBCS
>