【问题标题】:Change bean representation in SOAP Service (JAX-WS/METRO)更改 SOAP 服务 (JAX-WS/METRO) 中的 bean 表示
【发布时间】:2012-05-18 17:58:25
【问题描述】:

我有这个类颜色:

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>

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

【问题讨论】:

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


    【解决方案1】:

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

    public class Color {
         private String name;
    }
    

    另外,您的方法返回 List&lt;Vendor&gt; 而不是 List&lt;Color&gt;

    【讨论】:

    • 首先,感谢您的澄清。我正在与我的同事讨论它,我们认为可以为它重新定义 XML 表示。所以...而不是创建另一个bean,我认为做这样的事情可以解决我的问题:@XmlElement(required=true) public List getColorList() { List colorsAsListString = new ArrayList() ; for(颜色 c : colorList) { colorsAsListString.add(c.getName()); } 返回颜色列表字符串;您认为这是一个好方法吗?
    • 您能否展示您如何发送/接收需要这样输入的数据?默认情况下,第一种方式(包括 name 属性)将由客户端读取和解组而不会出现问题。我们需要你澄清你为什么需要这个。
    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 2018-03-28
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多