Java 如何使用Maven构建WSDL
我希望用Maven替换提供的Ant构建。我知道(但没有用过)ant run,我也不太喜欢 长话短说,NetSuite提供了一个wsdl,在针对其ERP产品进行web服务调用时使用,我目前使用他们提供的ant构建从wsdl生成代理类。(示例应用程序、wsdl和修补的axis可用) 我遇到的问题是ant任务使用了一个修补过的axis 1.4(和支持库,其中一些已经有7年的历史了),我想使用从中央maven repo(最好是当前版本)随时可用的库来实现这个wsdl 有人能告诉我哪里需要研究一个可行的解决方案吗 对于任何需要知道的人:我尝试使用axis2生成,它抛出以下异常:Java 如何使用Maven构建WSDL,java,web-services,maven,wsdl,netsuite,Java,Web Services,Maven,Wsdl,Netsuite,我希望用Maven替换提供的Ant构建。我知道(但没有用过)ant run,我也不太喜欢 长话短说,NetSuite提供了一个wsdl,在针对其ERP产品进行web服务调用时使用,我目前使用他们提供的ant构建从wsdl生成代理类。(示例应用程序、wsdl和修补的axis可用) 我遇到的问题是ant任务使用了一个修补过的axis 1.4(和支持库,其中一些已经有7年的历史了),我想使用从中央maven repo(最好是当前版本)随时可用的库来实现这个wsdl 有人能告诉我哪里需要研究一个可行的解
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的经过测试的解决方案,则会获得额外的积分 我向你推荐这个。我用做了一个小测试,它成功地生成并编译了(JVM1.7)1408个源文件。(耐心点,需要一段时间…)
我只收到很少关于达到最大枚举大小的警告。所以我必须传递一个绑定文件以允许更大的枚举。我是通过一个绑定文件完成的。多亏了
下面是所需的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>
感谢Ben,实际上我自己正在做一个手动CXF测试,现在我正在使用完全相同的绑定来处理enum问题:)不过感谢pom,这将是一个很大的帮助。
<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>