解决方案 »

  1.   

    一般是使用stub类,和代理类。这样就可以像调用本地方法一样调用远程服务。
    我用cxf开发的webservice,可以产生wsdl
    然后用cxf带着的wsdl2java,产生stub类。./wsdl2java -p client.stub -d /home/li/ -client  http://localhost:8080/WebServices/services/AlarmService?wsdl
    -p 指定stub类的包名
    -d 存放的目录
    这两个参数生成的stub类,会放在 /home/li/client/stub文件夹下。
    -client指定,生成客户端的调用示例,可以不加。
    后面跟的是wsdl的地址。然后把类放到项目的包中。然后写代码调用。//代理工厂,用来产生服务代理类
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    //参数是生成的stub类中的接口类
            factory.setServiceClass(AlarmServiceInterface.class);
    //这个地址是服务的地址,不是wsdl地址,这个地址在wsdl文档的最后
            factory.setAddress("http://localhost:8080/WebServices/services/AlarmService");
    //产生代理
            AlarmServiceInterface serviceProxy = (AlarmServiceInterface) factory.create();
    //直接调用方法
    serviceProxy.doAlarm("good");
    这只是我用的方法,我觉得还是比较方便的, 如果不想生成stub类,可以使用动态调用。
      

  2.   

    jdk 自带了一个wsimport.exe工具!可以根据wsdl生成相应的Java客户端代码!
      

  3.   

    各位,注意,我是想要直接生成soap请求的方式去调用webservice,并不是生成客户端代码去调用。