Java Apache CXF codegen插件抛出空指针

Java Apache CXF codegen插件抛出空指针,java,web-services,maven-2,cxf,Java,Web Services,Maven 2,Cxf,我使用maven从wsdl契约生成代码,但是当目标generate sources被执行时,我在WSDL2JavaMojo中得到一个空指针。似乎processWsdl方法正在尝试使用一个引用(outputDir),该引用为null。由于我不明白为什么会有这个空指针问题,我的pom文件看起来没问题 如果我将codegen插件的版本更改为2.2.1,我仍然会得到错误,但代码是生成的,因此我可以将其从目标/生成的源复制到另一个位置。但我想避免构建失败 这是我的pom和stacktrace,谢谢 奥利

我使用maven从wsdl契约生成代码,但是当目标generate sources被执行时,我在WSDL2JavaMojo中得到一个空指针。似乎processWsdl方法正在尝试使用一个引用(outputDir),该引用为null。由于我不明白为什么会有这个空指针问题,我的pom文件看起来没问题

如果我将codegen插件的版本更改为2.2.1,我仍然会得到错误,但代码是生成的,因此我可以将其从目标/生成的源复制到另一个位置。但我想避免构建失败

这是我的pom和stacktrace,谢谢

奥利


以下是WSDL2JavaMojo的代码。第297行抛出一个NullPointerException,因此它肯定是您的
sourceRoot
有问题

294 private void processWsdl(WsdlOption wsdlOption) throws MojoExecutionException {
295
296     File outputDirFile = wsdlOption.getOutputDir();
297     outputDirFile.mkdirs();

尝试删除
sourceRoot
,查看源是否在默认位置生成(目标/生成的源/cxf)。或者尝试将您的
sourceRoot
更改为其他内容(例如/tmp)。如果这样做有效,那么您使用的值就有问题了:
${basedir}/target/generated sources/

那么,2.2.1和2.1.2都是古老的,目前还不受支持。自从这两种情况发生后,已经进行了很多修复。我绝对建议您尝试使用2.3.1,看看它是否至少是固定的。

您似乎遇到了一些问题


下一次你有这样的问题,你可以考虑在CXF的留言板上张贴,或者搜索他们的JIRA.我通过谷歌搜索“WSDL2JavaMojo NullPointerException”很快发现了这个bug

尝试将其添加为配置:

<wsdlOptions><wsdl>${basedir}/src/main/resources/wsdl/myWsdl.wsdl</wsdl></wsdlOptions>
${basedir}/src/main/resources/wsdl/myWsdl.wsdl

如果在扩展堆栈跟踪中搜索并找到以下代码行:

Caused by: org.apache.cxf.tools.common.ToolException: java.lang.NullPointerException
    at org.apache.cxf.tools.validator.internal.WSDLRefValidator.processSchemas(WSDLRefValidator.java:133)
...
Caused by: java.lang.NullPointerException
    at org.apache.ws.commons.schema.SchemaBuilder$1.validate(SchemaBuilder.java:524)
那么这可能会发生,因为你有这样一种说法:

<xsd:import namespace="http://blah.com/" schemaLocation="mySchema.xsd" />
Caused by: org.apache.cxf.tools.common.ToolException: java.lang.NullPointerException
    at org.apache.cxf.tools.validator.internal.WSDLRefValidator.processSchemas(WSDLRefValidator.java:133)
...
Caused by: java.lang.NullPointerException
    at org.apache.ws.commons.schema.SchemaBuilder$1.validate(SchemaBuilder.java:524)
<xsd:import namespace="http://blah.com/" schemaLocation="mySchema.xsd" />
<xsd:import schemaLocation="mySchema.xsd" />