日期:2014-05-17  浏览次数:20628 次

java程序调用远程webservice的疑问-熟悉cxf的进来
1.本地java工程一使用cxf起了个webservice服务,该服务的接口本地绝对路径为com.test.demo.HelloWorld;

2.本地java工程二将工程一的Helloworld接口和实现完整的拷贝过来,路径和工程一完全一致。
  Client通过org.apache.cxf.jaxws.JaxWsProxyFactoryBean使用映射获取HelloWord实例成功调用了
  该webservice的sayHi(String name)方法。

疑问:工程二若想成功调用该webservice,必须将工程一的webservice服务helloworld完整的拷贝到本地,然后使用映射获取
      实例才可完成调用,否则就会报classnotfound错误。

请问:webservice不是公布接口就可以任意调用的吗,若工程二
      不将webservice代码拷贝到本地的话,根本无法调用;
      实际上想在代码里调用webservice的人,不可能获取服务器的代码.
      在只知道url的情况下,程序有办法调用该webservice吗?附上客户端访问代码如下:

public class HelloWorldClient {
         public static void main(String[] args) {
                   JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
                   svr.setServiceClass(HelloWorld.class);
                   svr.setAddress("http://localhost:8080/helloWorld");
                   HelloWorld hw = (HelloWorld) svr.create();
                   User user = new User();
                   user.setName("Tony");
                   user.setDescription("test");
                   System.out.println(hw.sayHiToUser(user));
         }
}

------解决方案--------------------
有个 cilent.get.......然后返回的是一个 object[][]数组 这样 就不用你的这一句了
 (HelloWorld) svr.create(); 强转了 你去找找吧 我记得是Clilent 
------解决方案--------------------
如果是客户端调用接口,建议使用HttpConnection的方式,有些客户端不支持Cxf的Jar包