我正在为客户端和服务器使用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