XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Minor 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

      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>

            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

              Created:
              Updated:
              Resolved: