Details

    • Patch Info:
      Patch Available

      Description

      There is a JAXB feature to create JAXB context by specifying the whole array of all mapping classes. Tuscany databinding-jaxb plug-in unable to work with.
      As a result, when application uses SCA for transmitting objects created by specifying complex JAXB context it crashes.

      This plug-in (databinding-jaxb) creates context for marshalling on very simple way. It gets class of root object and asks for JAXB to create context by providing it. So it supports only simple/default JAXB contexts.

      Its suggested more sophisticated procedure.
      1. try to use default/simple context
      2. if it does not work, to collect all JAXB related classes used in instance object and its properties/subobjects by reflection and to create context by array.

      1. JAXBDataBinding.java
        9 kB
        Ivan Churkin
      2. workspace.rar
        885 kB
        Ivan Churkin

        Activity

        Hide
        Ivan Churkin added a comment -

        Its not a popular case but its a case in our project now .
        Why does not support it? Otherwise we will have to patch every new SCA version before usage.

        It was suggested to use class graph introspection only if serialization by simple JAXBContext failed.
        Guess additional try-catch will not be too expensive for the "popular cases".

        Show
        Ivan Churkin added a comment - Its not a popular case but its a case in our project now . Why does not support it? Otherwise we will have to patch every new SCA version before usage. It was suggested to use class graph introspection only if serialization by simple JAXBContext failed. Guess additional try-catch will not be too expensive for the "popular cases".
        Hide
        Raymond Feng added a comment -

        In the trunk code, we already do a bit more by adding referenced classes from the generic types.

        Is it a popular case that a JAXB object contains children from other classloaders? If you have a real use case, it will help.

        Introspecting the class graph is expensive. For the single classloader case, adding the root class to the JAXBContext is good enough.

        Show
        Raymond Feng added a comment - In the trunk code, we already do a bit more by adding referenced classes from the generic types. Is it a popular case that a JAXB object contains children from other classloaders? If you have a real use case, it will help. Introspecting the class graph is expensive. For the single classloader case, adding the root class to the JAXBContext is good enough.
        Hide
        Daniel Stucky added a comment -

        Hi Simon,

        it doesn't seem that the suggested patch went already into the current src code.
        Are there any plans if/when to integrate this patch or a similar solution ?

        Bye,
        Daniel

        Show
        Daniel Stucky added a comment - Hi Simon, it doesn't seem that the suggested patch went already into the current src code. Are there any plans if/when to integrate this patch or a similar solution ? Bye, Daniel
        Hide
        Ivan Churkin added a comment -

        It looks like this problem may occurs only in OSGi application, because multiple classloaders.
        I tested with simple application and all was ok.

        Please look at the workspace attached. Its not complete testcase but it create required JAXB object.

        Unit test is in the bundle "org.eclipse.eilf.jaxbsample.test"

        It creates JAXB object by loading classes from two different bundles
        "org.eclipse.eilf.jaxbsample.root" and "org.eclipse.eilf.jaxbsample.sub"

        The classloader of the second bundle able to load all classes
        but the classloader of root class located in the first bundle and unable to see classes located in the second bundle.
        That is the problem

        Is you will try to pass object through SCA it will cause error mentioned.

        Show
        Ivan Churkin added a comment - It looks like this problem may occurs only in OSGi application, because multiple classloaders. I tested with simple application and all was ok. Please look at the workspace attached. Its not complete testcase but it create required JAXB object. Unit test is in the bundle "org.eclipse.eilf.jaxbsample.test" It creates JAXB object by loading classes from two different bundles "org.eclipse.eilf.jaxbsample.root" and "org.eclipse.eilf.jaxbsample.sub" The classloader of the second bundle able to load all classes but the classloader of root class located in the first bundle and unable to see classes located in the second bundle. That is the problem Is you will try to pass object through SCA it will cause error mentioned.
        Hide
        Ivan Churkin added a comment -

        eclipse workspace

        Show
        Ivan Churkin added a comment - eclipse workspace
        Hide
        Simon Nash added a comment -

        recently added code in JAXBTypeHelper that does something similar to this. It's used to create a JAXB context for use in Java to WSDL runtime schema generation. Ideally this code would be combined so that there's only one copy.

        I'd like to experiment with doing this. Can you attach a test case that demonstrates the current failure, so that I can verify that the combined code works OK in your scenario?

        Show
        Simon Nash added a comment - recently added code in JAXBTypeHelper that does something similar to this. It's used to create a JAXB context for use in Java to WSDL runtime schema generation. Ideally this code would be combined so that there's only one copy. I'd like to experiment with doing this. Can you attach a test case that demonstrates the current failure, so that I can verify that the combined code works OK in your scenario?
        Hide
        Ivan Churkin added a comment -

        Patch (not complete implementation)

        Show
        Ivan Churkin added a comment - Patch (not complete implementation)

          People

          • Assignee:
            Unassigned
            Reporter:
            Ivan Churkin
          • Votes:
            3 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:

              Development