Кодовый плагин Apache CXF выдает nullpointer - PullRequest
2 голосов
/ 13 декабря 2010

Я использую maven для генерации кода из контракта wsdl, но когда выполняется цель generate-sources, я получаю нулевой указатель в WSDL2JavaMojo.Кажется, что метод processWsdl пытается использовать ссылку (outputDir), которая является нулевой.Не могу понять, почему возникла проблема с нулевым указателем, мой pom-файл выглядит нормально для меня.

Если я изменяю версию плагина codegen на 2.2.1, я все равно получаю сообщение об ошибке, но код генерируется,поэтому я могу скопировать его из целевого / созданного источника в другое место.Но я хочу избежать ошибок при сборке.

Вот мой pom и stacktrace, спасибо.

Olle

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>example.ws</groupId>
 <artifactId>ws-test</artifactId>
 <version>ws-test-1.0</version>

 <dependencies>
  <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>2.1.2</version>
        </dependency>

  <dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-api</artifactId>
   <version>1.5.2</version>
  </dependency>
  <dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-log4j12</artifactId>
   <version>1.5.2</version>
  </dependency>

 </dependencies>
 <build>
  <plugins>
   <plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>2.2.1</version>
    <executions>
     <execution>
      <id>generate-sources</id>
      <phase>generate-sources</phase>
      <configuration> 
       <sourceRoot>${basedir}/target/generated-sources/</sourceRoot>
       <wsdlOptions>
        <wsdlOption>
         <wsdl>${basedir}/src/main/java/Weather.wsdl</wsdl>
         <extraargs>
          <extraarg>-client</extraarg>
          <extraarg>-verbose</extraarg> 
         </extraargs>          
        </wsdlOption>
       </wsdlOptions>
      </configuration>
      <goals>
       <goal>wsdl2java</goal>
      </goals>
     </execution>
    </executions>    
   </plugin>
   <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
     <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
     </descriptorRefs>
    </configuration>
   </plugin>
   <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
     <execution>
      <id>add-source</id>
      <phase>generate-sources</phase>
      <goals>
       <goal>add-source</goal>
      </goals>
      <configuration>
       <sources>
        <source>${basedir}/target/generated-sources</source>
       </sources>
      </configuration>
     </execution>
    </executions>
   </plugin>

  </plugins>

  <pluginManagement>
   <plugins>
    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <configuration>
      <source>1.5</source>
      <target>1.5</target>
     </configuration>
    </plugin>
   </plugins>
  </pluginManagement>
 </build>

    [ERROR] Failed to execute goal org.apache.cxf:cxf-codegen-plugin:2.2.1:wsdl2java (generate-sources) on project ws-test: Execution generate-sources of goal org.apache.cxf:cxf-codegen-plugin:2.2.1:wsdl2java failed. NullPointerException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.cxf:cxf-codegen-plugin:2.2.1:wsdl2java (generate-sources) on project ws-test: Execution generate-sources of goal org.apache.cxf:cxf-codegen-plugin:2.2.1:wsdl2java failed.
 at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:593)
 at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:324)
 at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:247)
 at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:104)
 at org.apache.maven.cli.MavenCli.execute(MavenCli.java:427)
 at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:157)
 at org.apache.maven.cli.MavenCli.main(MavenCli.java:121)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 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 generate-sources of goal org.apache.cxf:cxf-codegen-plugin:2.2.1:wsdl2java failed.
 at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:114)
 at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:577)
 ... 14 more
Caused by: java.lang.NullPointerException
 at org.apache.cxf.maven_plugin.WSDL2JavaMojo.processWsdl(WSDL2JavaMojo.java:297)
 at org.apache.cxf.maven_plugin.WSDL2JavaMojo.execute(WSDL2JavaMojo.java:257)
 at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:105)
 ... 15 more
[ERROR] 

Ответы [ 5 ]

1 голос
/ 06 декабря 2013

Если вы выполняете поиск и находите следующие строки кода в трассировке расширенного стека:

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" />

где-то в вашем wsdl или xsd ... но вам может не понадобиться / нужен namespace, и этот атрибут просто необходимо удалить, например:

<xsd:import schemaLocation="mySchema.xsd" />
1 голос
/ 28 августа 2013

Попробуйте добавить это в качестве конфигурации:

<wsdlOptions><wsdl>${basedir}/src/main/resources/wsdl/myWsdl.wsdl</wsdl></wsdlOptions>
0 голосов
/ 14 декабря 2010

Ну, и 2.2.1, и 2.1.2 являются древними и не поддерживаются в этой точке. С тех пор появилось много исправлений. Я определенно предложил бы попробовать с 2.3.1 и посмотреть, если это по крайней мере исправлено.

0 голосов
/ 27 мая 2011

Кажется, вы сталкиваетесь с https://issues.apache.org/jira/browse/CXF-2201

В следующий раз, когда у вас возникнет такая проблема, вы можете подумать о том, чтобы опубликовать ее на досках объявлений CXF или поискать их в JIRA. Я нашел эту ошибку довольно быстро, прибегая к помощи "WSDL2JavaMojo NullPointerException"

0 голосов
/ 13 декабря 2010

Вот код для WSDL2JavaMojo. В строке 297 выдается исключение NullPointerException, поэтому это должно быть проблемой с вашим sourceRoot.

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

Попробуйте удалить sourceRoot и посмотрите, генерируются ли источники в расположении по умолчанию (target / generate-sources / cxf). Или попробуйте изменить sourceRoot на что-то другое (например, / tmp). Если это работает, значит, есть проблема с используемым значением: ${basedir}/target/generated-sources/

...