WebService开发概述

来源:互联网 发布:js中类的概念 编辑:程序博客网 时间:2024/05/22 12:49
        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

 

 

 

 

 

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 上司交给你不能完成的任务怎么办 电脑光驱里放入光碟放不出来怎么办 黑暗之魂3太难了怎么办 苹果手机下载的游戏闪退怎么办 宝宝两岁了不怎么爱拉大便怎么办? 小狗脖子发硬疼的直叫怎么办 厨房里有很多小虫子围着鸡蛋怎么办 狗生小狗后几天不吃饭怎么办 还没满月的小兔子突然死了怎么办 宝宝小鸡被蚊子咬后肿得很大怎么办 不知道是哪知兔子下的小兔怎么办 兔子生完小兔不吃东西了怎么办 人工喂养七天的小羊拉希怎么办 仔兔出生3天吃过奶就尿怎么办 小兔子买回来两天不拉屎怎么办 大狗生了小狗把小狗咬死了怎么办 狗妈妈一直咬小狗的脐带怎么办 狗狗体内驱虫驱不干净怎么办 打老鼠脚被老鼠咬了怎么办 天正画的cad打开显示空白怎么办 苹果手机信息被拉进群聊怎么办 空调的控制线的报验资料怎么办 窗窗户罩子护栏上的瓦楞板怎么办 酸洗好的带钢容易返锈怎么办 化肥撤到小树苗上现在变黑了怎么办 尿素液烧的太慢了怎么办 天堂鸟肥料施多了黄叶了怎么办 死水塘养的鱼每天在死怎么办 北京的阿姆斯肥把苗都烧死了怎么办 纱窗被老鼠咬了个洞 怎么办 低电量模式下动态墙纸不能用怎么办 吃的包装袋执行标准错了怎么办 退换东西的时候外包装坏了怎么办 闲鱼买家以与描述不符退货怎么办 闲鱼买家申请退款又签收了怎么办 店铺买的手机是拆开过的怎么办 卖家以包装破损拒收快递怎么办 车辆迁出落户信封被自己拆开怎么办 快递签收了发现物品坏了怎么办 快递签收后发现货坏了怎么办 闲鱼退货有破损卖家要求赔偿怎么办