`
PangSir
  • 浏览: 54509 次
  • 性别: Icon_minigender_1
  • 来自: 广西壮族自治区
文章分类
社区版块
存档分类

请您先登录,才能继续操作

CXF动态客户端总是提示No operation was found with the name {...},命名空间问题

阅读更多
由于之前用的是Xfire,发现有些不稳定,并且由于业务的不多接入扩大,所以今天考了同时在项目中放入CXF2.6.0,确实有些包冲突,目前调整的话,Xfire服务器端可以和CXF共用新版本的xmlschema.jar,但在客户端Xfire只能用xmlschema.jar的旧版本;同时需要加入neethi.jar包。

在经过列子测试中
接口类:com.service.ISaveLove.java;
业务类:com.service.spring.SaveLoveImpl.java;
方法:public String saveLove(String love);
结果发现,总是提示
No operation was found with the name {http://spring.service.com/}saveLove

后来从博客中得到一定灵感,来源博客为 http://lost-alien.iteye.com/blog/1175859
发现楼主所描述的问题很类似,楼主所描述的:
{http://impl.service.ws.mywebapp.com/}
targetNamespace="http://service.ws.mywebapp.com/"
脑子闪过一下:
估计到http://service.ws.mywebapp.com/是接口类所在路径,
而http://impl.service.ws.mywebapp.com/应该是业务类所在位置,
CXF默认取的是接口类所在路径作为命名空间,而Xfire下则可以不加入这个命名空间也能正确访问,主要也是因为默认的命名空间正好是对的;

果然,经过测试:把接口类和业务类放在同一个路径下时,就能测试通过了,回过头去查了一下CXF自带的测试列子,里面也是把接口类和业务类放在同一个路径下(也是为了偷懒);其实按照楼主的做法还是比较科学,在业务类的文件头部同时加入
@WebService(targetNamespace = "http://service.com/",
    endpointInterface = "com..service.ISaveLove")
能明确定义命名空间所在位置。

.................. 2014-11-20 .................
后来回过头来看发布报文:
在没有加入targetNamespace参数作为指定命名空间时,如果接口类和业务类不在同一个路径下,那么Webservice是能正常启动,但是从报文的描述中,可以看到
<wsdl:definitions name="SaveLoveImplService" targetNamespace="http://spring.service.com/">
而在加入指定命名空间时,比如
@WebService(targetNamespace = "http://service.com/",endpointInterface = "com.service.ISaveLove")
那么报文就是
<wsdl:definitions name="SaveLoveImplService" targetNamespace="http://service.com/">

如果在不指定命名空间时就发布的,也是可以访问到了,通过在客户端中指定命名空间即可(即指定到与发布出来的默认命名空间一致),如下:
private static final QName SERVICE_NAME = new QName("http://spring.service.com/", "SaveLoveImplService");  // 指定到了业务类所在包http://spring.service.com/
JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
client = factory.createClient("服务发布地址......?wsdl"); // 记得要加入"?wsdl"
QName opName = new QName("http://service.com/", "saveLove");  // 指定到接口类所在包
Object[] res = client.invoke(opName, "猪打天下");
System.out.println("Say: " + res[0]);

重点:CXF发布用的是业务类(SaveLoveImpl.java),那么默认的命名空间就会是业务类所在包(路径),而对外界暴露的则是接口类(ISaveLove.java),那么对于客户端(第三方)调用访问时,需要按照接口类所在包(路径)进行命名空间的定义,仅此而已。



以上做为日志记下,希望能对来访博友有用!


分享到:
评论
4 楼 PangSir 2014-11-20  
kobe1029 写道
只有这种解决方法吗?自定义targetNamespace就无法解决???

已更新,希望对你有帮助。
3 楼 jpsb 2013-10-24  
感谢分享,问题解决 
2 楼 kobe1029 2012-07-13  
只有这种解决方法吗?自定义targetNamespace就无法解决???
1 楼 hawk0035 2012-05-28  
遇到了一样的问题,按照楼主方法解决

相关推荐

    CXF动态webservice客户端demo

    这个"CXF动态webservice客户端demo"是为了演示如何使用CXF库创建一个动态调用Web服务接口的客户端应用程序。 首先,我们需要了解Web服务的基本概念。Web服务基于SOAP(Simple Object Access Protocol)协议,通过...

    cxf客户端调用axis服务端流程

    在Java开发中,CXF和Axis是两种广泛使用的Web服务框架。CXF主要用来创建和消费SOAP和RESTful Web服务,而Axis则是Apache组织早期推出的一款Web服务框架,主要用于SOAP服务。本文将深入探讨如何使用CXF客户端调用Axis...

    cxf3.1.1客户端需要最少的JAR

    标题 "cxf3.1.1客户端需要最少的JAR" 涉及到的是Apache CXF框架的一个特定版本——3.1.1,用于构建轻量级的客户端应用程序。Apache CXF是一个开源服务框架,它允许开发人员通过SOAP、RESTful、XML/HTTP等多种协议...

    开发CXF JAVA客户端

    在IT行业中,开发CXF Java客户端是一项常见的任务,特别是在构建基于Web服务的应用程序时。CXF是一个开源框架,它提供了创建和消费SOAP和RESTful Web服务的能力。本篇将深入探讨如何利用CXF来开发Java客户端,同时也...

    cxf客户端所需jar包-4个

    标题 "cxf客户端所需jar包-4个" 暗示了这四个JAR文件是Apache CXF框架中用于构建客户端应用程序的基本组件,使得开发者能够方便地调用Web服务。Apache CXF是一个开源的Java框架,它允许创建和消费Web服务,支持多种...

    CXF客户端支持最少jar

    CXF客户端是开发人员用来与CXF服务交互的重要组件,它允许我们轻松地调用远程Web服务。然而,为了减小程序的体积和依赖性,有时我们需要精简CXF客户端所依赖的jar包。本文将深入探讨如何配置和使用CXF客户端所需的...

    cxf客户端出现GBK编码问题解决jar.rar

    综上所述,解决CXF客户端的GBK编码问题需要对服务端和客户端的配置有深入理解,并且要确保在数据传输的每个环节都正确处理字符编码。通过以上步骤,你应该能够解决大多数由GBK编码引起的乱码问题。在实际应用中,...

    CXF webservice 动态地址客户端相关代码和jar包

    在CXF中,动态地址客户端是指能够根据运行时的信息(如服务器地址、端口等)动态改变服务调用目标的能力。这种功能在分布式系统和云环境中非常有用,因为服务的IP或端口可能会发生变化。 以下是对CXF Webservice...

    cxf生成客户端 服务端代码

    cxf生成客户端 服务端代码

    CXF3.1.11客户端jar包.rar

    "CXF3.1.11客户端jar包.rar"是CXF框架的一个版本3.1.11的客户端组件集合,它包含了一系列必要的jar文件,使得开发者能够快速搭建和使用CXF进行Web服务的开发。 在Web服务开发中,CXF提供了两种主要的客户端API:...

    CXF客户端,自动生成方式

    本篇文章将深入探讨如何使用CXF作为客户端框架,通过MyEclipse集成开发环境自动生成Web服务客户端。 首先,我们要理解CXF的基本概念。CXF,全称“CXF:Confusing eXtensible Framework”,它提供了多种方式来创建...

    cxf 开发webservice客户端

    在IT行业中,CXF是一个广泛使用的开源框架,用于开发和实现Web服务,无论是SOAP(简单对象访问协议)还是RESTful风格的服务。本篇文章将详细探讨如何利用CXF框架开发一个Web服务客户端,以及如何进行测试。 一、CXF...

    webservice cxf 服务端客户端传递参数的例子demo

    下面我们将深入探讨"webservice CXF 服务端客户端传递参数的例子demo"。 1. **CXF框架介绍** CXF是一个Java框架,它允许开发者通过简单的API来创建和使用Web服务。CXF支持多种Web服务标准,如WS-I Basic Profile、...

    webservice的cxf框架客户端调用所需jar包

    CXF框架是Apache组织开发的一款开源的Web服务框架,它支持SOAP、RESTful等多种Web服务标准,同时也提供了客户端和服务端的实现。在使用CXF框架进行Web服务客户端调用时,需要依赖一系列的JAR包来确保功能的正常运行...

    CXF客户端添加soapHeader代码 + jar包 + apache-cxf-3.1.15

    在开发基于SOAP协议的服务时,有时我们需要在请求中添加特定的Header信息,这在CXF框架下可以通过编程方式实现。Apache CXF是一个流行的开源服务框架,支持SOAP和RESTful服务的开发、部署和消费。本示例将详细介绍...

    apache-cxf-2.7.7以及cxf客户端所需要的jar包

    这个压缩包"apache-cxf-2.7.7以及cxf客户端所需要的jar包"包含了Apache CXF 2.7.7版本及其客户端运行所需的库文件。这些jar包对于创建、部署和消费Web服务至关重要,特别是对于使用命令行生成Web服务客户端的开发者...

    WebService开发客户端 cxf方式

    3. **构建客户端配置**:在CXF客户端中,通常需要配置客户端的地址、协议等信息。这可以通过XML配置文件或者Java代码实现。 4. **实例化客户端和服务调用**:生成的Java代码中会有服务接口和服务代理类。实例化代理...

    Java cxf开发webservice,分别有客户端和服务端

    1.使用Java 2.用cxf开发webservice ...客户端也需要接口类文件和pojo,和cxf客户端xml 但是没有接口的实现类,就是为了去服务端来调用的。 具体有不懂可以问我 给我发消息, 劳烦评价 ,请大家支持原创 禁止转载

    CXF 一个完整的webService(整合客户端和服务端)

    1. 动态客户端:通过CXF的WSDL2Java工具,根据WSDL生成客户端代码。 2. 静态客户端:手动编写客户端代码,调用服务接口。 **4. 整合CXF客户端和服务端** 在实际项目中,可能会同时存在服务端和客户端的开发。为了...

    CXF客户端生成器

    【CXF客户端生成器】是基于Apache CXF框架的一个实用工具,主要用于自动生成Java客户端代码,使得开发者可以方便地调用Web服务。Apache CXF是一个开源的SOAP和RESTful Web服务框架,它允许开发者创建和消费各种Web...

Global site tag (gtag.js) - Google Analytics