`
equals
  • 浏览: 11505 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

webservice客户端调用(Axis2)

阅读更多
最近涉及到一个功能需要调用其他公司开发的Webservice接口,初出茅庐,也是第一次接触,记下自己的心路历程。通了的时候真是感动尿了~
1.第一次接触Webservice。查了下java可以使用哪些方法进行调用,大致分为了3种(有人说4种),众说纷纭,反正也是各种都有,眼花缭乱。
2.其实提供接口的公司已经做好了wsdl文件,我就选了种将wsdl文件转成本地类,然后调用本地类的方式。
对于第一次使用来说,我觉得这种方式还是挺好的。第一,方便,第二,简单
但是,过程中也出现了诸多问题,我会一一列上,给大家做参考。

(1)首先将接口转成本地类
需要去apache的官网下载最新的axis2,地址:http://axis.apache.org/axis2/java/core/download.cgi
下载下来解压,在bin路径下会有个转换的bat文件:wsdl2java.bat,同样也有Linux环境下的wsdl2java.sh。然后在bin路径下打开cmd(在bin文件夹下可以使用shift+鼠标右键,然后选择在此处打开命令窗口),linux的自己用终端,就不一一说了。

如上图,执行wsdl2java.bat带上
-uri(param1替换为调用的webservice接口地址,注意接口地址带有?的在Linux下需要换成".",不然无法识别)
-o (生成的java文件本机位置)
还有其他参数详见:http://rabby.iteye.com/blog/814892
(利用参数生成的单元测试没什么意义)
生成的文件,如下所示:

我们需要的其实就只有下方stu结尾的java文件,将文件包括包整个考入工程下,(如果只使用文件,而更改包路径可能出现命名空间问题,我没去试过,到底会不会我也不清楚,知道的可以给我留言)

(2)本地类调用
新建java测试类对接口调用进行测试

	public void query() {
		CertQueryImplServiceStub caquery = null;
		try {
			//1.new生成的本地类对象
			caquery = new CertQueryImplServiceStub();
			
			//2.这涉及到出现的一个问题,下面会说
			caquery._getServiceClient().getOptions().
				setProperty(org.apache.axis2.Constants.Configuration.DISABLE_SOAP_ACTION, true);
			//3.new内部类的参数集合
			CertQueryImplServiceStub.QueryCertByNameAndMultiNumber
			 	query = new CertQueryImplServiceStub.QueryCertByNameAndMultiNumber();
			//设置参数
			query.setUserName("1");
			query.setPassWord("2");
			query.setOrganizationName("3");
			query.setUserNumber("4");
			//发请求需要的类
			CertQueryImplServiceStub.QueryCertByNameAndMultiNumberE
		 	queryE = new CertQueryImplServiceStub.QueryCertByNameAndMultiNumberE();
			//设置请求参数
			queryE.setQueryCertByNameAndMultiNumber(query);
			//发送请求,获取请求结果
			CertQueryImplServiceStub.QueryCertByNameAndMultiNumberResponseE
			resE = caquery.queryCertByNameAndMultiNumber(queryE);
			//将结果请求提取出来
			CertQueryImplServiceStub.QueryCertByNameAndMultiNumberResponse 
			res = resE.getQueryCertByNameAndMultiNumberResponse();
			//取出我们需要的结果集
			CertQueryImplServiceStub.CertQueryResult
			result = res.get_return();
			//打印结果集中任意一值,看看是否正确
			System.out.println(result.getErrMsg());
		} catch (AxisFault e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}


对方提供的接口以及参数和结果都比较多,有些代码需要根据情况而定,大体复杂的也就这样了,如果只是sayHello的话就简单多了。。。

(3)遇到的问题

第一个就是jar包问题,需要的jar包基本上都在下载的axis2/lib下能找到,没有的就百度下载一个,然后注意neethi这个jar包在很多项目里已经用到了,所以不用导入,我测试的时候还是导入了,但是发现方法not match,然后发现自己的工程下有这么个jar包,但是呢,版本较低,所以只能删了低版本的,然后通过!

第二个问题就是出现了
org.apache.axis2.AxisFault: The given SOAPAction这样的报错,对于第一次使用的我来说真是莫名其妙啊,好在百度强大,查了很多,终于查出来了,有人说是需要改动服务端,具体就不清楚了,对方只提供了接口,所以我只能改自己的,然后翻到需要在代码中添加如下所示的代码:
caquery._getServiceClient().getOptions().
				setProperty(org.apache.axis2.Constants.Configuration.DISABLE_SOAP_ACTION, true);
,我不知道为什么,反正我的能用了,以后再去深究。
还有其他一些有点白痴的问题就不列上来了,羞~

(4)其实代码上还有些许不足,没有超时判断之类的,以后再改进吧!
  • 大小: 15.3 KB
  • 大小: 118.5 KB
分享到:
评论

相关推荐

    axis2客户端调用axis1服务接口

    axis2客户端调用axis1服务接口 调用方式 使用RPC方式调用WebService,为了防止冲突可以增加 // 与weblogic的lib冲突配置 System.setProperty("javax.xml.stream.XMLInputFactory", ...

    axis2发布webservice和调用axis2服务接口

    本文将详细讲解如何使用Axis2来发布Web服务以及如何生成客户端代码来调用这些服务。 首先,让我们了解发布Web服务的过程: 1. **创建WebService**:在Axis2中,可以通过编写一个简单的Java类并暴露其方法作为Web...

    java客户端调用webservice所调用的axis1.4包和方法调用

    本方法是用axis1.4技术,实现java客户端调用webservice。已经可实现过可行的,如果不行可加我QQ号302633进行详细解析。

    AXIS2作为客户端调用webService的demo

    用AXIS2作为客户端调用webService的demo:本人亲测可用,eclipse工程java项目包含完整代码和完整jar包, 只要用eclipse导入项目即可,运行控制台显示success或者false字符串,说明OK。

    webservice-axis2客户端调用(多参).txt

    之前webservice客户端调用,使用RPC客戶端接口调用方法,但发现此种调用方式针对携参方式并不适用。最后经过多种方式测试选择了OMFactory......调用。经测试好用

    axis2客户端调用webService接口,精简jar包

    本文将深入探讨如何使用Axis2客户端调用WebService接口,并且会特别关注如何精简所需的jar包。 首先,了解Axis2客户端的基本概念是至关重要的。Axis2客户端是用于与远程Web服务交互的工具,它允许开发者通过SOAP...

    axis客户端调用webservice

    java axis客户端调用webservice,可应用于ofbiz框架。 解决网络上共享代码两次调用后会出现timeout的BUG

    基于axis2实现的webservice简单实现(客户端+服务端)。

    总的来说,这个压缩包提供了一个完整的基于Axis2的Web服务实现示例,包括服务端创建服务和客户端调用服务的所有必要组件。通过学习和理解这些文件,开发者可以更好地掌握如何在实际项目中利用Apache Axis2构建和使用...

    Axis2教程和java调用webservice的各种方法总结

    - **Axis2客户端**:Axis2不仅用于服务端,还有客户端库,可以方便地从Java应用中调用Web服务。 - **Web服务的生命周期管理**:包括服务的创建、部署、测试和调试,这些过程在Axis2中都有详细的指南和支持。 - **...

    WebService:Axis客户端调用需要身份验证的CXF服务

    要深入学习这个主题,可以参考博客“WebService:Axis客户端调用需要身份验证的CXF服务”。这个博客很可能详细解释了如何在实际代码中实现上述步骤,包括如何配置Axis客户端、如何处理认证头以及如何与CXF服务进行...

    基于Axis的Web Service客户端调用

    下载并安装Apache Axis,然后使用-axis2/bin目录下的wsdl2java工具,将WSDL文件转换为Java客户端代码。命令格式如下: ``` wsdl2java -uri http://example.com/weather/WeatherWebService?wsdl ``` 这将生成一系列...

    Axis2生成webservice客户端通用依赖包

    总的来说,"Axis2生成webservice客户端通用依赖包"是一个方便开发者快速搭建和使用Web服务客户端的解决方案,它集成了必要的库,简化了项目集成过程,提高了开发效率。在实际开发中,理解和掌握这一方法将极大地提升...

    soapui生成webservice客户端代码

    soapui生成webservice客户端代码,比较详细的讲解了配置,以及生成客户端代码的步骤

    WebService客户端调用服务器数据库

    【WebService客户端调用服务器数据库】是一个关键的IT技术主题,主要涉及如何通过Web服务接口与远程服务器数据库进行交互。在互联网应用中,这种技术经常用于实现不同系统间的数据共享和功能整合。以下是对这一主题...

    在自己的项目中利用axis2+spring发布webservice与客户端调用包括session

    标题中的“在自己的项目中利用axis2+spring发布webservice与客户端调用包括session”指出的是一个关于在实际项目开发中如何使用Axis2和Spring框架来发布Web服务,并且涉及了Web服务客户端调用以及会话(session)...

    webservice 客户端自动生成工具

    WebService客户端是调用这些服务的应用程序部分,而"WebService客户端自动生成工具"则是帮助开发者快速创建与WebService交互的代码的工具。在这种情况下,我们讨论的是一个使用Axis1.4批处理脚本来实现这个功能的...

    WebService Axis客户端调用接口需要用到的jar包

    在使用Axis作为客户端调用Web服务接口时,需要依赖一系列的jar包来支持通信和处理数据。以下是对这些关键jar包及其作用的详细解释: 1. **axis.jar**:这是Axis的核心库,包含了用于构建和运行Web服务的主要类和...

    使用axis2创建webservice步骤以及客户端调用service服务代码

    使用axis2创建webservice步骤以及客户端调用service服务代码,如何编写和发布WebService,如何使用services.xml配置文件发布,如何用Java实现调用WebService的客户端程序等等

Global site tag (gtag.js) - Google Analytics