2010-09-01 75 views
2

我一直在使用jbossws-cxf使用Web服務。我不認爲這個問題與我正在使用的實現有關,而是代碼是如何生成的。這是我的pojo與Web服務的註釋。肥皂消息響應正文修改幫助

當我測試web服務(與soapUI的)
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)]; 
    } 

} 

我SOAP響應

<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")將soap請求更改爲正確的標記,但soap響應消息仍然使用ns2而不是MyWSResponse。

回答

2

你必須向WebService註釋添加新attribute爲:

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

,如果你不指定任何targetNamespacepackage將被使用。

+0

好的我看到了,但是如何讓我在soap消息中使用MyWSResponse標籤?因爲實際上http://ws.test.matt.com實際上並不存在,所以它如何知道如何使用元素名稱?我問的原因是因爲我使用了其他web服務,並且它們在soap:Body元素中有不同的元素名稱,我想知道他們是如何實現這一點的? – 2010-09-01 04:54:33

+0

嘗試將targetNamespace屬性添加到WebResult註釋並將其設置爲空? like targetNamespace =「」??? – 2010-09-01 05:12:47

+0

沒有做任何事情:( – 2010-09-01 20:49:39