WebService开发概述

        WebService技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成。依据WebService规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么,都可以相互交换数据。以下内容是通过Axis2来实现WebService的描述,包括其在开发过程中的环境搭建、发布及调用。(接触不深,有不正确的地方望极力指出,对其加以修正,谢谢!)

 

一、  服务器端的配置及发布

          1  配置Axis2的环境:

          1.1   我们可以到http://ws.apache.org/axis2/下载Axis2的最新版,可以下载两个zip包: axis2-1.5.4-bin.zip和 axis2-1.5.4-war.zip。

          1.2  其中axis2-1.5.4-bin.zip文件中包含了Axis2中所有的jar文件,axis2-1.5.4-war.zip文件用于将WebService发布到Web容器中。

          1.3  将axis2-1.5.4-war.zip文件解压到相应的目录,将目录中的axis2.war文件放到<Tomcat安装目录>\webapps目录中,并启动Tomcat,在浏览器地址栏中输入如下的URL:http://localhost:8080/axis2/,如看到axis2的主页面则安装成功。


1-1

 

         2使用Axis2不打包发布WebService其基本步骤(适合调试)

          2.1 新建工程及需要发布的WebService接口类和其方法实现,并导入Axis2所需jar包;

          2.2 在web.xml文件配置加载Axis2的文件信息:

         <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-mapping>

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

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

         </servlet-mapping>

代码示例 1

          2.3 把tomcat安装目录下的webapps/axis2/WEB-INF下的modules、services和conf件拷至项目的WEB-INF目录下,及jar包拷贝;

          2.4 然后再services目录下新建:类名/META-INF路径,META-INF下新建services.xml;

         <servicename="SimpleService">

              <!-- 对接口的描述、注释 -->

             <description>

                SimpleService Service

            </description>

            <!--调用接口所在的类路径 -->

            <parametername="ServiceClass">

                com.service.SimpleService

             </parameter>

            <!--

              指定方法:

            如果该方法有返回值则需要使用可处理输入输出的RPCMessageReceiver类;

              如果该方法没有返回值则需要使用只能处理输入的RPCInOnlyMessageReceiver类。

              访问:http://localhost:8080/webservice/services/SimpleService?wsdl

             -->

            <operationname="getPersonJSONArr">

                <messageReceiverclass="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> 

            </operation>

         </service>

代码示例 2

          如果想发布多个WebService,可以使用<serviceGroup>元素:

         <serviceGroup>
          <service name="myService1">

                

             </service>
           <service name="myService2">

                

             </service>

         </serviceGroup>

代码示例 3

         2.5 启动tomcat服务器访问http://localhost:8080/项目访问名称 /services/类名?wsdl。如能看到wsdl的xml服务信息,则说明发布成功。

1-2

         3打包发布WebService其基本步骤(适合发布)

          3.1新建工程及需要发布的WebService接口类和其方法实现;

          3.2 在工程下新建文件夹services/SimpleService(一般为类名),然后在SimpleService件夹下按SimpleService.java类所在包的路径创建对应的文件夹,例如com                         /service,最后将编译后的SimpleService.class拷入com/ service下。

              图 1-3

         3.3SimpleService文件夹下在新建文件夹META-INF,META-INF下新建services.xml(内容同2.4一样) 。

         3.4 最后在Windows命令行下进到services/SimpleService目录下运行:jar cvf SimpleService.aar .(最后有个点号),会在SimpleService目录下生成SimpleService.aar包 (也可安装Axis2的axis2 service archiver插件生成该.aar包)。如果在发布的webService中引用了jar或其它类文件,则需将jar放到*\axis2\WEB-INF\lib中,或是将引用类的.class文件放到*\axis2\WEB-INF\classes中(压缩成.jar放至lib中也可)。

         3.5 把SimpleService.aar拷入tomcat安装目录下的webapps/axis2/WEB-INF/services下,再进入http://localhost:8080/axis2/进入Services就会看到SimpleService了。

 

 

         二、  客户端的调用

         1)、应用rpc的方式调用WebService

                 这种方式就等于远程调用,即通过url定位告诉远程服务器,告知方法名称,参数等,调用远程服务得到结果,调用前先导入相应Axis2的jar包。

 

         //使用RPC方式调用WebService

         RPCServiceClient client =new RPCServiceClient();

         Options options = client.getOptions();

         //访问地址

         String address ="http://ip地址:端口/项目名/services/ws服务名";

         //指定调用WebServiceURL

         EndpointReference epf =new EndpointReference(address);

         options.setTo(epf);

         //指定要调用的方法及WSDL文件的命名空间

         QName qName=new QName("wsdl中命名空间targetNameSpace属性值","方法名");

         /* invokeBlocking方法有三个参数:

         其中第一个参数的类型是QName对象,表示要调用的方法名;

         第二个参数表示要调用的WebService方法的参数值,参数类型为Object[]

         第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]

         当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new

         Object[]{}

         如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,

         该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同

         */

         Object[] result = client.invokeBlocking(qName,new Object[] {”abc” },new Class[] {String.class});

         //接收返回的结果

         String resultStr = result[0].toString();

代码示例 4

         2)、使用wsdl2java生成客户端来调用WebService。

         Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService的代码。wsdl2java.bat命令可以在<Axis2安装目录>/bin目录中找到。在使用                     wsdl2java.bat命令之前需要设置AXIS2_HOME环境变量,该变量值是<Axis2安装目录>。

         在Windows控制台输出如下的命令行来生成调用WebService的代码:

         %AXIS2_HOME%\bin\wsdl2java

         -urihttp://localhost:8080/ws/services/SimpleService?wsdl -p client -s -o stub

代码示例 5

         其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。
         -p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。在执行完上面的命令后,就会发现在当前目录下多了个stub目录,在stub/src/client目录可以找到一个HelloServiceStub.java文件,该文件复杂调用WebService,可以在程序中直接使用这个类(也可安装Axis2的axis2 code generator插件生成stub客户端类)。

代码示例如下:

 

         //创建stub客户端对象

         SimpleServiceStubstub =newSimpleServiceStub();

         //创建调用的方法对象

         SimpleServiceStub.GetPersonJSONArrgetPersonJSONArr =new SimpleServiceStub.GetPersonJSONArr();

         //传递参数

         getPersonJSONArr.setPersonJSONArr("***");

         //使用客户端对象调用方法并获得其返回值

         Stringstr = stub.getPersonJSONArr(getPersonJSONArr).get_return();

代码示例 6

 

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值