-
Bug
-
Resolution: Done
-
Minor
-
EAP_EWP 5.1.0
-
None
-
JBoss EAP 5.1 with CXF
-
Workaround Exists
-
-
-
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>
- blocks
-
JBPAPP-9495 [JBossWS] Release and Upgrade JBossWS CXF for EAP 5.1.3
- Closed