我在日食中创建了一个示例jax-ws项目。
下面是具有Interface,Imp类和Helper类
的代码界面:
@WebService
public interface HelloWorld
{
@WebMethod(operationName="getString")
@WebResult(name="Result")
Helper getHelloWorldAsString(@WebParam(name="input")String str);
}
实施
@WebService(endpointInterface = "com.test.HelloWorld")
public class HelloWorldImpl implements HelloWorld
{
@Override
public Helper getHelloWorldAsString(String str) {
Helper h = new Helper();
String[] str1 = {"ABC", "DEF", "GHI"};
h.setTempValue(str1);
return h;
}
}
助手:
@XmlRootElement(name = "TypeCode")
@XmlType(name = "TypeCode")
@XmlAccessorType(XmlAccessType.FIELD)
public class Helper
{
@XmlElement(name="value")
private String[] tempValue;
public String[] getTempValue() {
return tempValue;
}
public void setTempValue(String[] tempValue) {
this.tempValue = tempValue;
}
}
当我部署上面的代码并发送请求时,我看到响应如下:
<ns2:getStringResponse xmlns:ns2="http://test.com/">
<Result>
<value>ABC</value>
<value>DEF</value>
<value>GHI</value>
</Result>
</ns2:getStringResponse>
上面的响应将根元素作为'Result',但我在Helper类中声明了@XmlRootElement(name = "TypeCode")
。我的问题是为什么'TypeCode'没有封送作为根元素而不是'结果'。 jax-ws是否忽略@XmlRootElement
并与@WebResult
一起使用?
答案 0 :(得分:0)
用你的例子你回答你自己的问题。
当创建响应时,结果元素始终作为方法结果的已定义名称,这就是为什么存在@WebResult注释。
如果未指定返回名称,则默认为“返回”。在此元素中,您将为结果对象的每个字段分配一个元素。
在你的情况下,并且因为你有一个列表,jaxb将其编组为一系列子元素,而没有列表的名称。