【问题标题】:jax-ws @XmlRootElement not generating root element namejax-ws @XmlRootElement 不生成根元素名称
【发布时间】:2011-05-23 11:21:00
【问题描述】:

我在 Eclipse 中创建了一个示例 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>

上述响应的根元素为“结果”,但我在 Helper 类中声明了 @XmlRootElement(name = "TypeCode")。我的问题是为什么“TypeCode”作为根元素而不是“结果”没有编组。 jax-ws 是否忽略 @XmlRootElement 并与 @WebResult 一起使用?

【问题讨论】:

  • 如果有人对此有解决方案,请告诉我。

标签: jaxb jax-ws


【解决方案1】:

通过您的示例,您可以回答自己的问题。
当创建响应时,结果元素总是作为方法结果的定义名称,这就是为什么有一个@WebResult 注释。
如果您不指定退货名称,则默认为“退货”。在此元素中,结果对象的每个字段都有一个。
在您的情况下,因为您有一个列表,所以 jaxb 将其编组为一系列子元素,而没有列表的名称。

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多