XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Minor
    • EAP_EWP 5.2.0
    • EAP_EWP 5.1.0
    • Web Services
    • None
    • JBoss EAP 5.1 with CXF

    • Workaround Exists
    • 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
    • Hide
      CAUSE

      CONSEQUENCE

      FIX

      RESULT
      Show
      CAUSE CONSEQUENCE FIX RESULT
    • Not Required
    • 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>

      Attachments

        Issue Links

          Activity

            People

              rhn-support-asoldano Alessio Soldano
              rhn-support-mus Mustafa Musaji
              Russell Dickenson Russell Dickenson (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: