web-dev-qa-db-ja.com

antから呼び出されたwsimportによって生成されたクラスのJAXBElementを削除します

次の問題があります。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がクラスを希望どおりに生成するように、私が何を設定する必要があるかを誰かが知っていますか?よろしくお願いします!!!

24
MisterY

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

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

28
jarnbjo
4
rodrigoap

私も同様の問題に直面しています。

私は以下のバインディングXMLを使用しましたが、天井wsimport:with this link

バインディングファイル

<jaxb:bindings version="2.1" 
xmlns:jaxb="http://Java.Sun.com/xml/ns/jaxb" 
xmlns:xjc="http://Java.Sun.com/xml/ns/jaxb/xjc" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
   <jaxb:globalBindings generateElementProperty="false"/> 
</jaxb:bindings>

サンプルwsimportコマンド:

wsimport -keep  <WSDL_location>  -b employerServiceWSD
L_binding.xjb

注:employerServiceWSDL_binding.xjbには、上記のバインディングxmlエントリが含まれています。

それが他の人にもうまくいくことを願っています。

3
Laxman G