Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-6874

NPE During Code Generation By Maven Plug-In If Name Collision

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 3.1.6
    • None
    • Build system
    • None
    • Unknown

    Description

      NPE if, in an XSD for a web service, types for the input and the output have elements with the same name and base type, but not the same restrictions (e.g. string type, but with min and max length defined for the input element, whereas just plain string for the output element).

      See the elements businessRelationshipId, title, and sourceSessionId for example, in the following:

      Example XSD Which Causes NPE
      <?xml version="1.0" encoding="UTF-8"?>
      <xsd:schema 
      	xmlns:xsd				= "http://www.w3.org/2001/XMLSchema"
      	xmlns:tns				= "http://www.ubs.com/PrinterBasket/V1"
      	targetNamespace			= "http://www.ubs.com/PrinterBasket/V1"
      	>
      	<!-- PrinterBasket v1.1.5 WSDL - 25.02.2013 -->
      
      	<xsd:include schemaLocation="ReturnCode.xsd" />
      	
      	<xsd:complexType name="GetBasketItemInformation">
              <xsd:sequence>    
      			<xsd:element name="businessRelationshipId" minOccurs="1" maxOccurs="1">
                      <xsd:annotation>
                          <xsd:documentation>Standard UBS identifier for a business relationship. Alphanumeric.</xsd:documentation>
                      </xsd:annotation>
                      <xsd:simpleType>
      					<xsd:restriction base="xsd:string">
      						<xsd:minLength value="0" />
      						<xsd:maxLength value="16" />
      					</xsd:restriction>
      				</xsd:simpleType>
      			</xsd:element> 
      			<xsd:element name="title" minOccurs="1" maxOccurs="1">
      		          <xsd:annotation>
      		              <xsd:documentation></xsd:documentation>
      		          </xsd:annotation>
      		          <xsd:simpleType>
      		              <xsd:restriction base="xsd:string">
      		                  <xsd:minLength value="1" />
      		                  <xsd:maxLength value="100" />
      		              </xsd:restriction>
      		          </xsd:simpleType>
      		      </xsd:element>
      			  <xsd:element name="sourceProcess" minOccurs="1" maxOccurs="1">
      		          <xsd:simpleType>
      		              <xsd:restriction base="xsd:string">
      		                  <xsd:minLength value="1" />
      		                  <xsd:maxLength value="100" />
      		              </xsd:restriction>
      		          </xsd:simpleType>
      		      </xsd:element>
      			  <xsd:element name="sourceBusinessSessionId" minOccurs="0" maxOccurs="1">
      		          <xsd:simpleType>
      		              <xsd:restriction base="xsd:string">
      		                  <xsd:minLength value="1" />
      		                  <xsd:maxLength value="50" />
      		              </xsd:restriction>
      		          </xsd:simpleType>
      		      </xsd:element>		           
              </xsd:sequence>
      	</xsd:complexType>
      
      	<xsd:element name="getBasketItemInformation" type="tns:GetBasketItemInformation" />
      
      
      	<xsd:complexType name="GetBasketItemInformationResponse">
      		<xsd:annotation>
      			<xsd:documentation>
      				<![CDATA[
      <p><b>ReturnCodes:</b>
      </p>
      <p>Type I (Information):
      </p>
      <p>Type W (Warning):
      </p>
      <p>Type E (Error):
      </p>
      <p>Type S (Severe):
      </p>
      				]]>
      			</xsd:documentation>
      		</xsd:annotation>
      		<xsd:sequence>
      			<xsd:element name="businessRelationshipId" type="xsd:string" minOccurs="1" maxOccurs="1" />
      			<xsd:element name="title" type="xsd:string" minOccurs="1" maxOccurs="1" />
      			<xsd:element name="sourceBusinessSessionId" type="xsd:string" minOccurs="1" maxOccurs="1" />
      			<xsd:element name="dispatchStatus" type="xsd:string" minOccurs="1" maxOccurs="1" />
      			<xsd:element name="dispatchCount" type="xsd:int" minOccurs="1" maxOccurs="1" />
      			<xsd:element name="dispatchDate" type="xsd:date" minOccurs="1" maxOccurs="1" />
      			<xsd:element name="dispatchGPN" type="xsd:string" minOccurs="1" maxOccurs="1" />
      			<xsd:element name="purpose" type="xsd:string" minOccurs="1" maxOccurs="1" />
      			
                  <xsd:element name="rc" type="tns:ReturnCode" minOccurs="0" maxOccurs="10" />
      		</xsd:sequence>
      	</xsd:complexType>
      
      	<xsd:element name="getBasketItemInformationResponse" type="tns:GetBasketItemInformationResponse" />
      
      </xsd:schema>
      
      Console Output From Maven Build With NPE
      [ERROR] Failed to execute goal org.apache.cxf:cxf-codegen-plugin:3.1.6:wsdl2java (genContractWS) on project HPC_IMCLocalAdapterCHDocBasket: Execution genContractWS of goal org.apache.cxf:cxf-codegen-plugin:3.1.6:wsdl2java failed: java.lang.NullPointerException -> [Help 1] 
      org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.cxf:cxf-codegen-plugin:3.1.6:wsdl2java (genContractWS) on project HPC_IMCLocalAdapterCHDocBasket: Execution genContractWS of goal org.apache.cxf:cxf-codegen-plugin:3.1.6:wsdl2java failed: java.lang.NullPointerException 
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:225) 
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
      at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
      at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
      at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
      at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
      at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
      at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
      at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
      at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
      at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:606) 
      at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
      at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
      at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
      at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
      Caused by: org.apache.maven.plugin.PluginExecutionException: Execution genContractWS of goal org.apache.cxf:cxf-codegen-plugin:3.1.6:wsdl2java failed: java.lang.NullPointerException 
      at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:110) 
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
      ... 19 more 
      Caused by: org.apache.cxf.tools.common.ToolException: java.lang.NullPointerException 
      at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:424) 
      at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103) 
      at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113) 
      at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86) 
      at org.apache.cxf.maven_plugin.wsdl2java.WSDL2JavaMojo.generate(WSDL2JavaMojo.java:415) 
      at org.apache.cxf.maven_plugin.AbstractCodegenMoho.execute(AbstractCodegenMoho.java:260) 
      at org.apache.cxf.maven_plugin.wsdl2java.WSDL2JavaMojo.execute(WSDL2JavaMojo.java:512) 
      at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
      ... 20 more 
      Caused by: java.lang.NullPointerException 
      at org.apache.cxf.tools.wsdlto.frontend.jaxws.validator.WrapperStyleNameCollisionValidator.isValidOperation(WrapperStyleNameCollisionValidator.java:170) 
      at org.apache.cxf.tools.wsdlto.frontend.jaxws.validator.WrapperStyleNameCollisionValidator.checkNameCollision(WrapperStyleNameCollisionValidator.java:62) 
      at org.apache.cxf.tools.wsdlto.frontend.jaxws.validator.WrapperStyleNameCollisionValidator.isValid(WrapperStyleNameCollisionValidator.java:55) 
      at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.validate(WSDLToJavaContainer.java:738) 
      at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:280) 
      at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:165) 
      at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:416) 
      ... 27 more 
      [ERROR] 
      [ERROR] Re-run Maven using the -X switch to enable full debug logging. 
      [ERROR] 
      [ERROR] For more information about the errors and possible solutions, please read the following articles: 
      [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException 
      [ERROR] 
      [ERROR] After correcting the problems, you can resume the build with the command 
      [ERROR] mvn <goals> -rf :HPC_IMCLocalAdapterCHDocBasket 
      
      public class WrapperStyleNameCollisionValidator
                  if (output != null) {
                      List<WrapperElement> els = ProcessorUtil.getWrappedElement(context, output.getElementQName());
                      if (els.size() > 1) {
                          for (WrapperElement element : els) {
                              String mappedName = mapElementName(operation,
                                                                 operation.getUnwrappedOperation().getOutput(),
                                                                 element);
      *mappedName is null here*
      ===>               if (names.containsKey(mappedName)
                                  &&  !(names.get(mappedName) == element.getSchemaTypeName()
                                      || names.get(mappedName).equals(element.getSchemaTypeName()))) {
                                  handleErrors(names.get(mappedName), element);
                                  return false;
                              } else {
                                  names.put(mappedName, element.getSchemaTypeName());
                              }
                          }
                      }
                  }
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            ScottPedigo Scott Pedigo
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: