Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Minor
    • Resolution: Done
    • Affects Version/s: EAP_EWP 5.1.0
    • Fix Version/s: EAP_EWP 5.2.0
    • Component/s: Web Services
    • Labels:
      None
    • Environment:

      JBoss EAP 5.1 with CXF

    • Workaround:
      Workaround Exists
    • Workaround Description:
      Hide

      Use CXF to generate the classes or remove <xsd:choice> from the wsdl

      Show
      Use CXF to generate the classes or remove <xsd:choice> from the wsdl
    • Release Notes Text:
      Hide
      CAUSE

      CONSEQUENCE

      FIX

      RESULT
      Show
      CAUSE CONSEQUENCE FIX RESULT
    • Release Notes Docs Status:
      Not Required
    • Docs QE Status:
      ASSIGNED

      Description

      The juddi WSDL fails parsing under CXF because of the definition of the input message for the get_changeRecords within the esb_replication_service.wsdl.

      The message is defined as follows (within uddi_v3replication.xsd)

      <element name="get_changeRecords">
      <complexType>
      <sequence>
      <element name="requestingNode" type="uddi_repl:operatorNodeID_type"/>
      <element name="changesAlreadySeen" type="uddi_repl:highWaterMarkVector_type" minOccurs="0"/>
      <choice minOccurs="0">
      <element name="responseLimitCount" type="integer"/>
      <element name="responseLimitVector" type="uddi_repl:highWaterMarkVector_type"/>
      </choice>
      </sequence>
      </complexType>
      </element>

      This leads to the following exception, triggered by accessing the wsdl.

      java.lang.NullPointerException
      at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeClassInfo(ReflectionServiceFactoryBean.java:754)
      at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.initializeWSDLOperation(JaxWsServiceFactoryBean.java:222)
      at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeWSDLOperations(ReflectionServiceFactoryBean.java:674)
      at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.initializeWSDLOperations(JaxWsServiceFactoryBean.java:258)
      at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:424)
      at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:528)
      at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:278)
      at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:178)
      at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:100)
      at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:105)
      at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:167)
      at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:346)
      at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:259)
      at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:209)
      at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:404)

      The CXF code expects the operation to be wrapped however its verification does not agree. The deployment executes the following within initializeClassInfo

      if (o.getUnwrappedOperation() == null)

      { //the "normal" algorithm didn't allow for unwrapping, //but the annotations say unwrap this. We'll need to //make it. WSDLServiceBuilder.checkForWrapped(o, true); }

      However the invocation of WSDLServiceBuilder.checkForWrapped does not populate the unwrapped operation, leading to the NPE when it is later referenced.

      WSDLServiceBuilder.checkForWrapped fails to populate the operation information because the isWrappableSequence method expects everything within the type to be an element, and it does not support the 'choice' element.

      Changing the element definition to the following allows it to parse successfully, however it is not equivalent.

      <element name="get_changeRecords">
      <complexType>
      <sequence>
      <element name="requestingNode" type="uddi_repl:operatorNodeID_type"/>
      <element name="changesAlreadySeen" type="uddi_repl:highWaterMarkVector_type" minOccurs="0"/>
      <element name="responseLimitCount" type="integer" minOccurs="0"/>
      <element name="responseLimitVector" type="uddi_repl:highWaterMarkVector_type" minOccurs="0"/>
      </sequence>
      </complexType>
      </element>

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  asoldano Alessio Soldano
                  Reporter:
                  mmusaji Mustafa Musaji
                  Writer:
                  Russell Dickenson
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  4 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: