简体   繁体   English

Spring 消耗 soap web 服务,wsdl 问题

[英]Spring consuming soap web service, wsdl problem

I'm trying to create rest api that connects with third party soap web service.我正在尝试创建 rest api 与第三方 soap Z2567A5EC3705EB7AC29DZ96 服务连接。 I'm using maven jaxb2 plugin to generate classes based on wsdl.我正在使用 maven jaxb2 插件来生成基于 wsdl 的类。 When i run application no code is created.当我运行应用程序时,不会创建任何代码。 There's no error either.也没有错误。 Exception is seen directly in pom file where execution is marked red.在执行标记为红色的 pom 文件中直接看到异常。 Url works fine, i can access it via browser and wsdl shows up. Url 工作正常,我可以通过浏览器访问它并且 wsdl 出现。 Could you help?你能帮忙吗?

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

When I hover execution(in pom.xml) I can see error:当我执行 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

UPDATE更新

I realised problem was with wsdl protected with ssl.我意识到问题出在 wsdl 受 ssl 保护。 I created keystore and I managed to create soapui project with it.我创建了密钥库,并设法用它创建了 soapui 项目。 When i try to add keystore to maven plugin it doesn't work and same exception pops out.当我尝试将密钥库添加到 maven 插件时,它不起作用并且会弹出相同的异常。 I tried with codegen as well and i have some problems with wsdl file, so I'd rather use url.我也尝试过使用 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>   

So how should I properly add keystore to plugin?那么我应该如何正确地将密钥库添加到插件中呢?

One workaround is to use Soap UI to create the Java Classes.一种解决方法是使用 Soap UI 创建 Java 类。

In my case it worked.就我而言,它起作用了。

The correct option is shown here (Tools -> Axis 2 Artifacts)此处显示了正确的选项(工具 -> Axis 2 Artifacts)

Hope it can be usefull.希望它能有用。

It's a Spring project, probably you have Spring Tool Suite IDE, in this case you why don't use Apache cxf Plugin?这是一个Z38008D81C2F4D7985ECF6E0CE8AF1D1D1D,您可能有Z38008D81C2F4D7985ECF4ECF6ED1D1D1D1D1D1D1D工具SUITE suite suite z581D6381D6381F35E4F35E4F9D777772L7772011ACF77BIR? this plugin comes integrated in Spring libraries.这个插件集成在 Spring 库中。

Just put this dependency:只需放置此依赖项:

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

In the build section:在构建部分:

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

You must have a copy of wsdl file in "/src/main/resources/wsdl" location您必须在“/src/main/resources/wsdl”位置拥有 wsdl 文件的副本

Try by adding autoNameResolution in configuration like as shown below:尝试在配置中添加 autoNameResolution,如下所示:

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

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

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