gpt4 book ai didi

java - 生成的没有 setter 的 Web 服务客户端类

转载 作者:搜寻专家 更新时间:2023-11-01 03:42:10 24 4
gpt4 key购买 nike

我已经为 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 属性的设置方法的原因。例如,要添加一个新项目,请执行以下操作:getTestSuiteUdfs().add(newItem); "

虽然我的逻辑告诉我,更新的列表在您将其发送到服务器之前无法到达服务器?

我设法找到的唯一相关内容:http://www-01.ibm.com/support/docview.wss?uid=swg21440294 .但这根本没有帮助。

谁能告诉我挖哪条路?因为我根本不明白这是怎么回事。谢谢!

最佳答案

更新由 JAXB 映射的域对象不会引起与服务器的通信。 JAXB (JSR-222) 是将对象与 XML 相互转换的标准。 JAX-WS (SOAP) 和 JAX-RS (RESTful) 框架利用它来生成/使用通过网络在客户端和服务器之间发送的消息。

更新

" any modification you make to the returned list will be present inside the JAXB object."

这意味着您得到的 List 是真正的 List 而不是副本。您可以使用以下代码对此进行测试:

System.out.println(customer.getPhoneNumbers().size());  // returns x
customer.getPhoneNumbers().add(new PhoneNumber());
System.out.println(customer.getPhoneNumbers().size()); // returns x + 1

关于java - 生成的没有 setter 的 Web 服务客户端类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11675258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com