java - 如何使用 Maven 构建 WSDL

标签 java web-services maven wsdl netsuite

我正在寻找用 Maven 替换提供的 Ant 构建。我知道(但没有使用过)ant run,我也不想这样做。

长话短说,NetSuite 提供了一个 wsdl,可在针对其 ERP 产品进行 Web 服务调用时使用,我目前使用他们提供的 ant build 从 wsdl 生成代理类。 (示例应用程序、wsdl 和修补轴可用 here)

我遇到的问题是 ant 任务使用了一个补丁轴 1.4(和支持库,其中几个已有 ~7 年历史),我想使用可以从中央 maven 轻松获得的库来实现这个 wsdl repo ,最好是最新的。

谁能指出我需要在哪里研究可行的解决方案?

对于任何需要知道的人:我尝试使用 axis2 生成它并抛出以下异常:

timeException: Element QName is null for ExceededRequestSizeFault!
        at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:293)
        at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
        at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
Caused by: org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeException: Element QName is null for ExceededRequestSizeFault!
        at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.emitSkeleton(AxisServiceBasedMultiLanguageEmitter.java:1451)
        at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:275)
        ... 2 more
Caused by: java.lang.RuntimeException: Element QName is null for ExceededRequestSizeFault!
        at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.getFaultParamElements(AxisServiceBasedMultiLanguageEmitter.java:
2925)
        at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.getFaultElement(AxisServiceBasedMultiLanguageEmitter.java:2844)
        at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.generateMethodElement(AxisServiceBasedMultiLanguageEmitter.java:
2366)
        at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.loadOperations(AxisServiceBasedMultiLanguageEmitter.java:2242)
        at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.createDOMDocumentForSkeleton(AxisServiceBasedMultiLanguageEmitte
r.java:2156)
        at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.writeSkeleton(AxisServiceBasedMultiLanguageEmitter.java:2082)
        at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.emitSkeleton(AxisServiceBasedMultiLanguageEmitter.java:1408)
        ... 3 more

如果它是使用最新的 NetSuite WSDL 测试的解决方案,则可加分。

最佳答案

我建议你 cxf maven plugin .我用 this wsdl 做了一个小测试它生成并编译成功(JVM 1.7)1408个源文件。 (请耐心等待,这需要一段时间...)

我只收到很少关于已达到最大枚举大小的警告。所以我必须传递一个绑定(bind)文件以允许更大的枚举。我是通过绑定(bind)文件完成的。感谢this post

这是所需的bind.xml文件

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
           xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           jaxb:version="2.0">
    <jaxb:bindings >
        <jaxb:globalBindings typesafeEnumMaxMembers="2000"/>
    </jaxb:bindings>
</jaxb:bindings>

以及pom.xml的相关部分(如您所见:wsdl和bind.xml在/src/main/resources)

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>2.7.3</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                       <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                        <wsdlOptions>
                            <wsdlOption>
                               <bindingFiles>
                                    <bindingFile>${basedir}/src/main/resources/bind.xml</bindingFile>
                                </bindingFiles>
                               <wsdl>
                                  ${basedir}/src/main/resources/netsuite.wsdl
                               </wsdl>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

关于java - 如何使用 Maven 构建 WSDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15499409/

相关文章:

java - Java Android 中动态加载类

java - 初学者 Web 服务问题

web-services - 在具有依赖关系的 Scala 代码中调用外部服务

java - DataTorrent/Apache Apex 与 sbt

java - 从一个jsp获取值到另一个jsp

java - iPhone 上的 Cocoa Java 应用程序

android - 如何使用 Retrofit 获取 json 响应

java - 在Eclipse中包含带有gradle的Maven项目

java - 使用 tomcat7-maven-plugin 指定要打包的目录

java - 如何使用相同的字符串在 IDE 和 .jar 中加载资源