簡體   English   中英

生成的Web服務客戶端類,沒有setter

[英]Generated web services client classes with no setters

我已經為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 但它根本沒用。

請問有誰可以告訴我哪種方式可以挖掘? 因為我根本不明白這是怎么回事。 謝謝!

更新JAXB映射的域對象不會導致與服務器的通信。 JAXB(JSR-222)是用於將對象轉換為XML或從XML轉換對象的標准。 JAX-WS(SOAP)和JAX-RS(RESTful)框架利用它來生成/使用通過線路在客戶端和服務器之間發送的消息。

UPDATE

“您對返回列表所做的任何修改都將出現在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

在要作為列表或數組類型公開的元素上使用@XmlElementWrapper。 確保為@XmlElement設置名稱,客戶端中生成的存根代碼不會混淆類名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM