文档章节

Axis1.4生成客户端

侠盗
 侠盗
发布于 2014/10/24 15:19
字数 1134
阅读 209
收藏 0

        最近接触了一个WSDL接口,还有一份写的比较烂的接口说明,其他信息就没有了,不清楚这个接口服务端的生成工具,因此最初在Axis2下尝试,用了1天多的时间,期间得到了返回的soapBody报文,但是迫于返回值是自定义的复杂类型,其中包含了Array数组,因此被迫放弃了Axis2,接着又尝试过cxf和xfire均以失败告终。

       最初在用Axis2的RPC、Document进行调用,然后尝试了Stub生成客户端的方式,但是,在cmd下输入命令:

wsdl2java -uri http://ip/xxx/services/searchSubForSP?wsdl -p -o stub

       然后报错:

log4j:WARN No appenders could be found for logger (org.apache.axis2.description.
WSDL11ToAllAxisServicesBuilder).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.
RuntimeException: java.lang.reflect.InvocationTargetException
   at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:293)
   at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
   at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
   at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:53)
   at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGeneationEngine.java:246)
   ... 2 more
Caused by: java.lang.reflect.InvocationTargetException
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:50)
   ... 3 more
Caused by: org.apache.axis2.schema.SchemaCompilationException: can not find type{http://
schemas.xmlsoap.org/soap/encoding/}Array from the parent schema http://xxxx.xxxx
   at org.apache.axis2.schema.SchemaCompiler.copyMetaInfoHierarchy(SchemaCompiler.java:1371)
   at org.apache.axis2.schema.SchemaCompiler.processComplexContent(SchemaCompiler.java:1333)
   at org.apache.axis2.schema.SchemaCompiler.processContentModel(SchemaCompiler.java:1228)
   at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1172)
   at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1092)
   at org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.java:1006)
   at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:841)
   at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:604)
   at org.apache.axis2.schema.SchemaCompiler.process(SchemaCompiler.java:2069)
   at org.apache.axis2.schema.SchemaCompiler.processParticle(SchemaCompiler.java:1952)
   at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1156)
   at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1092)
   at org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.java:1006)
   at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:841)
   at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:604)
   at org.apache.axis2.schema.SchemaCompiler.process(SchemaCompiler.java:2069)
   at org.apache.axis2.schema.SchemaCompiler.processParticle(SchemaCompiler.java:1952)
   at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1156)
   at org.apache.axis2.schema.SchemaCompiler.processAnonymousComplexSchemaType(SchemaCompiler.java:1055)
   at org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.java:1009)
   at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:645)
   at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:615)
   at org.apache.axis2.schema.SchemaCompiler.compile(SchemaCompiler.java:423)
   at org.apache.axis2.schema.SchemaCompiler.compile(SchemaCompiler.java:292)
   at org.apache.axis2.schema.ExtensionUtility.invoke(ExtensionUtility.java:102)
   ... 8 more

       其中错误点

can not find type{http://schemas.xmlsoap.org/soap/encoding/}Array from the parent schema

       进行分析,接着尝试了Eclispe下Axis2的插件生成java,同样失败,在soapUI下生成也失败,因此想尝试Axis1,但是发现Apache的Axis的官网下载链接全部瘫痪,因此偷了个懒,放弃了Axis去尝试cxf的wsdl2java,出乎我意料的是,cxf提示我不支持rpc/encoded,继续谷歌,有人也遇到这个提示,说是通过xfire解决,因此寻找xfire安装包,发现这是一个已经好久不再维护的项目了,还好下载到了xfire的Eclispe插件,但是也失败告终。

      现在,走投无路,决定返回原点,继续研究Axis2,仍然卡在上面的错误上,因此各种求助于谷歌、百度、Bing,终于,发现这么一篇帖子,看到2、3楼的回复,我决定投奔Axis1.4。

http://www.liferay.com/widget/community/forums/-/message_boards/message/8896224

      绕了一大圈又回来了,该躲避的还是没躲过,经过仔细观察Apche Axis官网,发现了一个能用的链接,下载到了Axis1.4。

http://mirrors.hust.edu.cn/apache/axis/axis/java/1.4/

      好了现在进入本文正题,讲讲关于Axis1.4生成客户端的过程。

------------------------------------------------分割线---------------------------------------------------------

1.  将下载的Axis1.4安装包axis-bin-1_4.zip解压

2. 在Eclispe中新建一个Java Project,然后导入第一步中解压出来的Axis1.4的所有jar包到新项目里。

3. 右键项目/Run As/Run Configurations..

4. 在Main标签下选择第2步新建的Project,输入或选择Main class为: org.apache.axis.wsdl.WSDL2Java

5. 在Arguments标签下的Program arguments:下输入:

-o Client -d Session -Strue http://ip/xxx/services/searchSubForSP?wsdl
其中:http://ip/xxx/services/searchSubForSP?wsdl为wsdl文件地址,可以是本地文件

6. 点Run运行,这时会报如下错误:

Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart)

    经过排查,是因为缺少mail.jar和activation.jar两个Jar包,网上下载这个两个Jar,导入项目,然后Run成功。

7. 这时候项目下会生成一个名为Client的文件夹,里面都是生成好的客户端类。

8. 通过这些类编写调用过程,其中有个以Locator结尾的类,通过实例化这个类就能直接调用接口的方法。

   至此,所有的问题在最后的不到10分钟全部解决,因此可以肯定这个wsdl的服务端代码是用Axis1生成的,这个过程好曲折。。。


   结尾,一些参考的文章:

1. http://blog.csdn.net/zhengqiqiqinqin/article/details/19341487

2. http://www.liferay.com/widget/community/forums/-/message_boards/message/8896224

3. http://desert3.iteye.com/blog/1464196


© 著作权归作者所有

侠盗
粉丝 3
博文 3
码字总数 3085
作品 0
技术主管
私信 提问
使用axis1.4的jar包生成客户端代码命令

一、下载axis1.4的所有jar包 官方下载地址:http://axis.apache.org/axis/java/releases.html 网盘下载地址:http://yunpan.cn/Qeq7QNGqt5zqw 二、下载后将axis1.4中的lib文件夹中所有jar包加...

冰玉翔龙
2013/06/13
0
0
axis1.4 根据wsdl生成 客户端

//使用wsdl文件生成客户端 E:decodeSourceaxis-1_4>java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -p "com.venustech.service" -u "demo.wsdl" //使用url生成客户端 //生成服务端......

skyline520
2012/11/05
0
0
axis1 axis2 使用总结

-----------------------------------------axis1.4------------------------------------------------- 1. 生成java对象 1.1 设置环境变量 AXISHOME=D:OpenSourceaxisaxis-14AXISLIB=%AXISH......

rain
2012/09/18
0
0
java.lang.ClassCastException: Ljava.lang.Object; cannot be cast to [Lobject.SimpleObject;

我要做的是webService中返回数组 但是 我在运行 axis1.4 client中报错 说object转换不了 自定义对象 出现错误是说 AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server...

vitou
2012/08/14
5.6K
7
webservice 大写wsdl与小写wsdl

工作需要,调用方必须调用?WSDL,但是我们发布的webservice是不支持的,后来经过上网查资料终于找到原因,axis2 不支持大写wsdl,而axis1.4 是支持的。后来用axis1.4重新发布webservice,在浏...

fighting_zh
2013/06/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7 新手阿里云服务器安装mongodb

简介 MongoDB 是一个基于分布式 文件存储的NoSQL数据库 由C++语言编写,运行稳定,性能高 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案 MongoDB特点 模式自由 :可以把不同结构的文档存...

醉雨
24分钟前
1
0
sql注入漏洞,应屏蔽SQL注入攻击

注:SQL注入好比是前端URL传参数请求时参数以SQL 做为参数传入,如 select 1 from dual where 1=1 or 1=1 and 1=2;(类似这样的SQL语句) 防御方法 如果自己编写防注代码,一般是先定义一个函...

颜丽
25分钟前
2
0
装饰者模式

 代理模式与装饰者模式看起来很像,都实现基础对象实现的接口,在其自身对象中都保存着对被代理/被装饰者的对象引用。   先来看看装饰者模式的定义:动态的将责任附加到被装饰者对象上,用...

铁骨铮铮
29分钟前
0
0
我为什么飞行 10000 公里去西班牙参加 KubeCon?

2019 年 5 月 20 日至 23 日, 由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 KubeCon + CloudNativeCon EU(欧洲场)即将在热情洋溢的巴塞罗那盛装启幕。 作为云计算领...

zhaowei121
47分钟前
1
0
Node.getTextContent() not found 解决办法【不需要调整builder path下面包顺序】

新导入的工程,w3c的getTextContent找不到,response的setCharacterEncoding找不到,网上很多教程都是“调整工程builder path的lib包顺序把jre、tomcat调到上面即可”,但是进入项目的build...

嘿嘿嘿IT
54分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部