春季使用肥皂网络服务,wsdl问题

时间:2020-07-15 13:50:39

标签: java spring maven soap wsdl

我正在尝试创建与第三方soap Web服务连接的rest api。我正在使用maven jaxb2插件来生成基于wsdl的类。当我运行应用程序时,不会创建任何代码。也没有错误。在执行标记为红色的pom文件中直接看到异常。网址工作正常,我可以通过浏览器访问它,并显示wsdl。你能帮忙吗?

              <plugin>
                    <groupId>org.jvnet.jaxb2.maven2</groupId>
                    <artifactId>maven-jaxb2-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <schemaLanguage>WSDL</schemaLanguage>
                        <generatePackage>com.app.pack</generatePackage>
                        <generateDirectory>${project.basedir}/src/main/java</generateDirectory>
                        <forceRegenerate>true</forceRegenerate>                     
                        <schemas>
                            <schema>
                                <url>someurl</url>
                            </schema>
                        </schemas>
                    </configuration>
            </plugin>

当我在pom.xml中悬停执行时,我会看到错误:


org.apache.maven.plugin.PluginExecutionException: Execution default of goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.14.0:generate failed.
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:148)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:333)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.lambda$7(MavenImpl.java:1380)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:177)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1379)
    at org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant.build(MojoExecutionBuildParticipant.java:52)
    at org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:137)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:173)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1$1.call(MavenBuilder.java:116)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:177)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:106)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:177)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:87)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:201)
    at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:833)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:220)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:263)
    at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:316)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:319)
    at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:371)
    at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:392)
    at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:154)
    at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:244)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.lang.NullPointerException
    at com.sun.tools.xjc.ModelLoader.loadWSDL(ModelLoader.java:390)
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:158)
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:117)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.loadModel(XJC23Mojo.java:50)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.doExecute(XJC23Mojo.java:40)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.doExecute(XJC23Mojo.java:28)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute(RawXJC2Mojo.java:478)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute(RawXJC2Mojo.java:320)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
    ... 30 more

更新

我意识到问题是wsdl受ssl保护。我创建了密钥库,并设法用它创建了soapui项目。当我尝试将密钥库添加到Maven插件时,它不起作用并且弹出相同的异常。我也尝试使用Codegen,并且wsdl文件存在一些问题,所以我宁愿使用url。

              <plugin> 
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.14.0</version>
                <executions>
                     <execution>
                          <goals>
                              <goal>generate</goal>
                          </goals>
                     </execution>
                </executions>
                <configuration>
                      <schemaLanguage>WSDL</schemaLanguage>
                      <generateDirectory>${project.basedir}/src/main/java</generateDirectory>
                      <generatePackage>com.generated</generatePackage>
                      <schemas>
                            <schema>ssl url</url>
                            </schema>
                      </schemas>
                      <properties>
                            <property>
                              <name>javax.net.ssl.trustStore</name>
                              <value>${project.basedir}/src/main/resources/newkeystore2.jks</value>
                            </property>
                            <property>
                              <name>javax.net.ssl.trustStorePassword</name>
                              <value>pass</value>
                            </property>
                          </properties>
                </configuration>                
            </plugin>   

那我应该如何正确地将密钥库添加到插件?

3 个答案:

答案 0 :(得分:0)

一种解决方法是使用Soap UI创建Java类。

以我为例

The correct option is shown here (Tools -> Axis 2 Artifacts)

希望它会有用。

答案 1 :(得分:0)

这是一个Spring项目,可能您具有Spring Tool Suite IDE,在这种情况下,为什么不使用Apache cxf插件?该插件集成在Spring库中。

只需放置此依赖项即可:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
    <version>3.2.5</version>
</dependency>

在构建部分:

    <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>${cxf.version}</version>
        <executions>
            <execution>
                <id>generate-sources</id>
                <phase>generate-sources</phase>
                <configuration>
                    <sourceRoot>${basedir}/src/generated</sourceRoot>
                    <wsdlOptions>
                        <wsdlOption>
                            <wsdl>${basedir}/src/main/resources/wsdl/Service.wsdl</wsdl>
                                <wsdlLocation>classpath:wsdl/Service.wsdl</wsdlLocation>
                            </wsdlOption>
                    </wsdlOptions>
                </configuration>
                <goals>
                    <goal>wsdl2java</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

您必须在“ / src / main / resources / wsdl”位置具有wsdl文件的副本

答案 2 :(得分:0)

尝试在配置中添加autoNameResolution,如下所示:

<configuration>
  <args>
   <arg>-XautoNameResolution</arg>
  </args>
 
 .....
</configuration>