2010-09-01 4 views
2

Я играл с веб-сервисами с помощью 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.

ответ

2

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

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

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

+0

Хорошо, я вижу это, но как это позволяет мне использовать тег MyWSResponse в сообщении о мыле? Потому что на самом деле http://ws.test.matt.com фактически не существует, и как он знает, что использовать для имен элементов? Причина, по которой я спрашиваю, заключается в том, что я использовал другие веб-сервисы, и у них есть разные имена элементов внутри мыла: элемент Body, и мне было интересно, как они это достигли? –

+0

Попробовал добавить атрибут targetNamespace в аннотацию WebResult и установить его пустым? как targetNamespace = "" ??? –

+0

Это ничего не делало :( –