1

我在使用 NetBeans 7.2 为 NetSuite 生成代理类时遇到问题。

WSDL 的位置是https://webservices.netsuite.com/wsdl/v2012_2_0/netsuite.wsdl

添加引用该 WSDL 的新 Web 服务客户端时,我得到以下输出:

ant -f "\\\\network.local\\usersfolders\\roberth\\My Documents\\NetBeansProjects\\JavaApplication2" wsimport-client-netsuite
init:
wsimport-init:
Created dir: \\network.local\usersfolders\roberth\My Documents\NetBeansProjects\JavaApplication2\build\generated-sources\jax-ws
wsimport-client-netsuite:
Created dir: \\network.local\usersfolders\roberth\My Documents\NetBeansProjects\JavaApplication2\build\generated\jax-wsCache\netsuite
command line: wsimport -d "\\network.local\usersfolders\roberth\My Documents\NetBeansProjects\JavaApplication2\build\generated\jax-wsCache\netsuite" -extension -Xnocompile -Xendorsed -keep -s "\\network.local\usersfolders\roberth\My Documents\NetBeansProjects\JavaApplication2\build\generated\jax-wsCache\netsuite" -catalog "\\network.local\usersfolders\roberth\My Documents\NetBeansProjects\JavaApplication2" -verbose "\\network.local\usersfolders\roberth\My Documents\NetBeansProjects\JavaApplication2\xml-resources\web-service-references\netsuite\wsdl" -wsdllocation https://webservices.netsuite.com/wsdl/v2012_2_0/netsuite.wsdl
Missing WSDL_URI

Usage: wsimport [options] <WSDL_URI>
where [options] include:
  -b <path>                 specify jaxws/jaxb binding files or additional schemas
                            (Each <path> must have its own -b)

Examples:
  wsimport stock.wsdl -b stock.xml -b stock.xjb
  wsimport -d generated http://example.org/stock?wsdl

\\network.local\usersfolders\roberth\My Documents\NetBeansProjects\JavaApplication2\nbproject\jaxws-build.xml:22: wsimport failed
BUILD FAILED (total time: 0 seconds)

我习惯于 C# 和导入服务参考(阅读我对 Java 中的 ANT 和 Web 服务的经验为零),并且不确定如何继续。谁能指出我正确的方向?

- 编辑 -

经过几次尝试,我能够在 Eclipse 中生成代理类,但是我发现有些类没有生成。进一步的研究发现,原因是我需要能够生成未引用的类型。NetSuite 文档说要在 ant 任务中添加以下内容:

或者作为替代添加 -w -a 到以下命令:java –cp <classpath> org.apache.axis.wsdl.WSDL2Java <url>

但是我通过命令尝试了选项 2wsdl2java.bat -ss -sd -ap -uri https://webservices.netsuite.com/wsdl/v2012_2_0/netsuite.wsdl并得到:

Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException : org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeExcept ion: Element QName is null for ExceededRequestSizeFault! at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGener ationEngine.java:293)

例外仍在继续,如果需要更多详细信息,请告诉我。

4

2 回答 2

1

我已经能够克服这个错误,但是如果我无法解决,可能会出现一个不同的错误,它可能会作为一个新问题发布。无论如何,为了解决这个问题,我必须执行以下操作:

  • 安装最新的 Java 6 SDK,
  • 将我的 AXIS_HOME 和 JAVA_HOME 环境变量设置为指向轴 1.4 和 Java 6 安装
  • 重启
  • 将 NetSuite 提供的 Ant Build.xml 和 NetSuite.preferences 文件复制到我的新项目中。
  • 将 timeout="120000" 添加到
  • 将 NetSuite.preferences 部分中的 wsdl.url 变量指向要构建的 WSDL 的位置。
  • 构建蚂蚁项目。
  • 注释掉位于 platform.common -> TransactionSearchRowBasic 和 TransactionSearchBasic 中的多参数构造函数(那些将错误抛出到许多参数的构造函数)
  • 将生成的类复制到所需的路径结构。

希望这可以帮助任何尝试使用 NetSuite 测试 Java 的人......

于 2012-10-21T12:33:56.407 回答
0

罗伯特,问题实际上是不同的。

如果您检查 WSDL 中的“getDataCenterUrls”操作:

    <operation name="getDataCenterUrls">
        <input name="getDataCenterUrlsRequest" message="tns:getDataCenterUrlsRequest"/>
        <output name="getDataCenterUrlsResponse" message="tns:getDataCenterUrlsResponse"/>
        <fault name="ExceededRequestSizeFault" message="tns:ExceededRequestSizeFault"/>
        <fault name="UnexpectedErrorFault" message="tns:UnexpectedErrorFault"/>
    </operation>

这定义了 ExceededRequestSizeFault 但这没有在 getDataCenterUrls 的绑定部分中指定:

    <operation name="getDataCenterUrls">
        <soap:operation soapAction="getDataCenterUrls"/>
        <input name="getDataCenterUrlsRequest">
            <soap:header message="tns:headers" part="passport" use="literal"/>
            <soap:header message="tns:headers" part="applicationInfo" use="literal"/>
            <soap:header message="tns:headers" part="partnerInfo" use="literal"/>
            <soap:header message="tns:headers" part="preferences" use="literal"/>
            <soap:body use="literal"/>
        </input>
        <output name="getDataCenterUrlsResponse">
            <soap:header message="tns:headers" part="documentInfo" use="literal"/>
            <soap:body use="literal"/>
        </output>
        <fault name="UnexpectedErrorFault">
            <soap:fault name="UnexpectedErrorFault" use="literal"/>
        </fault>
    </operation>

所以只需通过在 bindings 部分中添加 getDataCenterUrls 操作来修补 WSDL

于 2013-03-15T15:04:07.440 回答