我的任务是为更新操作编写Web服务,其中将对象列表传递给该方法.
@WebMethod(operationName = "updateObjects", action = "urn:preferences")
public boolean updateObjects(List<MyObject> objects){
}
Run Code Online (Sandbox Code Playgroud)
MyObject类很简单.
@XmlRootElement(name="Object")
public class MyObject{
private String item1;
private String item2;
}
Run Code Online (Sandbox Code Playgroud)
现在问题陈述.当我查看此方法的SOAP请求(为我生成的SOAP UI)时,请求如下所示:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pref="preferences">
<soapenv:Header/>
<soapenv:Body>
<pref:updateObjects>
<!--Zero or more repetitions:-->
<arg0>
<!--Optional:-->
<item1>?</item1>
<!--Optional:-->
<item2>?</item2>
</arg0>
</pref:updateObjects>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
但我希望它看起来像下面.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pref="preferences">
<soapenv:Header/>
<soapenv:Body>
<pref:updateObjects>
<!--Zero or more repetitions:-->
<Objects>
<Object>
<!--Optional:-->
<item1>?</item1>
<!--Optional:-->
<item2>?</item2>
</Object>
<Object>
<!--Optional:-->
<item1>?</item1>
<!--Optional:-->
<item2>?</item2>
</Object>
</Objects>
</pref:updateObjects>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
有人可以请一下建议.提前致谢.
您只需要在对象中添加一个"包装器",List如下所示:
@XmlRootElement(name="objects")
public class MyObjects{
@XmlElement(name="object")
List<MyObject> myObjects;
}
public class MyObject{
private String item1;
private String item2;
}
Run Code Online (Sandbox Code Playgroud)
注:更改根元素arg0来objects与该标签@XmlRootElement(name="objects")将无法工作,因为你<objects>是不是在Web服务定义中的根元素.实际上它是你的一部分<wsdl:message>(所以JAXB将丢弃它).
您需要更改的是添加@WebParam(name = "objects")到您的@WebMethod喜欢的Web服务消息:
@WebMethod(operationName = "updateObjects", action = "urn:preferences")
public boolean updateObjects(@WebParam(name = "objects") MyObjects objects){
}
Run Code Online (Sandbox Code Playgroud)
如果你不想使用'包装',你可以保留你的WebMethod但是这样:
@WebMethod(operationName = "updateObjects", action = "urn:preferences")
public boolean updateObjects(@WebParam(name = "object") List<MyObject> objects){
}
Run Code Online (Sandbox Code Playgroud)
但你会松开<objects>包装纸.请求应该是这样的:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pref="preferences">
<soapenv:Header/>
<soapenv:Body>
<pref:updateObjects>
<!--Zero or more repetitions:-->
<object>
<!--Optional:-->
<item1>?</item1>
<!--Optional:-->
<item2>?</item2>
</object>
</pref:updateObjects>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10095 次 |
| 最近记录: |