【技术贴】webservice cxf2 客户端动态调用报错No operation was found with the name

 

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();

    }

}

以下摘自:http://www.cnblogs.com/yshyee/p/3633537.html

信息: Created classes: com.test.server.HelloWorld, com.test.server.HelloWorldResponse, com.test.server.ObjectFactory
Exception 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!";    }

 

    
时间: 2024-09-21 15:48:26

【技术贴】webservice cxf2 客户端动态调用报错No operation was found with the name的相关文章

java-cxf webservice客户端调用报错.高手请进.

问题描述 cxf webservice客户端调用报错.高手请进. <!-- WebServices设置 --> <servlet> <servlet-name>CXFServices</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-

java-axis2 客户端调用报错,org.xml.sax.SAXException

问题描述 axis2 客户端调用报错,org.xml.sax.SAXException - Exception: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize. at org.apache.axis.encoding.ser.SimpleDeserializer.on

cxf restful 参数中有map,调用报错,如何处理(不能二次封装map),请大神帮解一下

问题描述 cxf restful 参数中有map,调用报错,如何处理(不能二次封装map),请大神帮解一下 service代码: @GET @Path("/map") @Produces({"application/json","application/xml"}) public String mapTest(@QueryParam("map")Map map){ return "a"; } 调用代码: M

phprpc远程调用报错,不知道什么原因

问题描述 phprpc远程调用报错,不知道什么原因 我在学习phprpc远程调用,按照网上的教程,发现报错:Incorrect response id (request id: 1, response id: ) n:好纠结啊,求教.贴出代码如下: 服务端,member.php <?php require_once 'jsonRPCServer.php'; /** User: Administrator Date: 2015/12/28 Time: 11:06 */ class member {

服务器-webservice接口调用报错

问题描述 webservice接口调用报错 下载"http://105.211.91.138:8040/esb/webservice"时出错. 基础连接已经关闭: 接收时发生错误. 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接.. 远程主机强迫关闭了一个现有的连接. 元数据包含无法解析的引用:"http://105.211.91.138:8040/esb/webservice". 接收对 http://105.211.91.138:8040/esb/

Struts2.5使用通配符的方式实现动态方法调用报错

在Struts2.5使用通配符的方式实现动态方法调用时报错,困扰了好久... 代码如下 <package name="default" extends="struts-default" namespace="/">     </package>     <package name="users" namespace="/users" extends="default&

axis1.4 调用报错:faultString: java.lang.reflect.InvocationTargetException

问题描述 本来在本地我开两个项目访问是没问题的,然后我把服务端发布在客户的服务器上,在本地写测试代码调用接口时就报错了,望大神指点迷津,我弄了一天了,都快疯了..错误如下:AxisFaultfaultCode:{http://schemas.xmlsoap.org/soap/envelope/}Server.userExceptionfaultSubcode:faultString:java.lang.reflect.InvocationTargetExceptionfaultActor:fau

ssh整合调用自动生成的dao,通过spring配置sessionfactory注入调用报错

问题描述 我用的是ssh整合,自动生成的Dao,但是我不想使用hibernate.cfg.xml,我在sping配置了怎样使用这是spring.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema

【mysql】远程程序调用报错HOSt ip is not allowed to connect t

报错:1130-host ... is not allowed to connect to this MySql server 解决方法: 1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,把user=root的"localhost"值改为"%".