回答您的問題
關於第一個問題:如果列表爲空,將正確地CXF版本2.6.1處理 - 服務返回一個空。只是爲了證明我有哪裏類型定義這樣一個示例服務:如果我回到上面的一個空memberDetails
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "MemberSearchResponse", namespace="http://bk.org/memberservice/")
public class MemberSearchResponse {
@XmlElementWrapper(name="memberDetails")
private List<MemberDetail> memberDetails;
,即到線路上的XML是這樣的:
<ns2:searchMemberResponse xmlns:ns2="http://bk.org/memberservice/">
<ns2:MemberSearchResponse>
<memberDetails/>
</ns2:MemberSearchResponse>
</ns2:searchMemberResponse>
編輯
它被正確處理爲類似上面的包裝類型的一部分,但如果不是返回包裝類型,而是直接返回該列表,則返回null。
考慮以這種方式定義一個WebService接口:
@WebMethod(operationName = "searchMember")
List<MemberDetail> searchMember(@WebParam(name = "MemberSearchRequest") MemberSearchRequest memberSearchRequest);
如果列表返回空列表時,它會通過CXF 2.6.1連載也爲空。
解決方法是使用包裝類型
編輯結束
對於你的第二個問題:
您正在創建客戶端Bean是這樣的:
<jaxws:client id="deviceWSClient"
serviceClass="..IDeviceWebService"
address="http://localhost:8080/../DeviceWS" />
開CE您已經創建了一個Spring bean這樣,你就可以把它就像一個普通的Spring bean,並注入它,你將與任何正常的Spring bean做的方式,對於例如,或者注入這樣說:
<bean id="consumerBean" class="...">
<property name="deviceWS" ref="deviceWSClient">
</bean>
或使用@Autowired
@Autowired IDWebService deviceWSClient
或用戶@Resource
@Resource IDWebService deviceWSClient
這些都是在一個bean注入的通常方式。
我在這個位置GitHub的一個示例應用程序,你可以玩: https://github.com/bijukunjummen/memberservice-codefirst.git
使用mvn tomcat:run
只啓動服務器,並運行測試org.bk.memberservice.TestCxfIntegrationTest
這將使到CXF服務的請求。
我檢查了Apache CXF的2.4.0和2.6.1版本,在這兩個版本中都正確處理了空列表。 – 2012-07-11 20:06:41
端點或客戶端Bean的任何特殊配置?Web服務代碼中的任何註釋?我現在正在嘗試2.6.1。謝謝 – Mavericks 2012-07-12 20:25:09