Помощь по модификации тела ответа на сообщение мыла - PullRequest
2 голосов
/ 01 сентября 2010

Я играл с веб-сервисами, используя jbossws-cxf. Я не думаю, что проблема заключается в реализации, которую я использую, а в том, как генерируется код. Вот мое pojo с аннотациями для веб-сервиса.

package com.matt.test.ws;

import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

@WebService
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public class JbossWSTestImpl {
    private String[] statuses = {"Hello","JbossWS is cool","GoodBye","l33t hax0rz"};
    @WebMethod
    @WebResult(name="status")
    public String getStatus(){
        return statuses[new java.util.Random().nextInt(3)];
    }

}

Мой мыльный ответ при тестировании веб-сервиса (с soapUI) равен

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
  <ns2:getStatusResponse xmlns:ns2="http://ws.test.matt.com/">
     <status>Hello</status>
  </ns2:getStatusResponse>
  </soap:Body>
</soap:Envelope>

Есть ли способ вручную отредактировать файл wsdl, чтобы изменить пространство имен "ns2", чтобы я мог обернуть ответ в разные теги. Я хочу что-то вроде

<soap:Envelope ...>
   <soap:Body>
      <MyWSResponse xmlns="http://ws.test.matt.com/">
         <status>Hello</status>
      </MyWSResponse>
   <soap:Body>
<soap:Envelope>

Существуют ли аннотации, которые я не использую, которые могут это изменить? Я еще не нашел способ изменить wsdl таким образом с ними.

ОБНОВЛЕНИЕ: изменение @WebService на @WebService(targetNamespace="http://MyWSResponse") изменило запрос мыла на правильный тег, но ответное сообщение мыла по-прежнему использует ns2 вместо MyWSResponse.

1 Ответ

2 голосов
/ 01 сентября 2010

Вы должны добавить новую attribute к аннотации WebService как:

@WebService(targetNamespace="http://ws.test.matt.com/")

если вы не укажете targetNamespace, будет использоваться package.

...