回答您的问题
第一个问题: 如果列表为空,则CXF 2.6.1版正确处理了该服务-服务返回空值。只是为了说明我有一个示例服务,其中以这种方式定义了类型:
@XmlAccessorType(XmlAccessType.FIELD)@XmlRootElement(name = "MemberSearchResponse", namespace="http://bk.org/memberservice/" )public class MemberSearchResponse { @XmlElementWrapper(name="memberDetails") private List<MemberDetail> memberDetails;如果我在上面返回一个空的memberDetails,那么遍历网络的xml是这样的:
<ns2:searchMemberResponse xmlns:ns2="http://bk.org/memberservice/"> <ns2:MemberSearchResponse><memberDetails/> </ns2:MemberSearchResponse> </ns2:searchMemberResponse>
编辑
可以正确地将其作为上述包装类型的一部分进行处理,但是如果直接返回列表而不是返回包装类型,则DOES返回null。
考虑这样定义的Web服务接口:
@WebMethod(operationName = "searchMember") List<MemberDetail> searchMember(@WebParam(name = "MemberSearchRequest") MemberSearchRequest memberSearchRequest);
如果返回的列表为空列表,则CXF 2.6.1还将其序列化为null。
解决方法是使用包装器类型
编辑结束
对于第二个问题:
您正在通过以下方式创建客户端bean:
<jaxws:client id="deviceWSClient" serviceClass="..IDeviceWebService" address="http://localhost:8080/../DeviceWS" />
这样创建了Spring Bean之后,就可以像对待普通Spring Bean一样对待它,并像对待任何普通Spring
bean一样注入它,例如,可以这样注入:
<bean id="consumerBean" > <property name="deviceWS" ref="deviceWSClient"> </bean>
或使用
@Autowired
@Autowired IDWebService deviceWSClient
或用户
@Resource
@Resource IDWebService deviceWSClient
这些是注入bean的常用方法。
我在这个github位置有一个示例应用程序,您可以使用它:https : //github.com/bijukunjummen/memberservice-
prefirst.git
只需使用启动服务器,
mvntomcat:run然后运行测试
org.bk.memberservice.TestCxfIntegrationTest即可向CXF服务发出请求。



