あなたの質問に答えるために
最初の質問の場合:リストが空の場合、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>
編集
上記のようにラッパータイプの一部として正しく処理されますが、ラッパータイプを返す代わりにリストが直接返される場合は、nullを返します。
このように定義されたWebサービスインターフェースについて考えてみます。
@WebMethod(operationName = "searchMember")
List<MemberDetail> searchMember(@WebParam(name = "MemberSearchRequest") MemberSearchRequest memberSearchRequest);
返されるリストが空のリストである場合、CXF2.6.1によってもnullとしてシリアル化されます。
回避策は、ラッパータイプを使用することです
編集終了
2番目の質問:
次の方法でクライアントBeanを作成しています。
<jaxws:client id="deviceWSClient"
serviceClass="..IDeviceWebService"
address="http://localhost:8080/../DeviceWS" />
この方法でSpringBeanを作成したら、通常の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
を使用してサーバーを起動し、CXFサービスに要求を行うmvn tomcat:runテストを実行するだけです。org.bk.memberservice.TestCxfIntegrationTest