在SOAP服务中更改bean表示(JAX-WS / METRO)

时间:2012-05-18 17:58:26

标签: java web-services soap jax-ws java-metro-framework

我有这个课程颜色:

public class Color {

private String name;
private List<String> usedInShapes;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public List<String> getUsedInShapes() {
    if (usedInShapes== null) {
        return null;
    }
    return new ArrayList<String>(usedInShapes);
}
}

并且返回此bean在具有Color对象列表

的包装器上返回
public class ColorListResponse {

    private final List<Color > colorList;

    @XmlElement(required=true)
    public List<Color> getColorList() {
        return colorList;
    }
}

当调用该方法时,用户会收到类似

的响应
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getColorsResponse xmlns:ns2="http://example.com/ws">
         <return>
            <colorList>
               <name>YELLOW</name>
            </colorList>
            <colorList>
               <name>BLUE</name>
            </colorList>
            <colorList>
               <name>RED</name>
            </colorList>
            <colorList>
               <name>BROWN</name>
            </colorList>
         </return>
      </ns2:getColorsResponse>
   </S:Body>
</S:Envelope>

我需要的是:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getColorsResponse xmlns:ns2="http://example.com/ws">
         <return>
            <colorList>YELLOW</colorList>
            <colorList>BLUE</colorList>
            <colorList>RED</colorList>
            <colorList>BROWN</colorList>
         </return>
      </ns2:getColorsResponse>
   </S:Body>
</S:Envelope>

我一直在尝试弄乱注释,但没有成功......

1 个答案:

答案 0 :(得分:0)

您不能让该工具编写那种响应。要完成它,您必须编写自己的实现来编组/解组XML。默认情况下,该工具使用类类型及其中的属性生成XML。

public class Color {
     private String name;
}

此外,您的方法会返回List<Vendor>而不是List<Color>