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>

ただし、コマンドを介してオプション2を試したところwsdl2java.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 の場所を指すようにします。
  • ant プロジェクトをビルドします。
  • platform.common -> TransactionSearchRowBasic および TransactionSearchBasic (多くの params についてエラーをスローするもの) にある複数引数のコンストラクターをコメント化します。
  • 生成されたクラスを目的のパス構造にコピーします。

これが NetSuite で Java をテストしようとしている人に役立つことを願っています...

于 2012-10-21T12:33:56.407 に答える
0

ロバート、問題は実際には異なります。

操作 "getDataCenterUrls" の WSDL を確認すると、次のようになります。

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

そのため、バインディング セクションの getDataCenterUrls 操作に追加して、WSDL にパッチを適用するだけです。

于 2013-03-15T15:04:07.440 に答える