Axis2分析(WSDL文件生成功能)

来源:互联网 发布:网络犯罪案件 编辑:程序博客网 时间:2024/05/01 13:27

 

Axis2分析(WSDL文件生成功能)
--report by WFK
关于Axis2
Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2由7个独立的模块组成:
信息模型:此模块管理 SOAP 引擎的状态。
XML 处理模型:Axis2 引入了一个名为 AXIOM 的新模型,用于处理 SOAP 消息。
SOAP 处理模型:Axis2 体系结构定义了两个管道(或流),分别称为 InPipe (InFlow) 和 OutPipe (OutFlow),用于处理服务器端的请求消息和响应消息。
部署模块:此模块配置 Axis 引擎并部署服务和模块。
WSDL 和代码生成:此模块从 WSDL 文件中生成客户端存根和服务器框架代码。
客户端 APIAxis2 客户端 API 调用遵循 WSDL 2.0 定义的 In-Only 和 In-Out 消息模式的操作。
传输:此模块包含与传输层交互的处理程序。
 
 
Axis2WSDL文件生成功能
由上面的介绍可以看出,WSDL文件的生成功能只是Axis2的功能之一,并且此功能模块具有相对独立性,现在就简要的分析一下此模块:
 
命令行参数的含义:
*         Usage java2wsdl
-cn <fully qualified class name> : class file name
-o <output Location> : output file location
-cp <class path uri> : list of classpath entries - (urls)
-tn <target namespace> : target namespace
-tp <target namespace prefix> : target namespace prefix
-stn <schema target namespace> : target namespace for schema
-stp <schema target namespace prefix> : target namespace prefix for schema
-sn <service name> : service name
-of <output file name> : output file name for the WSDL
-st <binding style> : style for the WSDL
-u <binding use> : use for the WSDL
-l <soap address> : address of the port for the WSDL
*         解释:
-cn 输入Class名,包含Package的定义。
       -cp 输入Class路径名,准确说是Class所在package的路径。
       -o 输出路径名,即生成的wsdl文件所在的路径;不指定则为用户的主目录。
       -of 输出文件名(不含wsdl后缀),没有定义,则以类名命名。
       -tn 设置targetNamespace
 
Axis配置:
 
*         以下是WSDL命名空间的配置:
 
 
Java2WSDLConstants接口数据项与生成的WSDL文件命名空间的对应关系。
 
 
 
解释:在Java2WSDLConstants接口参数与WSDL文件的对应关系:
DEFAULT_TARGET_NAMESPACE     对应       targetNamespace
WSDL_NAMESPACE    对应       xmlns:wsdl
URI_WSDL12_SOAP    对应       xmlns:soap12
HTTP_NAMESPACE     对应       xmlns:http
       。。。。。 以上是各命名空间定义的设置,不再一一解释。
      
       注:在上图中Java2WSDLConstants的参数并非全是命名空间。比如DEFAULT_LOCATION_URL即为Service的访问地址。
 
*         以下是元素名、属性值的配置:
各参数的解释:不再一一解释,这里只是说明命名的规律:
l         以”LOCAL_NAME”为结尾的参数用来约束XML文档的元素名,而前面字母代表具体含义。例如:String IN_PUT_LOCAL_NAME = "input";则生成的文档WSDL文档为(prot中的input定义项):
 
l         以:”_SUFFIX”为结尾的参数,用来定义数据项名称,表示一个元素应该以此为结尾。例如String MESSAGE_SUFFIX = "Message";则对于toString方法,则有:
其实从这里可以看出Axis2不支持重载函数的原因。
l         以” _PREFIX”结尾的参数,用来描述数据值,参照上面的解释,这个应该是放在前面。
l         其余的各个参数,其值均可在WSDL文档中找到,而有些只是默认值,即如果在命令行中有设置,则此参数无效。此类参数多数以” DEFAULT_”为开始命名。
 
配置小结:
可以根据Java2WSDLConstants接口参数来配置WSDL文档的命名空间、元素名、数据项名称等;并且很多功能都可以通过命令行参数来设置。但是这里面没有我们所期待功能:对方法进行有选择性的描述。
 
 
Axis2“选择性接口描述”实现方案
源码分析:
*         代码位于_java2wsdl文件夹内,代码结构比较清晰。
l         首先,用Java2WSDLCommandLineOptionParser类来解析命令行参数,生成一个由参数名(String)和参数内容列表(List)构成的Map。
ü         用isInvalid方法(Java2WSDLOptionsValidator类)来检测参数的合法性。返回不合法的参数列表。
ü         在Java2WSDLCodegenEngine内分析参数,并根据类路径参数生成ClassLoader,根据输出路径生成文件的输出句柄。用类名、CalssLoader、输出句柄实例化Java2WSDLBuilder类,并将各个参数传入。
ü         Java2WSDLBuilder类调用generateWSDL方法。
ü         生成SchemaGenerator类,主要用于处理各种参数,并生成WSDL相关参数。
ü         SchemaGenerator类的generateSchema方法里,通过反射机制得到被解析类的方法数组。并在这里进行解析、过滤,去除非public方法,如果有重复的方法名(overload),则程序报错。
l         将经过SchemaGenerator类处理后的数据取出,初始化Java2OMBuilder类,并由其生成WSDL文档。
l         文件关闭处理,主程序返回,结束。
 
实现方案
l         通过源码分析可知,我们只需要将我们所需要的方法名以一定的方式传入程序,在程序内对方法集过滤,如此我们便可得到所需要的方法集。
l         假设,我们是用命令行传参数的方法实现我们所需的功能。那么,在源码分析中用勾来标注的地方就是需要我们进行修改。
l         重点是修改红色标注部分。
 
 
设计实现
实现了上述方案,在命令行参数里加入了一个新选项(-ml <method-name list to show> : methods you want to show in the WSDL file);如果你只想让某两个方法(例如,toString 和 foo 方法),你只需要加入命令行描述(-ml toString foo)即可。
在所有改动的地方,均标注://ADD BY WFK
 
 
问题
没有改动的版本存在一定的问题。例如:WSDL文件的portTypebinding元素里面,并没有去掉非public方法,而是将其一同描述;而其指向的message元素并不存在。(这应该是不正确的,但是本人对WSDL了解不深刻,并不敢断言)。 
在改动后,非public方法在WSDL任何地方都消失的无影无踪。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq登陆需要密保手机验证怎么办 微信漂流瓶被投诉收不到回复怎么办 电视的屏幕出现三条黑线怎么办 付了定金的房子不想要了怎么办 顾客刚买了东西就退怎么办 飞机票买了但是没有报团怎么办 日本寄东西回来深圳海关扣了怎么办 xp框架安装模块后无限重启怎么办 手机百度云下载的文件不见了怎么办 百度云手机号换了文件不见了怎么办 好劵app提现密码忘了要怎么办 微信上买的衣服不给退货怎么办 在微信上买的衣服不给退货怎么办 贴贴纸的地方出现色差了怎么办 贴在玻璃上的贴纸撕掉后有胶怎么办 魅族手机部分时间上划失效怎么办 别人电脑上c盘文件无权访问怎么办 网络已连接但上不了网怎么办 asp复选框选中的有重复值怎么办 邮件在邮递中出现损坏怎么办呢? 爱彩彩票资金密码忘记了怎么办 注册彩票网站忘了资金密码怎么办 电车电瓶加水后电压变低怎么办 电动车电瓶四块电池坏了一块怎么办 把小孩的玩具修坏了怎么办 电动车插头太紧了插不到底怎么办 宜家沙发不能更换布套怎么办 苹果官网买的无线充坏了怎么办 苹果官网上买的耳机坏了怎么办 led灯开关关掉了闪烁是怎么办 我朋友借的网贷光给我打电话怎么办 电脑上的文件变成了图片查看怎么办 外卖店打印机纸卡住打不开了怎么办 微信撤回图片留下一堆代码怎么办 拼多多砍价免费拿砍不到0元怎么办 一岁三个月宝宝老足拉肚子怎么办丶 想打好关系送礼发红包不敢收怎么办 我在相亲市场太受欢迎了怎么办小说 有人报警说我诈骗警察说立案怎么办 微信账号长时间未登录不想要怎么办 手机号注销了百度云登录不了怎么办