Java 通过CXF进行的Web服务调用提供空参数

Java 通过CXF进行的Web服务调用提供空参数,java,web-services,cxf,Java,Web Services,Cxf,我有两个代码项目都使用CXF来使用web服务。当我从项目a调用项目B时,我调用的方法接收空参数。我已打开日志记录,入站消息确实包含正确的参数。我还尝试从SoapUI(一种Web服务测试工具)调用我的服务。正如我所期望的那样,这会传递参数。有人知道怎么回事吗 服务接口: @WebService public interface IShortlistService { public IShortlist createOrUpdateShortlist(@WebParam(name = "ses

我有两个代码项目都使用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>
--------------------------------------
INFO:入站消息
----------------------------
编码:UTF-8
内容类型:text/xml;字符集=UTF-8
标题:{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]}
有效载荷:854a48b5-922f-4081-9c76-b6d08b58a341http://mypc.mycompany.com:8080/shortlist-应用程序/服务/短名单服务
--------------------------------------
CXF的版本相同(2.2.5)。我想不出还有什么要检查的

一些要求的信息

  • @名称是一个接缝注释
  • 以编程方式配置
  • Aegis数据绑定(JAXWS不喜欢接口)

    • @Lee Theobald。。。在你贴出的问题中没有任何明显的东西可以揭示为什么它不适合你。在这种情况下,答案就是请求“CXF用户”的帮助,如有必要,打开JIRA。在问题评论中播放20个问题不是很有效,而且这个列表上的CXF专家眼球比这里多得多。一旦神秘被揭晓,我们可以带一个经过修正的问题并回答回来。

      好,问题解决为错误。我正在使用其接口的家伙在部署其服务之前没有从存储库中更新,并且由于他签入但未部署的部分发生了更改(删除了一个throws子句),我使用了存储库中更新的版本。他的界面版本抛出了一个异常,但我的界面版本没有这样说。因此:


      如果服务提供商和服务客户端使用稍有不同的接口,则可能发生此错误。

      您是如何配置的?哪个数据绑定?什么是@Name?我已经在末尾添加了您要求的信息。那么简单的前端?它不会尊重那些@WebService注释。我担心这对cxf用户更有效。这不是一个简单的“我可以回答你的问题”之类的事情,这将是一个扩展的诊断练习。遗憾的是,这个问题的答案没有发布在这里,因为我刚才也有同样的问题。@Tim我想我还没有找到原因,但我相信这与@WebParam注释的使用有关。接收端希望得到带有设置名称的结果,而这些不是我在@WebParam注释中得到的结果,它希望得到arg0、arg1等。当我删除@WebParam时,我相信它是有效的。是的,我同意。知道自己没有犯明显的错误是件好事。哦,我回答了这个问题,因为我有同样的问题并发现了它。不知怎的,我一开始就认为我提出了这个问题。