繁体   English   中英

Spring 消耗 soap web 服务,wsdl 问题

[英]Spring consuming soap web service, wsdl problem

我正在尝试创建 rest api 与第三方 soap Z2567A5EC3705EB7AC29DZ96 服务连接。 我正在使用 maven jaxb2 插件来生成基于 wsdl 的类。 当我运行应用程序时,不会创建任何代码。 也没有错误。 在执行标记为红色的 pom 文件中直接看到异常。 Url 工作正常,我可以通过浏览器访问它并且 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>

当我执行 hover(在 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>   

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

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

就我而言,它起作用了。

此处显示了正确的选项(工具 -> Axis 2 Artifacts)

希望它能有用。

这是一个Z38008D81C2F4D7985ECF6E0CE8AF1D1D1D,您可能有Z38008D81C2F4D7985ECF4ECF6ED1D1D1D1D1D1D1D工具SUITE suite suite z581D6381D6381F35E4F35E4F9D777772L7772011ACF77BIR? 这个插件集成在 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 文件的副本

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM