Scott Pedigo created CXF-6874:
---------------------------------
Summary: NPE During Code Generation By Maven Plug-In If Name
Collision
Key: CXF-6874
URL: https://issues.apache.org/jira/browse/CXF-6874
Project: CXF
Issue Type: Bug
Components: Build system
Affects Versions: 3.1.6
Reporter: Scott Pedigo
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:
{code:title=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>
{code}
{code:title=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
{code}
{code:title=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());
}
}
}
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)