客户端用cxf调用webservice,写法如下:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setAddress(args[0]);
        factory.setServiceClass(Hello.class);
        Hello upload = (Hello)factory.create();请问一下,这个Hello.class是服务器端的类,这里面调用,必须要引人Hello.class类那岂不是把服务器的类要提供给调用者?有些写法里面,甚至要把Hello的实现类也要提供给调用者,那这样岂不是很不安全?业务逻辑都能看见了

解决方案 »

  1.   


    我看的一个文章里说的,当对一个请求要身份验证的时候,说是要用到实现类。就算是只用到接口那岂不是用我的webservice还要给他一个类?
      

  2.   

    那你对cxf的原理还弄得不明白,
    Hello upload = (Hello)factory.create();
    虽然看上去是在本地有一个对象,其实真正的操作是在服务器端完成的,只是让你看去来""在本地执行而已.所以本地的对象只需要接口就行了,或者是一个"影子"对象
      

  3.   


    我主要是觉得用webservice还要提供个服务器的类,这种方式好像很怪异。。
      

  4.   

    一般跟对方融合,是通过你的java类生成wsdl文件交给对方或者告诉对方你的webservice地址,然后让对方根据wsdl生成客户端代码。好多开发工具都可以生成客户端代码。
    不会暴露你内部业务方法,只是给对方接口方法。对方调用你接口方法就会触发你本地写好的实现类。
    但是中间这一步调用过程是通过wsdl以及http协议还有soap标准通信实现。xml里面的只是数据格式,还有基本数据类型或者自定义对象的格式定义,还有接口方法、webservice地址等。你内部的业务逻辑是看不到的