我正在爲客戶端和服務器使用Apache CXF 3.0.2。在服務器上有一個允許的各種參數相當簡單的Web服務,其中之一是一個字符串數組:爲什麼Apache CXF不尊重'nil =「true」'
<xs:complexType name="getThing">
<xs:sequence>
<xs:element minOccurs="0" name="connection" type="tns:connectionID"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="types" type="xs:string"/>
</xs:sequence>
</xs:complexType>
當客戶端調用這個,這可能是它希望通過對「一個空值類型「,這就是我遇到問題的地方。來自客戶端的SOAP消息看起來是這樣的:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getThing xmlns:ns2="http://serverl.url/">
<connection>Connection details....</connection>
<types xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</ns2:getThing>
</soap:Body>
</soap:Envelope>
我認爲這是正確的,但是CXF在服務器上的轉換是與一個空字符串值的數組; 不是包含空值的數組。這會導致服務器代碼出現各種問題。
服務器實現的接口如下所示?
ThingResult getThing(@WebParam(name = "connection") ConnectionID connection, @WebParam(name = "types") String[] types)
{ code }
如果'nil =「true」'無效,那麼爲什麼CXF會生成它?
空數組工作正常(客戶端省略消息中的元素,服務器將其解釋爲null),但不包含包含空值的數組。爲什麼CXF以這種方式行事,我如何配置它以便服務器將SOAP消息正確地反序列化回客戶端發送的內容?
我到處搜索了答案,我很確定我錯過了一些令人尷尬的事情!
編輯:增加代碼示例
那麼我怎樣才能得到補充?如果服務器需要重寫,將會產生巨大的影響。 如果'nil =「true」'無效,那麼爲什麼CXF會生成它?我需要在客戶端設置上解決某些問題嗎? – Jason 2014-10-27 16:14:11