zoukankan      html  css  js  c++  java
  • axis2开发实例(二)建立独自的新工程

    axis2开发实例--建立独自的新工程

     

    第一部分 环境搭建

    1.  环境搭建

    (1)    下载Axis2服务包:axis2-1.6.2-bin.zip,axis2-1.6.2-war.zip,分别解压到D:webservice_axis2。

    (2)下载myeclipse的axis2插件Axis2_Codegen_Wizard_1.3.0 和Axis2_Service_Archiver_1.3.0,一个是帮助我们生成aar文件的,另一个是帮我们用wsdl文件生成stub代码的。解压后将axis2插件包下的Axis2_Codegen_Wizard_1.3.0和Axis2_Service_Archiver_1.3.0文件夹拷贝至Myeclipse8.5dropins 目录下,重启myeclipse生效

     

    2.  编码  参考《http://blog.csdn.net/ge_zhiqiang/article/details/7656112》

    (1)新建web工程newWebservice ,引入axis2的lib包

    A、将Axis-War包解压后,把WEB-INF/下的conf,modules,services,lib拷贝到工程newWebservice 的WebRoot/WEB-INF/

    B、修改web.xml,添加axis2的servlet

    <servlet>

           <servlet-name>AxisServlet</servlet-name>      <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>

           <load-on-startup>1</load-on-startup>

        </servlet>

        <servlet>

           <servlet-name>AxisAdminServlet</servlet-name>     <servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class>

        </servlet>

        <servlet-mapping>

           <servlet-name>AxisServlet</servlet-name>

           <url-pattern>/servlet/AxisServlet</url-pattern>

        </servlet-mapping>

        <servlet-mapping>

           <servlet-name>AxisServlet</servlet-name>

           <url-pattern>*.jws</url-pattern>

        </servlet-mapping>

        <servlet-mapping>

           <servlet-name>AxisServlet</servlet-name>

           <url-pattern>/services/*</url-pattern>

        </servlet-mapping>

        <servlet-mapping>

           <servlet-name>AxisAdminServlet</servlet-name>

           <url-pattern>/axis2-admin/*</url-pattern>

        </servlet-mapping>

     

    (2)创建service,用于发布

    HelloWorldService.java

        package com.service;

     

    public class HelloWorldService

    {

     

        public String sayHi(String helloName)

        {

           return "hi " + helloName;

        }

    }

    (3).发布service

    A、右键工程名newWebservice --NewàOther,选择Axis2 Service Archiver,

     

    B、打包编译文件,指向编译好的service文件位置,一般都是XXXWebRootWEB-INFclasses,选择E:workspaces_8.5 newWebservice WebRootWEB-INFclasses目录,记得红色标记处的勾选取消掉

    Ps:这里指定位置都是WEB-INFclasses目录,因为第D步填写的service包路径就是相对于此目录的

     

    C、下一步略过wsdl文件选择,下一步选择依赖的的jar文件,没有可不用选择,下一步自动设置service.xml配置文件,

     

    D、下一步,填写需要发布的webservice名称以及对外开放的服务类名称(自定义),服务类名称前面要带包名,(需要手动填写service路径,点击Load)

    勾选Search declared method only,可以在下面的列表框中看见我们对外发布的方法名

     

    E、下一步,将arr文件生成在newWebservice工程的WebRoot/WEB-INF/services ,E:workspaces_8.5 ewWebserviceWebRootWEB-INFservices;

     

    F、启动tomcat,访问http://localhost:8080/newWebservice/services/HelloWordService?wsdl,得到wsdl文件。

    至此发布完成。

    第二部分  使用客户端测试webservice

    (1)       根据wsdl生成客户端,有两种方式

    方式一:使用myeclipse的axis2插件Axis2 Code Generator生成客户端

    方式二:使用基本的命令行方式

    Ps:本人使用方式一生成的代码不能够编译,提示有问题;因此采用方式二:

    (3)方式二:制作《根据wsdl生成java代码.bat》

    1.在D:webservice_axis2中,已有axis2-1.6.2-bin,目标wsdl文件如Axis2Wsdl.wsdl

    新建根据wsdl生成java代码.bat,内容如下:

    set JAVA_HOME=D:Program FilesJavajdk1.6.0_10

    set AXIS2_HOME=D:webservice_axis2axis2-1.6.2-binaxis2-1.6.2

     

    set Output_Path=Testclient

     

    set Package=com.webservice.client

     

    set Wsdl_File=D:webservice_axis2Axis2Wsdl.wsdl

     

    %AXIS2_HOME%inwsdl2java -uri %Wsdl_File% -p %Package% -s -o %Output_Path%

    ::一定要设置JAVA_HOME

    ::其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。如 http://localhost:8080/axis2/services/SimpleService?wsdl

    ::-p参数指定了生成的Java类的包名

    ::-o参数指定了生成的一系列文件保存的根目录

    @echo  -------------OK-----------------

     

    @echo ---The code has been created in the folder: Testclient---

     

    @pause

    绿色部分都是根据实际设置,执行批处理脚本生成的客户端代码会在Testclient中;

     

    (2)       将Testclient中的src下的文件覆盖到项目Axis2Client的src下;新建测试代码

    Test.java

    package com.client.test;

     

    import com.webservice.client.MyServiceStub;

    import com.webservice.client.MyServiceStub.AddStudent;

    import com.webservice.client.MyServiceStub.AddStudentResponse;

    import com.webservice.client.MyServiceStub.AddStudents;

    import com.webservice.client.MyServiceStub.AddStudentsResponse;

    import com.webservice.client.MyServiceStub.GetGreeting;

    import com.webservice.client.MyServiceStub.GetGreetingResponse;

    import com.webservice.client.MyServiceStub.QueryStudent;

    import com.webservice.client.MyServiceStub.QueryStudentResponse;

    import com.webservice.client.MyServiceStub.QueryStudents;

    import com.webservice.client.MyServiceStub.QueryStudentsResponse;

    import com.webservice.client.MyServiceStub.Student;

     

    public class Test

    {

             public static void main(String[] ss)

             {

                       // 设置远程服务调用地址

           String target = "http://localhost:8080/newWebservice/services/HelloWordService";

     

           try

           {

               // 根据地址构造用户存根

               HelloWordServiceStub stub = new HelloWordServiceStub(target);

     

               SayHi sayHi = new SayHi();

               sayHi.setHelloName("servyou");

               SayHiResponse ggr = stub.sayHi(sayHi);

               // 接收方法返回值

               String getResult = ggr.get_return();

               System.out.println(getResult);

     

            

           } catch (Exception e)

           {

               e.printStackTrace();

           }

        }

     

    第三部分 备注信息

    备注:发布可以不生成arr文件,好处在于:经常改动代码或者添加安全控制模块如wss4j,因为经常改动 services.xml,所以这种情况最好不打包;否则最好打包发布

    方法:

    (1)    在/WEB-INF/services新建HelloWorldService(最好命名跟service命名一样,便于识别);

    (2)    在HelloWorldService新建META-INF目录,在META-INF中建立services.xml文件

    <service name="HelloWordService">

          <description>

               Please Type your service description here

          </description>

          <messageReceivers>

               <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>

               <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>

          </messageReceivers>

          <parameter name="ServiceClass">com.service.HelloWorldService</parameter>

    </service>

    至此测试完毕

     

    第四部分 补充

    网上的实例基本都是将开发的service打包放到axis2中,但是在实际开发中,则不现实,不可能来回拷贝。而实际项目中存在两种可能性:A、新的web项目 B、已存在的web项目,如有需求:对外提供基于axis2的webservice,那么本实例就是演示这种情情况。

     ps:可以将《axis2开发实例(一)》例子合并开发复杂类型

  • 相关阅读:
    jQuery-1.9.1源码分析系列(九) CSS操作
    jQuery-1.9.1源码分析系列(八) 属性操作
    jQuery-1.9.1源码分析系列(七) 钩子(hooks)机制及浏览器兼容续
    由一次虚拟内存耗尽看32bits elf在x86_64下运行方式及地址空间布局
    关于TCP关闭想到的一些问题
    pure virtual method called的一种情况
    linux下内存分配时overcommit使用
    gcc对C++局部静态变量初始化相关
    为什么cat binary之后可能出现乱码
    gcc的模版匹配及其它
  • 原文地址:https://www.cnblogs.com/qqzy168/p/3400010.html
Copyright © 2011-2022 走看看