我使用Maven多模块项目。 在模块中的一个,我有几个Web服务使用Apache CXF框架2.5.4开发的。 目前我有两个“问题”或疑问。
首先,如果我打电话的web服务应该返回一个列表的方法,如果列表为空,则返回,而不是空列表“空”。 我试图找出可能是什么问题,如果是我使用的CXF版本中的错误,或者我应该使用一些注释来修改方法或响应的定义,但我无法找到任何东西。 我见过一些人同样的问题,但没有解决方案。
我想问的另一件事是:我正在开发使用MVC模式的Web应用程序。 我不知道我应该怎么称呼它的方式从控制器的网络服务,而不是使用ClasspathXmlCpplicationContext,然后context.getBean()。
例如,在bean定义的Web服务的一个客户端上的是:
<jaxws:client id="deviceWSClient"
serviceClass="..IDeviceWebService"
address="http://localhost:8080/../DeviceWS" />
我已经尝试过全光照@Autowired或@WebServiceRef注释。 有了这些它的工作原理,但不是做一个HTTP请求到web服务,我想它会从本地资源库的依赖。 我想,我需要的是注射在控制器这个bean的方法。
要回答你的问题
关于第一个问题:如果列表为空,将正确地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,而不是返回的包装类型,直接返回的列表。
考虑这种方式定义一个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" />
一旦你创建了一个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服务的请求。
@WebServiceRef
如果你遵循可能适用于春季论坛这个链接 。 在那里,您使用JAXWS配置不同的方式。 在列表中看到的最后一个职位。
定义客户的另一种方式是在讨论这太问题 。 还有就是例如一个解决方案,你终于可以用@Autowired
注解你给了一些额外的配置之后。 看到这个问题的最后答案。
你提到的另一个问题是关于这个CXF名单相关的问题 ,其中也解决被告知的解决方法,这一问题。 所以这是一个错误。 2.2.7版本已经是固定的,但在再次2.2.9版的问题再次出现。 奇怪的是,直到你的版本2.5.4是背在错误状态。 你可以尝试的解决办法是,如果它修复该问题为您服务。