阿帕奇CXF Web服务问题(Apache CXF web services problems)

2019-07-30 07:23发布

我使用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的方法。

Answer 1:

要回答你的问题

关于第一个问题:如果列表为空,将正确地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服务的请求。



Answer 2:

@WebServiceRef如果你遵循可能适用于春季论坛这个链接 。 在那里,您使用JAXWS配置不同的方式。 在列表中看到的最后一个职位。

定义客户的另一种方式是在讨论这太问题 。 还有就是例如一个解决方案,你终于可以用@Autowired注解你给了一些额外的配置之后。 看到这个问题的最后答案。

你提到的另一个问题是关于这个CXF名单相关的问题 ,其中也解决被告知的解决方法,这一问题。 所以这是一个错误。 2.2.7版本已经是固定的,但在再次2.2.9版的问题再次出现。 奇怪的是,直到你的版本2.5.4是背在错误状态。 你可以尝试的解决办法是,如果它修复该问题为您服务。



文章来源: Apache CXF web services problems