2012-05-18 2 views
1

У меня есть этот класс Цвет:Изменение боб представительство в SOAP-службы (JAX-WS/METRO)

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); 
} 
} 

И возвращается этот компонент возвращается на обертке, которая имеет список объектов 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> 

Я пытался возиться с аннотациями, но без успеха ...

ответ

0

Вы не можете сделать инструмент пишет, что такой ответ. Чтобы выполнить это, вы должны написать свою собственную реализацию, чтобы маршал/демонтаж XML. По умолчанию инструмент генерирует XML, используя тип класса и атрибуты внутри него.

public class Color { 
    private String name; 
} 

Кроме того, ваш метод возвращает List<Vendor> не List<Color>.

+0

Прежде всего, спасибо за разъяснение. Я обсуждал это с моими коллегами по работе, и мы подумали, что можно переопределить XML-представление для него. Итак ... вместо того, чтобы создать еще один боб я думал, что делать некоторые вещи, как это было бы решить мою проблему: @XmlElement (требуется = истина) общественности Список getColorList() { Список colorsAsListString = новый ArrayList () ; для (Цвет c: colorList) { colorsAsListString.add (c.getName()); } вернуть цветаAsListString; } Считаете ли вы, что это хороший подход? –

+0

Можете ли вы показать, как вы отправляете/получаете данные для ввода такого типа? По умолчанию 1-й способ (который включает атрибут name) будет без проблем считываться и немаркироваться клиентом. Нам нужно, чтобы вы уточнили, зачем вам это нужно. –

+0

На самом деле ... Мне это нужно, потому что его попросил клиент ... –