zoukankan      html  css  js  c++  java
  • Eclipse利用Axis2插件构建Web Service并测试

          在学习Web Service的时候,从网上找到前辈的博客http://www.cnblogs.com/hexinlin/p/3358558.html,并依此文的方法按部就班:编写欲发布的java类HelloDemo.java -> 生成.arr文件并发布服务至Tomcatwebappsaxis2WEB-INFservices下,且访问http://127.0.0.1:8080/axis2/services/HelloDemo?wsdl成功…但当行至文中步骤“c.生成stub类”,在Axis Codgen wizard向导WSDL file location一栏中填入“http://127.0.0.1:8080/axis2/services/HelloDemo?wsdl”时,报错:“Specified WSDL is invalid!, Please select a validated *.wsdl/*.xml file on previous page.”

    package com.hxl.webservice.service;
    
    public class HelloDemo {
    
        public String sayHello(String name) {
            return "Hello"+name;
        }
        
        public String getResp() {
            return "请求被响应";
        }
    }
    

       一时没找到解决办法,只能另辟蹊径:用原先的HelloDemo.java生成一个WSDL文件HelloDemo.wsdl存在本地——D:ProjectTestWebSersrcHelloDemo.wsdl。

    然后利用HelloDemo.wsdl文件再生成相关的java代码。如下:

    ExtensionMapper.java
    GetResp.java
    GetRespResponse.java
    HelloDemoCallbackHandler.java
    HelloDemoStub.java
    SayHello.java
    SayHelloResponse.java
    TestMethods.java

          在HelloDemoStub.java中“implements HelloDemo”处报错。这是由于HelloDemo.java中的HelloDemo类并非接口interface。只需将“implements HelloDemo”删除即可。

    public class HelloDemoStub extends org.apache.axis2.client.Stub implements HelloDemo{
    protected org.apache.axis2.description.AxisOperation[] _operations;
    

           然后要做的是实现抽象类HelloDemoCallbackHandler中的receiveResultgetResp和receiveResultsayHello方法,以此来得到你想要的东西:

    package com.hxl.webservice.stub;
    
    import com.hxl.webservice.service.HelloDemoCallbackHandler;
    import com.hxl.webservice.service.SayHelloResponse;
    import com.hxl.webservice.service.GetRespResponse;
    
    public class MyCallBack extends HelloDemoCallbackHandler {
    
        @Override
        public void receiveResultgetResp(GetRespResponse result) {
            System.out.println(result.getLocal_return());
        }
    
        @Override
        public void receiveResultsayHello(SayHelloResponse result) {
            System.out.println(result.getLocal_return());
        }
    }
    

      然后再写一个方法集中调用的类TestMethods :

    package com.hxl.webservice.service;
    import com.hxl.webservice.stub.*;
    
    import java.rmi.RemoteException;
    
    import org.apache.axis2.AxisFault;
    
    public class TestMethods {
    	public void testGetResp() throws Exception{
    		HelloDemoStub stub = new HelloDemoStub();		
    		GetResp gr = new GetResp();
    		System.out.println(stub.getResp(gr).get_return());		
    	}	
    	public void testSayHello() throws Exception{
    		
    		HelloDemoStub stub  = new HelloDemoStub();
    		SayHello sh = new SayHello();
    		sh.setName(" hxl");
    		System.out.println(stub.sayHello(sh).get_return());	
    	}	
        public void testGetAyn() throws Exception {    	
        HelloDemoStub stub = new HelloDemoStub();
    	GetResp gr = new GetResp();
    	stub.startgetResp(gr ,new MyCallBack());
    	
    	SayHello sh = new SayHello();
    	sh.setName(" Darren!");
    	stub.startsayHello(sh, new MyCallBack());
    	
    	System.out.println("异步调用");
    	System.in.read();	
    	}	
    }
    

      最后,写一个含main方法的测试类Clnt:

    package com.hxl.webservice.service;
    
    import java.rmi.RemoteException;
    import org.apache.axis2.AxisFault;
    
    public class Clnt {
    	/**
    	 * @param args
    	 * @throws Exception 
    	 */
    	public static void main(String[] args) throws Exception {				
    
    		TestMethods tm = new TestMethods();
    		//tm.testGetResp();
    		//tm.testSayHello();
    		tm.testGetAyn();
    	}
    }
    

       执行打印结果:

            异步调用

            请求被响应

           Hello Darren!

  • 相关阅读:
    KlayGE 4.0功能规划
    Kinect for Windows SDK发布
    CENTOS下用syslogng集中管理日志并压缩保存
    Eclipse+Plugin
    struts2 获取request、session的方法
    ActiveMQ使用经验
    springmock + dbutil 用来测试数据库操作
    英语学习
    如何查看eclipse版本
    jQuery插件的开发
  • 原文地址:https://www.cnblogs.com/tigerhsu/p/5033617.html
Copyright © 2011-2022 走看看