我已经为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
” 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。