通过CXF调用Web服务提供空参数

时间:2010-01-18 16:21:51

标签: java web-services cxf

我有两个使用CXF来使用Web服务的代码项目。当我从项目A到项目B进行调用时,我调用的方法接收空参数。我打开了日志记录,入站消息确实包含了正确的参数。我也试过从SoapUI(一个Web服务测试工具)调用我的服务。这会像我期望的那样传递参数。任何人都有任何想法会出现什么问题?

服务界面:

@WebService
public interface IShortlistService {

  public IShortlist createOrUpdateShortlist(@WebParam(name = "sessionId") String sessionId,
      @WebParam(name = "datastoreInstance") String datastoreInstance,
      @WebParam(name = "datastoreRecordId") String datastoreRecordId);
}

服务impl:

@Name("shortlistService")
@WebService(endpointInterface = "com.oobjects.shortlist.service.IShortlistService", serviceName = "ShortlistService")
@Features(features = "org.apache.cxf.feature.LoggingFeature")
@Transactional
public class ShortlistService implements IShortlistService {
  public IShortlist createOrUpdateShortlist(String sessionId, String datastoreInstance,
      String datastoreRecordId) {
    // At this point all inputs are null
  }
}

记录入站消息,证明没问题:

INFO: Inbound Message
----------------------------
Encoding: UTF-8
Content-Type: text/xml; charset=UTF-8
Headers: {cache-control=[no-cache], content-type=[text/xml; charset=UTF-8], connection=[keep-alive], host=[mypc.mycompany.com:8080], content-length=[391], SOAPAction=[""], user-agent=[Apache CXF 2.2.5], Accept=[*/*], pragma=[no-cache]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:createOrUpdateShortlist xmlns:ns1="http://service.shortlist.mycompany.com/"><sessionId>854a48b5-922f-4081-9c76-b6d08b58a341</sessionId><datastoreInstance>http://mypc.mycompany.com:8080/shortlist-app/services/ShortlistService</datastoreInstance></ns1:createOrUpdateShortlist></soap:Body></soap:Envelope>
--------------------------------------

CXF的版本是相同的(2.2.5)。我想不出还有什么要检查的!

有些人要求提供信息......

  • @Name是Seam注释
  • 以编程方式配置
  • Aegis数据绑定(JAXWS不喜欢接口)

2 个答案:

答案 0 :(得分:0)

@Lee Theobald ...在你发布的问题中没有任何明显的东西可以揭示它为什么不适合你。在这种情况下,“回答”就是请求“CXF用户”的帮助,并在必要时打开JIRA。在问题评论中播放20个问题并不是非常有效,而且此列表上的CXF专家眼球比此处要多得多。一旦揭开神秘面纱,我们就可以提出修改后的问题并回答这里。

答案 1 :(得分:0)

好的,问题已解决为错误。我正在使用的接口在部署他的服务之前没有从存储库更新的人,并且由于他已经更改了(抛出了一个throws子句)他已签入但未部署,我使用了更新的版本存储库。他的界面版本引发了异常,但是我的界面版本没有这么说。所以:

如果服务提供商和服务客户​​端使用稍微不同的界面,则会发生此错误。