zoukankan      html  css  js  c++  java
  • Axis2+wsdl2java.bat生成客户端调用

        Axis2和Axis相比,增加了异步调用的方式,而且代码的使用更方便。本文用一个例子来描述如何快速使用Axis2来创建WebService客户端代码。 
    1 准备环境 
    (1)下载Axis2,并解压。 
    官方网址:http://ws.apache.org/axis2/ 
    (2)设置环境变量 
    SET AXIS2_HOME=解压后bin目录所在的目录,尽量不要有空格或中文 
    SET PATH=%AXIS2_HOME%in;%PATH% 

    (3) 修改bin目录中的wsdl2java.bat 
    为了方便使用,以及避免一些NoClassFoundException类似的问题,修改wsdl2java.bat文件,查找:
    set _RUNJAVA="%JAVA_HOME%injava" 
    在这一行下面增加如下一行 
    set JAVA_OPTS="-Djava.ext.dirs=%AXIS2_HOME%lib" 

    2 以一个WhoIs WebService为例: 
    生成存根代码 
    WSDL2Java -uri http://www.webservicex.net/whois.asmx?wsdl -o src 
    程序运行完成后,在src文件生成如下文件: 
    E:SRCNET 
    └─webservicex 
        └─www 
                WhoisCallbackHandler.java 
                WhoisStub.java 

    3 同步调用 
    (1) 编写DemoSync.java 
    import net.webservicex.www.*; 
    public class DemoSync { 
        public static void main(String[] args) { 
            try { 
       WhoisStub stock=new WhoisStub(); 
       WhoisStub.GetWhoIS param=new WhoisStub.GetWhoIS(); 
       param.setHostName("www.sohu.com"); 
       WhoisStub.GetWhoISResponse response=stock.GetWhoIS(param); 
       System.out.println(response.getGetWhoISResult()); 

            } catch (java.rmi.RemoteException remoteException) { 
                remoteException.printStackTrace(); 
            } 
        } 

    (2) 测试 
    运行java -Djava.ext.dirs=%AXIS2_HOME%lib DemoSync 

    4 异步调用 
    (1) 继承WhoisCallbackHandler类,如下编写MyWhoisCallbackHandler.java; 
    package net.webservicex.www; 
    public class MyWhoisCallbackHandler extends WhoisCallbackHandler{ 
        public void receiveResultGetWhoIS( 
            net.webservicex.www.WhoisStub.GetWhoISResponse result) { 
      System.out.println(result.getGetWhoISResult()); 
        } 


    (2) 编写DemoAsync.java 
    import net.webservicex.www.*; 
    public class DemoAsync { 
        public static void main(String[] args) { 
            try { 
       WhoisStub stock=new WhoisStub(); 
       WhoisStub.GetWhoIS param=new WhoisStub.GetWhoIS(); 
       param.setHostName("www.sohu.com"); 
       WhoisCallbackHandler handler=new MyWhoisCallbackHandler(); 
       stock.startGetWhoIS(param,handler); 
       System.out.println("Sent a request."); 
       while(handler.getClientData()==null) 
       { 
        try{ 
        Thread.sleep(30000);//等待Handler返回结果,以测试返回情况,实际应用中,此处可以去做其他操作,当结果返回时在MyWhoisCallbackHandler.receiveResultGetWhoIS()方法中把数据进行显示、保存或激活其他时间等操作。 
        }catch(InterruptedException e){} 
       } 
            } catch (java.rmi.RemoteException remoteException) { 
                remoteException.printStackTrace(); 
            } 
        } 

    (3) 测试 
    运行java -Djava.ext.dirs=%AXIS2_HOME%lib DemoAsync 


    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1743249 


    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    Web Service - axis2 
    最近在项目中有用到web service。在做之前google了一下,发现网上有扑天盖地的有这方面的一些文章。说这是下代在技术的制高点!我axis2做了一下“hello world !“没感到有太大的难度,可能是没有用到高级的特性吧!先写好你要发布成service的类。pojo就行了!: 

    public class MiniService { 
        public String hello(String msg) 
        { 
            return "Hello World"; 
        } 


    要想正确的deploy一个server,其中server.xml这个文件是必不可少的,下面就是这个例子中所用到的 
    server.xml文件:请注意这个文件是要放在META-INF这个文件中的。 

    <?xml version="1.0" encoding="UTF-8"?> 
    <service> 
        <parameter name="ServiceClass" locked="false">com.inventec.ws.MiniService</parameter> 
        <operation name="hello"> 
            <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> 
        </operation> 
    </service> 

    最后打包好的jar文件放到 axis2WEB-INFservices 下。tomcat就会将这个服务deploy. 
    要想正确的调用这个service你还得生成stub.用axis2所自带的工具就可很简单生成stub.如: 

    D:ws>wsdl2java -uri http://localhost:8080/axis2/services/ws?wsdl 

    生成的东东很长看得很累!你在调用时基本上可用类以如下的方法: 


    public class WsTest { 

        /** 
         * @param args 
         * @throws RemoteException 
         */ 
        public static void main(String[] args) throws RemoteException { 
            // TODO Auto-generated method stub 


            WsStub stub = new WsStub(); 
            WsStub.Hello request = new WsStub.Hello(); /**/ 
            request.setMsg("jade");/**/ 
            WsStub.HelloResponse reponse = stub.hello(request); 
            String str = reponse.get_return(); 
            System.out.println("str = " + str); 
            
        } 



    当然若你发布的server若是没有参数的一个方法则在调用时不要生成这个方法对象。 

    只要记住: 

        先生成一个stub实例 
        在stub中service的方法以成为它的一个变量。我们生成一个类似于方法的对象 
        给这个方法input,调用参数。 
        用前面生成的方法对象调用stub实例中的与server中的同名方法。并返回一个Response, 
        调用response的get_return()得到返回值!
  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318197.html
Copyright © 2011-2022 走看看