加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

axis2 webservice学习笔记

发布时间:2020-12-17 00:31:05 所属栏目:安全 来源:网络整理
导读:Axis2 创建webservice客户端和服务端 ? 1、环境 Axis2:axis2-1.4.1(下载axis2-1.4.1-bin,并解压到指定路径) Eclipse:Eclipse Java EE IDE for Web Developers. Version:Indigo Release JAVA:jdk1.5.0_07 服务器:tomcat6.0(如果非安装版的不好使,可

Axis2 创建webservice客户端和服务端

?

1、环境

Axis2:axis2-1.4.1(下载axis2-1.4.1-bin,并解压到指定路径)

Eclipse:Eclipse Java EE IDE for Web Developers. Version:Indigo Release

JAVA:jdk1.5.0_07

服务器:tomcat6.0(如果非安装版的不好使,可换成安装版)

?

2、安装eclipse并打开,进入:Window->Preferences->Web Services->Axis2 Preferences做如下设置(设置axis2的路径):

?

3、在eclipse中新建JAVA project(demo工程),并新建类HelloService.java,如下图所示。

?

?

4、编写HelloService.java类(即服务端的类),其中sayHello方法为服务端的方法。代码如下:

package com.sample.services;

?

public class HelloService {

?

?? public static void main(String[] args) {

?????

?? }?

?? public String sayHello(String name){

?????

????? return "Hello:"+name;

?? }

}

?

5、新建webservice,点next


6、新建webservice对话框,需在两红色区域做些设置,第一个选择刚刚建立的HelloService的类,作为需要实现的服务。在第二个红色区域中,设置运行的服务器,webservice运行环境,及建立service工程的名称,这三个点击即都可以做修改。

??



完成以上配置后,选择next即可(后续都默认操作),并在最后一步启动tomcat服务,则tomcat自动完成部署。

7、Eclipse空间中自动生成了webService工程。同时发现对应的src无java类信息,则可以从第一次新建的demo项目中拷贝过来,并修改java类的编译路径,具体设置如下:

?

8、重新编译后,再次部署并重启tomcat服务。

查看服务端地址:http://localhost:8080/webService/,点击Services可查看具体的服务名信息。如正常显示如下图所示,则部署成功。

?

其中HelloService为刚刚部署的服务,对应的客户端请求地址为:

http://localhost:8080/webService/services/HelloService

?

9、编写客户端,代码如下:

package com.sample.services;

?

import javax.xml.namespace.QName;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.client.Options;

import org.apache.axis2.rpc.client.RPCServiceClient;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

?

public class Test

{

?? public static Log log = LogFactory.getLog(Test.class);

??

?? public static void main(String[] args)throws Exception

??? {

??????? //使用RPC方式调用WebService???

??????? RPCServiceClient serviceClient = new RPCServiceClient();

??????? Options options = serviceClient.getOptions();

??????? //查看服务端地址:http://localhost:8080/webService/

??????? //指定调用WebServiceURL

??????? EndpointReference targetEPR = new EndpointReference("http://localhost:8080/webService/services/HelloService");

??????? options.setTo(targetEPR);

??????? //指定方法的参数值

??????? Object[] opAddEntryArgs = new Object[] {"zengms"};

??????? //指定方法返回值的数据类型的Class对象

??????? Class[] classes = new Class[] {String.class};

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

??????? QName opAddEntry = new QName("http://services.sample.com","sayHello");

??????? // 调用方法并输出该方法的返回值?

??????? String str=(String) serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs,classes)[0];

??????? System.out.println(str);

??? }

}

?

执行客户端代码,传入参数:test,后台打印为:Hello:test

调试成功。


如果下发布多个WebService,可以使用<serviceGroup>元素,编写MyServices.java类(即服务端的类),其中sayHello方法为服务端的方法。代码如下:

package?com.sample.services;

?

public?class?MyServices{

?

???static?void?main(String[] args) {

?????

?? }?

???public?String sayHello(String name){

?????

??????return?"MyServices:"+name;

?? }

}

?在services.xml文件中做如下配置即可:

<serviceGroup>
	<service name="SttServices">
		<Description>
			SttServices
		</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" locked="false">com.stt.inter.services.SttServices
		</parameter>
	</service>

	<service name="MyServices">
		<Description>
			MyServices
		</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" locked="false">com.stt.inter.services.MyServices
		</parameter>
	</service>
</serviceGroup>

注意:当前使用的环境及版本,不需要使用 axis2-1.4.1-war.zip 及相关插件。

?附录:

经测试1.5.31.6.0版本中都会出现类AxisAdminServlet无法找到,主要的原因是这两个版本中的jar包中都不存在AxisAdminServlet类,这样导致service服务无法启动以及不能进入service的管理控制台。对这种情况可以通过以下方式解决:

找到当前版本对应的war包,如:axis2-1.6.0-war.zip并解压到指定目录,打开解压后的axis2.aar包,在WEB-INF/classes目录下有需要的类AxisAdminServlet,则可以将classes目录下所有的class文件打成jar包,重新放到工程目录中即可。

同时做如下更改(都是根据后台日志报错做的修改):

1、修改web.xml中AxisAdminServlet的<servlet-class>项为:org.apache.axis2.webapp.AxisAdminServlet
2、修改axis2.xml文件中transportReceiver节点的class熟悉配置修改为org.apache.axis2.transport.http.AxisServletListener,

?

另把环境换成WebLogic Server Version: 10.3.0.0 +axis2-1.6.0+jdk1.5+Eclipse?Indigo Release,按照如上步骤再次操作,先在tomcat中部署测试后将生成的webservice服务端应用部署至weblogic域下可正常启动并调用正常。但是有weblogic9版本会有好多jar包有冲突问题。


jar包命令:

进入dos操作符窗口

cd进入要打成jar包的class文件所有文件夹目录

jar cvf[生成jar的名称.jar] [列出class文件]

?

如:jar cvf ?名称.jar ./文件夹????????????——表示将当前文件夹下的classjar

?

jar cvfibstool.jar com/cn/ibs/TurnD.class com/cn/ibs/TurnB.class

二、把一个文件夹下面的所有class文件打成jar

jar cvfibstool.jar * 回车

?

服务端打aar包命令:

用java cvf hello.aar和axis插件都可以。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读