6

SOAP Web サービスのクライアントを作成しましたが、生成されたコードで一部のクラスに setter メソッドがありません。

オブジェクトの WSDL は次のようになります。

<xsd:complexType name="UserDefinedFieldArray">
<xsd:sequence>
<xsd:element name="userDefinedField" minOccurs="0" maxOccurs="unbounded"  
           type="ns0:UserDefinedField"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="UserDefinedField">
<xsd:sequence>
<xsd:element name="fieldName" type="xsd:string"/>
<xsd:element name="fieldValue" type="xsd:string"/>
<xsd:element name="listId" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>

これらのオブジェクトには setXXX() しかなく、Java Docs はこれを主張します。

「このアクセサ メソッドは、スナップショットではなく、ライブ リストへの参照を返します。したがって、返されたリストに加えた変更は、JAXB オブジェクト内に存在します。これが、testSuiteUdfs プロパティの set メソッドがない理由です。たとえば、新しい項目を追加するには、次のようにします: getTestSuiteUdfs().add(newItem); "

私の論理では、更新されたリストは、サーバーに送信するまでサーバーに到達できないと言っていますか?

私が見つけた唯一の関連するもの: http://www-01.ibm.com/support/docview.wss?uid=swg21440294。しかし、それはまったく役に立ちませんでした。

どなたか、掘る方向を教えてください。これがどのように機能するのかまったく理解していないからです。ありがとう!

4

2 に答える 2

3

JAXB によってマップされたドメイン オブジェクトを更新しても、サーバーとの通信は発生しません。JAXB (JSR-222) は、オブジェクトを XML との間で変換するための標準です。JAX-WS (SOAP) および JAX-RS (RESTful) フレームワークによって利用され、クライアントとサーバーの間でネットワーク経由で送信されるメッセージを生成/消費します。

アップデート

「返されたリストに加えた変更は、JAXB オブジェクト内に存在します。」

これが意味するのは、Listあなたが手にするのは本物Listであり、コピーではないということです. これは、次のコードでテストできます。

System.out.println(customer.getPhoneNumbers().size());  // returns x
customer.getPhoneNumbers().add(new PhoneNumber());
System.out.println(customer.getPhoneNumbers().size());  // returns x + 1
于 2012-07-26T18:19:39.163 に答える
0

リストまたは配列型として公開する要素で @XmlElementWrapper を使用します。クライアントで生成されたスタブ コードがクラス名を混同しないように、@XmlElement の名前を設定してください。

于 2015-07-22T03:47:54.410 に答える