27

次の問題があります。wsimportantタスクを使用してWebサービスクライアント(salesforce.com用)を作成しています。すべてが正常に機能していますが、生成されたクラスはすべて、すべてのBeanプロパティにこの奇妙なJAXBElementクラスを使用しています。

例えば:

public void setLastName(JAXBElement<String> value) {
    this.lastName = ((JAXBElement<String> ) value);
}

public JAXBElement<String> getCountry() {
    return country;
}

すべてのクラスをJAXBElementでラップする代わりに、setLastName(String newLastName)のような単純なメソッドが必要です。それが私がwsimportタスクを呼んでいる方法です。

<wsimport debug="false" verbose="false" keep="${keep}" 
   extension="${extension}" destdir="${tmp.metro}" 
   wsdl="${licensing.wsdl}" 
   sourcedestdir="${licensingws.generated.src}"

   >

   <binding dir="${basedir}/etc" includes="${client.binding}"   
     />
    <arg value="-B-XautoNameResolution" />

  </wsimport>

タスクは次のように定義されます。

wsimportが希望どおりにクラスを生成するために、私が何を設定する必要があるかを誰かが知っていますか?よろしくお願いします!!!

4

4 に答える 4

30

生成されたBeanでJAXBElementラッパーを使用する理由は、おそらく、WSDLがフィールドをオプションであり、nillableであると宣言しているためです。「存在しない」と「存在するがnull」を区別するために、String型を直接使用することはできません。どちらの場合もStringはnullになるためです。

2つの状況を区別する必要がない場合は、代わりに文字列型を使用するようにコードジェネレーターを構成できます。antタスクでこれを行う方法が100%わからないのですが、おそらくantタスクのドキュメントに関連情報があります。

于 2010-02-01T14:26:57.113 に答える
4

バインディングをカスタマイズする必要があります。

于 2010-02-01T14:21:45.220 に答える