2013-01-02 68 views
2

這是我的要求Envelope,與xsi:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"聲明把我myRequestMethod XML標籤:春WS與命名空間聲明麻煩模式實例

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:sd="http://www.foo.bar/ws" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soapenv:Header/> 
    <soapenv:Body > 
    <sd:myRequestMethod xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <sd:name xsi:nil="true"/> 

該作品(用了SoapUI測試),但是當我的用戶生成SOAP客戶端,該xsi:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"聲明被自動放入這樣的Envelope標籤(最外層標籤):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:sd="http://www.foo.bar/ws" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:Header/> 
    <soapenv:Body > 
    <sd:myRequestMethod> 
     <sd:name xsi:nil="true"/> 

這讓他

The namespace associated with the prefix 'xsi' could not be resolved. 

這是正常的行爲,肥皂不能理解它,如果它不在內部標記?或者我可以配置我的spring-ws以允許它? 用戶自動生成客戶端和請求,所以他不能改變他的一面。

回答

0

我發現了來自castor JIRA的相關bug。

我認爲它還沒有解決。所以這仍然是一個錯誤。

http://jira.codehaus.org/browse/CASTOR-2813

更具體地,當提供的名稱空間的信息,例如,在XML文檔的根元素的問題出現了,並且有人想解組該文件的一個子節點(調用Unmarshaller#unmarshal(org.w3c.dom.Node))。子節點將不具有Castor正在查找的任何XML名稱空間屬性,因爲名稱空間是在根元素處聲明的。

在這種情況下,某個元素的屬性(xsi。*)被滿足,而Castor 不知道名稱空間。所以它可能認爲XML是 無效並引發錯誤。

1

這兩個XML都是合法使用XML命名空間的實例。我懷疑文檔處理基礎結構中的一個錯誤,正文的內容在沒有正確傳播所有聲明的命名空間前綴的情況下處理。

0

在創建WebService方法時,可以指定nameSpace。如果你讓它自己生成,它給了我類似的錯誤。更改命名空間後,它已解析。

嘗試做這樣的事情,

@WebMethod(operationName = "operation")

@WebResult(name = "Response",targetNamespace = ServiceConstant.TARGET_NAME_SPACE)

Response operation(@WebParam(name = "input", mode = WebParam.Mode.IN)Request Request);

所以這個時候你已經定義自定義命名空間,它隨後將客戶端是否SOAPUI/SOA客戶端...

希望這會有所幫助

+0

我沒有這些,我的方法是由XSD定義的,端點是在Java中。你能更精確些嗎?我的端點有類似的東西:@PayloadRoot(localPart =「myRequestMethod」,namespace =「http://www.foo.bar/ws」)'。 – Jaanus

+0

雖然我們使用Apache CXF for SOAP來定義WebService,但上述方式適合使用nameSpace定義方法。 – VinayVeluri