使用AXIS2开发Webservice成功输出版本信息——小白入门

    xiaoxiao2025-03-05  9

    使用AXIS2开发Webservice成功输出版本信息——小白入门

    百度百科上定义AXIS2是新一代SOAP引擎。作为小白,就要循序渐进的学,就必须要知道什么是SOAP。

    SOAP全称Simple Object Access Protocol,简单对象访问协议,就是说:是一种协议。

    那么问题又来了,什么是webservice呢?Webservice个人的理解,就是为了将代码解耦,并且层次更分明,其实吧,和最基本的MVC也是一个目的,就是一个模块就干一个事,并且使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,就可以相互交换数据。

    言归正传,既然是小白,那么就像学语言第一课一定自己跟着教程尝试的——Hello World程序一样,使用AXIS2开发WebService,那么一定也是要从”Hello World”开始的。

    那么就开始webservice的Hello World吧,Windows下的安装一搜就有,HelloWorld也有,但是自己按照各种教程东拼西凑,写了个只有一个返回值函数的service端,然后又按照网上的教程使用了RPCServiceClient这种方式调用,可是各种报错,连找不到主方法的错都报出来,好崩溃,然后就只有找“老司机”帮忙了。“老司机”说,AXIS2有自带的service——Version,可以用Client端去请求获取一下,如果能获取到,那就是我网上抄来的service端有问题,如果不能,那就说明,Client端程序或者配置有问题。

    结果果然印证了,是Client端配置的问题。所以连AXIS2自带的Version服务都获取不到。

    以下为客户端代码块

    //使用RPC方式调用Webservice RPCServiceClient serviceClient = new RPCServiceClient(); //指定调用Webservice的URL EndpointReference targetEPR = new EndpointReference(url); Options options = serviceClient.getOptions(); //确定目标服务地址 options.setTo(targetEPR); //确定调用方法 options.setAction("urn:VersionException"); //命名空间 QName qName = new QName("http://axisversion.sample", "getVersion"); Object[] parameters = new Object[]{}; OMElement element = serviceClient.invokeBlocking(qName, parameters); String result = element.getFirstElement().getText(); 然而代码不是出错的地方,**重点来了**居然一直出问题的是*services.xml*这个配置文件。 网上各种教程里面Client的处理方式都不同,连开发使用的应用程序也不一样,有用MyEclipse的,也有用Eclipse的,还有用IDEA的(官网上的支持包有Eclipse和IDEA两个版本的),我用的就是Eclipse,其实按照网上的教程操作无论是哪一种开发软件,应该都是可以帮助自动生成的。和搞webservice开发的同事交流之后被告知,不要用那什么坑爹的自动生成了,**自己写最靠谱!!!**嗯,然后发现问题原来出在services.xml里面对应的参数没有写对,换言之,配置没配对。 services.xml放在客户端程序的WebContent下的META-INF中。services.xml中的代码示例如下。

    以下为services.xml

    <service name="Version"> <description> This service is axis2 version test </description> <parameter name="ServiceClass">com.axis2.test.TestClient</parameter> <operation name="getVersion"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> </service>

    services.xml中各字段含义

    <parameter name>里面是client程序包含完整包名的class类<operation name=”“>里面的参数是service里面的方法名
    转载请注明原文地址: https://ju.6miu.com/read-1296900.html
    最新回复(0)