2012-04-10 2 views
2

У меня есть следующий интерфейс конечной точки:JAX-WS: Поместите обертку вокруг ArrayList возвращается

@WebService 
public interface SEIWebService { 

    @WebMethod 
    @WebResult(name="CreateWorkOrderItemResponse") 
    CreateWorkOrderItemResponse createWorkItem(@WebParam(name = "CreateWorkOrderItemRequest")CreateWorkOrderItemRequest request); 
} 

Реализация:

@WebService(endpointInterface = "com.someCompany.SEIWebService", portName = "SEIWebServices") 
public class SEIWebServiceImpl implements SEIWebService{ 

    @Override 
    public CreateWorkOrderItemResponse createWorkItem(CreateWorkOrderItemRequest request) { 
     CreateWorkOrderItemResponse response = new CreateWorkOrderItemResponse(); 
     response.setResponseCode("Testing Create 2222"); 
     response.addError("Error 1"); 
     response.addError("Error 2"); 

     return response; 
    } 

И, наконец, код объекта ответа

public class CreateWorkOrderItemResponse { 
    private String responseCode = null; 
    private ArrayList<String> errorList = new ArrayList<String>(); 

    public void setResponseCode(String responseCode) { 
     this.responseCode = responseCode; 
    } 

    public String getResponseCode() { 
     return responseCode; 
    } 

    public void addError(String error) { 
     errorList.add(error); 
    } 

    public void setErrorList(ArrayList<String> errorList) { 
     this.errorList = errorList; 
    } 

    public ArrayList<String> getErrorList() { 
     return errorList; 
    } 
} 

Когда я запускаю этот код, ответ обратно в SoapUI выглядит следующим образом:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
     <ns2:createWorkItemResponse xmlns:ns2="http://someCompany.com/"> 
     <CreateWorkOrderItemResponse> 
      <errorList>Error 1</errorList> 
      <errorList>Error 2</errorList> 
      <responseCode>Testing Create 2222</responseCode> 
      <testList/> 
     </CreateWorkOrderItemResponse> 
     </ns2:createWorkItemResponse> 
    </S:Body> 
</S:Envelope> 

Наконец, вопрос ... С выше коде, есть способ, чтобы изменить его, так что я могу добавить «обертку» вокруг ответов errorList? Я хочу, чтобы ответ SOAP-сообщения выглядел следующим образом:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
     <ns2:createWorkItemResponse xmlns:ns2="http://someCompany.com/"> 
     <CreateWorkOrderItemResponse> 
      <Errors> 
       <errorList>Error 1</errorList> 
       <errorList>Error 2</errorList> 
      </Errors> 
      <responseCode>Testing Create 2222</responseCode> 
      <testList/> 
     </CreateWorkOrderItemResponse> 
     </ns2:createWorkItemResponse> 
    </S:Body> 
</S:Envelope> 

Спасибо всем за помощь!

+0

Я, конечно же, буду менять имя переменной «errorList» на что-то другое. – Ascalonian

+0

О, и 'testList' был только что я что-то пробовал. Это можно игнорировать. – Ascalonian

ответ

8

Я понял ответ. Для этого мне пришлось использовать аннотацию XmlElementWrapper. Итак, код в настоящее время:

public class CreateWorkOrderItemResponse { 
    private String responseCode = null; 
    private ArrayList<String> errorList = new ArrayList<String>(); 

    public void setResponseCode(String responseCode) { 
     this.responseCode = responseCode; 
    } 

    public String getResponseCode() { 
     return responseCode; 
    } 

    public void addError(String error) { 
     errorList.add(error); 
    } 

    public void setErrorList(ArrayList<String> errorList) { 
     this.errorList = errorList; 
    } 

    @XmlElementWrapper(name="error_list") 
    @XmlElement(name="error") 
    public ArrayList<String> getErrorList() { 
     return errorList; 
    } 
}