Author: seanoc
Date: Wed Jan 21 09:52:13 2009
New Revision: 736352

URL: http://svn.apache.org/viewvc?rev=736352&view=rev
Log:
CXF-1969 wsdl2java - NPE when wsdl has a missing attribute

Added:
    cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf1969/
    
cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf1969/report_incident.wsdl
Modified:
    
cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
    
cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java

Modified: 
cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java?rev=736352&r1=736351&r2=736352&view=diff
==============================================================================
--- 
cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java 
(original)
+++ 
cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java 
Wed Jan 21 09:52:13 2009
@@ -265,6 +265,14 @@
         for (Port port : cast(serv.getPorts().values(), Port.class)) {
             Binding binding = port.getBinding();
             PortType bindingPt = binding.getPortType();
+            if (bindingPt == null) {
+                org.apache.cxf.common.i18n.Message msg = new 
+                org.apache.cxf.common.i18n.Message("BINDING_MISSING_TYPE",
+                                                   LOG,
+                                                   binding.getQName());
+                throw new WSDLRuntimeException(msg);
+            }
+
             //TODO: wsdl4j's bug. if there is recursive import,
             //wsdl4j can not get operation input message
             PortType pt = def.getPortType(bindingPt.getQName());

Modified: 
cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java?rev=736352&r1=736351&r2=736352&view=diff
==============================================================================
--- 
cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java
 (original)
+++ 
cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java
 Wed Jan 21 09:52:13 2009
@@ -40,11 +40,27 @@
 import org.apache.cxf.tools.wsdlto.AbstractCodeGenTest;
 import org.apache.cxf.tools.wsdlto.WSDLToJava;
 import 
org.apache.cxf.tools.wsdlto.frontend.jaxws.validator.UniqueBodyValidator;
+import org.apache.cxf.wsdl11.WSDLRuntimeException;
+
 import org.junit.Test;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.handler.ResourceHandler;
 
 public class CodeGenBugTest extends AbstractCodeGenTest {
+    
+    
+    @Test
+    public void testCXF1969() throws Exception {
+        env.put(ToolConstants.CFG_WSDLURL, 
+                getLocation("/wsdl2java_wsdl/cxf1969/report_incident.wsdl"));
+        processor.setContext(env);
+        
+        try {
+            processor.execute();
+        } catch (WSDLRuntimeException wrex) {
+            assertEquals("BINDING_MISSING_TYPE", wrex.getMessage());
+        }  
+    }
 
     @Test
     // Test for CXF-1678

Added: 
cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf1969/report_incident.wsdl
URL: 
http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf1969/report_incident.wsdl?rev=736352&view=auto
==============================================================================
--- 
cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf1969/report_incident.wsdl
 (added)
+++ 
cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf1969/report_incident.wsdl
 Wed Jan 21 09:52:13 2009
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
+       xmlns:tns="http://reportincident.example.camel.apache.org";
+       xmlns:xs="http://www.w3.org/2001/XMLSchema";
+       xmlns:http="http://schemas.xmlsoap.org/wsdl/http/";
+       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
+       targetNamespace="http://reportincident.example.camel.apache.org";>
+
+    <!-- Type definitions for input- and output parameters for webservice -->
+    <wsdl:types>
+        <xs:schema 
targetNamespace="http://reportincident.example.camel.apache.org";>
+            <xs:element name="inputReportIncident">
+                <xs:complexType name="inputReportIncident">
+                    <xs:sequence>
+                        <xs:element type="xs:string" name="incidentId"/>
+                        <xs:element type="xs:string" name="incidentDate"/>
+                        <xs:element type="xs:string" name="givenName"/>
+                        <xs:element type="xs:string" name="familyName"/>
+                        <xs:element type="xs:string" name="summary"/>
+                        <xs:element type="xs:string" name="details"/>
+                        <xs:element type="xs:string" name="email"/>
+                        <xs:element type="xs:string" name="phone"/>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+            <xs:element name="outputReportIncident">
+                <xs:complexType name="outputReportIncident">
+                    <xs:sequence>
+                        <xs:element type="xs:string" name="code"/>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+        </xs:schema>
+    </wsdl:types>
+
+    <!-- Message definitions for input and output -->
+    <wsdl:message name="inputReportIncident">
+        <wsdl:part name="in" element="tns:inputReportIncident"/>
+    </wsdl:message>
+    <wsdl:message name="outputReportIncident">
+        <wsdl:part name="out" element="tns:outputReportIncident"/>
+    </wsdl:message>
+
+    <!-- Port (interface) definitions -->
+    <wsdl:portType name="ReportIncidentEndpoint">
+        <wsdl:operation name="ReportIncident">
+            <wsdl:input message="tns:inputReportIncident"/>
+            <wsdl:output message="tns:outputReportIncident"/>
+        </wsdl:operation>
+    </wsdl:portType>
+
+    <!-- Port bindings to transports and encoding - HTTP, document literal 
encoding is used -->
+    <wsdl:binding name="ReportIncidentBinding">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
+        <wsdl:operation name="ReportIncident">
+            <soap:operation
+                    
soapAction="http://reportincident.example.camel.apache.org/ReportIncident";
+                    style="document"/>
+            <wsdl:input>
+                <soap:body parts="in" use="literal"/>
+            </wsdl:input>
+            <wsdl:output>
+                <soap:body parts="out" use="literal"/>
+            </wsdl:output>
+        </wsdl:operation>
+    </wsdl:binding>
+
+    <!-- Service definition -->
+    <wsdl:service name="ReportIncidentEndpointService">
+        <wsdl:port name="ReportIncidentService" 
binding="tns:ReportIncidentBinding">
+            <soap:address 
location="http://localhost:8080/part-five/webservices/incident"/>
+        </wsdl:port>
+    </wsdl:service>
+
+</wsdl:definitions>


Reply via email to