zoukankan      html  css  js  c++  java
  • Java调用webservice接口方法

       

    1. Java调用webservice接口方法

    webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。

    我们也可以在以下网站找到许多 webservice provider列表, 你可以使用下面的URL来测试你的webservice程序。

     

    http://www.webservicex.net/ws/default.aspx

     

    这上面列出了70多个包括很多方面的free webservice provider,utilities->global weather就可以获取全球的天气预报。

     

    下面我们来看Java如何通过WSDL文件来调用这些web service(以 COPS WebSSO为例)

     

    1.1 [Apache提供]直接通过AXIS调用远程的web service

     

    我认为这种调用方式适合比较那种返回比较简单的数据的service, 比如,天气预报,这些内容肯定可以通过一个很简单的xml来返回。还有就是WebSSO,返回的就是一个字符串。

    这种调用方式的好处就是简单(开发简单,调用简单,只要service提供方不改动对外的方法接口,客户端都无需有代码带动),无需对web service有太深了解,只要按照套路去掉用就可以了。

     

    直接调用模式如下:

     

    <<LogonClientWithURL.java>>

     

    package ws.client;

     

    import org.apache.axis.client.Call;

    import org.apache.axis.client.Service;

     

     

    public class LogonClientWithURL {

      public static void main(String args[]) throws Exception {

            try {

                      String urlname = "http://192.168.194.23:9080/Logon/services/Logon?wsdl" ;

                      urlname = "http://192.168.194.23:9080/Logon/services/Logon";

                       

                      Service s = new  Service();

                      Call call = (Call) s.createCall();

                      call.setTimeout(new Integer(5000));

                      call.setOperation( "getSecurityToken" );

                      call.setTargetEndpointAddress(urlname);

                         

                      Object[] fn01 = { "john" , "john" , null ,null };

                      String val = (String)call.invoke(fn01);

                      System.out .println( "getSecurityToken(correct):"  + val);

                       

                      Object[] fn02 = { "john" , "john2" , null ,null };

                      String va2 = (String)call.invoke(fn02);

                      System.out .println( "getSecurityToken(wrong):"  + va2);

               

            } catch (Exception e) {

                  //java.io.InterruptedIOException: Read timed out

                  System.out.println(e.getMessage());

            }

     

      }

    }

    1.2 [Apache提供]使用WSDL2Java把WSDL文件转成本地类,然后像本地类一样使用。

    这种方式应该可以调用所有的webService。

    同时这个调用方式适合那种业务比较复杂的Service (特别是企业应用, 不是外部所有人都能无限制访问那种Service),比如,这个Service返回的xml内容比较复杂,同时多个客户端系统都需要访问这个Service,在这种情况,service提供方可能会考虑返回一个java类。毕竟,每个客户端都要解析xml也够麻烦的,还不如让service提供方返回一个类。

    调用模式如下:

    1)使用WSDL2Java把WSDL文件转成本地类。 我这里写了bat文件:

    <<WSDL2JAVA.bat>>

    set Axis_Lib=.lib

    set Java_Cmd=D:DevJDKjdk1.4.2_12injava -Djava.ext.dirs=%Axis_Lib%

    set Output_Path=.src

    set Package=com.ubs.ws

    %Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% http:\192.168.194.23:9080LogonservicesLogonwsdlLogon.wsdl

    Pause

    运行直接生成以下java类

    Logon.java

    LogonService.java

    LogonServiceLocator.java

    LogonSoapBindingStub.java

    2) <<LogonClientWithStub.java>>

    package test.cis.client;

     

    import test.cis.*;

     

    public class LogonClientWithStub {

     

          public static void main(String[] args) {

                try {

     

                      Logon locator = new LogonServiceLocator().getLogon();

                      String result = locator.getSecurityToken("john" , "john" ,null , null );

     

                      System.out.println("getSecurityToken(correct): " + result);

                     

                     

                      result = locator.getSecurityToken("john" , "john2" ,null , null );

     

                      System.out.println("getSecurityToken(wrong): " + result);

                     

                } catch (Exception e) {

                      // TODO Auto-generated catch block

                      e.printStackTrace();

                }                      

               

          }

     

    }

    1.3 [Apache提供]直接SOAP调用远程的webservice

    apache的soap项目,不过如今已经被axis取代了,后者重新进行了架构设计,功能更齐全。

    前者已停止开发。所以建议用axis。也就是1.1 & 1.3

    1.4 [XFire提供] 使用XFire调用WebService

    有兴趣的可以下载XFire的jar来学习一下。

    转自:http://blog.csdn.net/lxqluo/article/details/6968599

    那一汪清眸,那一瞥青涩的目光,那一段青春岁月。我一直在寻找,寻找一个属于我的婆娑世界,寻找那一年的自己,再也回不去了……
  • 相关阅读:
    Solr4.10.2集成Nutch1.9与自带UI界面使用
    Solr4.10.2的IK Analyzer分词器配置
    Solr4.10.2的Tomcat配置
    Nutch1.9安装配置与基本使用介绍
    ubuntu14.10中tomcat8设置管理员帐号
    ubuntu14.10折腾tomcat8,是的,折腾
    spring webservice 开发demo (实现基本的CRUD 数据库采用H2)
    spring webservice 搭建出现的异常处理。异常: NAMESPACE_ERR: An attempt is made to create or change an object in a way whi
    hibernate.cfg.xml hibernate 配置文件模板
    spring 与 CXF 整合 webservice 出现error “Unable to locate Spring NamespaceHandler for XML schema namespace” 总结
  • 原文地址:https://www.cnblogs.com/feiger/p/3968077.html
Copyright © 2011-2022 走看看