Uploaded image for project: 'Axis2'
  1. Axis2
  2. AXIS2-4981

Axis2 + Rampart X.509 + JAXB = Namespace URIs and local names to the unmarshaller needs to be interned.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.5.4
    • None
    • None
    • None

    Description

      When Axis2 is used with JAXB bindings and unencrypted SOAP body, all goes well, but as soon as SOAP Body is encrypted (using X.509 token), both client-side and server-side JAXB bindings stop working, on the client silently retuning empty response objects (all fields = null).

      The null response object is caused by the fact that JAXB by default swallows errors.
      Add this code to the generated stub (fromOM()) to reveal the underlying exception:

      unmarshaller.setEventHandler(
      new ValidationEventHandler() {
      public boolean handleEvent(ValidationEvent event )

      { throw new RuntimeException(event.getMessage(), event.getLinkedException()); }

      });

      The underlying error is:

      Namespace URIs and local names to the unmarshaller needs to be interned.

      at test.TestServiceStub$1.handleEvent(TestServiceStub.java:408)
      at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:635)
      at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:254)
      at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:249)
      at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:114)
      at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.childElement(Loader.java:101)
      at com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.childElement(StructureLoader.java:243)
      at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:478)
      at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:459)
      at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(StAXStreamConnector.java:242)
      at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:176)
      at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
      at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339)
      at test.TestServiceStub.fromOM(TestServiceStub.java:414)
      at test.TestServiceStub.test(TestServiceStub.java:201)
      ...

      It looks like the error originates in Axiom (org.apache.axiom.om.impl.SwitchingWrapper returns non-interned strings).

      Tried different component versions / combinations, all resulted in the same error:
      Axis2 1.4 - 1.5.4
      Rampart 1.4 - 1.5.1
      JAXB 2.1.0 - 2.2.2
      Axiom 1.2.0 - 1.2.11

      Attachments

        1. InterningXMLStreamReader.java
          7 kB
          Rustam Abdullaev

        Activity

          People

            Unassigned Unassigned
            rustamabd Rustam Abdullaev
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: