Я играл с веб-сервисами с помощью 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)];
}
}
Мое мыло ответ, когда я проверить WebService (с 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 таким образом с ними.
UPDATE: изменение @WebService
до @WebService(targetNamespace="http://MyWSResponse")
изменило запрос на мыло к правильному тегу, но сообщение ответа на мыло по-прежнему использует ns2 вместо MyWSResponse.
Хорошо, я вижу это, но как это позволяет мне использовать тег MyWSResponse в сообщении о мыле? Потому что на самом деле http://ws.test.matt.com фактически не существует, и как он знает, что использовать для имен элементов? Причина, по которой я спрашиваю, заключается в том, что я использовал другие веб-сервисы, и у них есть разные имена элементов внутри мыла: элемент Body, и мне было интересно, как они это достигли? –
Попробовал добавить атрибут targetNamespace в аннотацию WebResult и установить его пустым? как targetNamespace = "" ??? –
Это ничего не делало :( –