博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【技术贴】webservice cxf2 客户端动态调用报错No operation was found with the name
阅读量:6087 次
发布时间:2019-06-20

本文共 2244 字,大约阅读时间需要 7 分钟。

 

No operation was found with the name xxx

出错原因是因为发布服务的接口所在包路径和此接口实现类包路径不一致,比如你的服务接口可能放在了包com.x.interFace下,但是你的实现类却在com.x.interFace.impl包下,此时,发布的服务被客户端动态调用(JaxWsDynamicClientFactory)的时候,就会报错:

org.apache.cxf.common.i18n.UncheckedException: No operation was found with the name {http://impl.server.test.com/}xxxx.

就是说找不到某个方法

 

解决办法也很简单:直接在你的实现类上,加上注解:targetNamespace = "http://service.webservice.com/",这个包名(服务接口所在的包名)反写

 

如下:

我的实现类包名是com.webservice.service.impl

我的服务接口包名:com.webservice.service

所以 targetNamespace要写成我的服务接口所在包名的反写

@WebService(endpointInterface = "com.webservice.service.Server1", serviceName = "server1", targetNamespace = "http://service.webservice.com/")public class Server1Impl implements Server1 {     public String getInfo(String name, int age) {        return name.concat(",Hello Word! ! " + name + " age: " + age);    }     public static void main2(String[] args) {        Server1Impl serverImpl = new Server1Impl();        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();        factory.setServiceClass(Server1.class);         factory.setAddress("http://localhost:1111/server1");        factory.setServiceBean(serverImpl);        factory.getInInterceptors().add(new LoggingInInterceptor());        factory.getInInterceptors().add(new LoggingOutInterceptor());         factory.create();     } }

以下摘自:

信息: Created classes: com.test.server.HelloWorld, com.test.server.HelloWorldResponse, com.test.server.ObjectFactoryException in thread "main" org.apache.cxf.common.i18n.UncheckedException: No operation was found with the name {http://impl.server.test.com/}helloWorld.    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:342)    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:336)    at com.test.client.HelloWorl.main(HelloWorl.java:20)Java Result: 1

 

解决方法:对服务端的接口实现类中的@WebService添加targetNamespace,其值为接口包名的倒置,

例如我的IHelloWorld接口所在的包为com.test.server,此时对应的targeNamespace的值为http://server.test.com/

例如:

 

@WebService(        endpointInterface = "com.test.server.IHelloWorld",         serviceName="helloWorld",         targetNamespace="http://server.test.com/")public class HelloWorldImp implements IHelloWorld {    public String helloWorld(String name) {        return name+" Hello,World!";    }

 

   

转载地址:http://ftpwa.baihongyu.com/

你可能感兴趣的文章
HDU 4803 Poor Warehouse Keeper (贪心+避开精度)
查看>>
小错误汇总
查看>>
Spring源码系列 — Envoriment组件
查看>>
java正则表达式去除html标签,Java中正则表达式去除html标签
查看>>
使用Cobbler批量部署Linux操作系统
查看>>
zabbix企业应用之服务端与客户端的安装
查看>>
实例讲解遗传算法——基于遗传算法的自动组卷系统【理论篇】
查看>>
无法在web服务器上启动调试。调试失败,因为没有启用集成windows身份验证
查看>>
Bat相关的项目应用
查看>>
Django为数据库的ORM写测试例(TestCase)
查看>>
web.xml中的contextConfigLocation在spring中的作用
查看>>
NYOJ-107 A Famous ICPC Team
查看>>
与众不同 windows phone (44) - 8.0 位置和地图
查看>>
Visual Studio Code 使用 ESLint 增强代码风格检查
查看>>
iOS设备中的推送(二):证书
查看>>
敏捷 - #3 原则:经常提供工作软件 ( #3 Agile - Principle)
查看>>
数据结构与算法:二分查找
查看>>
使用思科模拟器Packet Tracer与GNS3配置IPv6隧道
查看>>
Linux设备驱动之Ioctl控制【转】
查看>>
iOS开发-NSPredicate
查看>>