先来一段xfire的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<mapping>
<method name="getDutyPlanByCondition">
<parameter index="0" mappedName="dutyPlanId" />
<parameter index="1" mappedName="organizationId" />
<parameter index="2" mappedName="dutyUserId" />
<parameter index="3" mappedName="tabulateUserId" />
<parameter index="4" mappedName="dictRoadSectionId" />
<parameter index="5" mappedName="assessorUserId" />
<parameter index="6" mappedName="dutyDate" />
<parameter index="7" mappedName="startTime" />
<parameter index="8" mappedName="stopTime" />
<parameter index="9" mappedName="startPoint" />
<parameter index="10" mappedName="stopPoint" />
<parameter index="11" mappedName="xh" />
<parameter index="12" mappedName="tabulateDate" />
<parameter index="13" mappedName="isAudit" />
<parameter index="14" mappedName="auditingDate" />
<parameter index="15" mappedName="isPreAudit" />
<return-type
componentType="com.boco.itms.ws.value.duty.DutyPlanValue" />
</method>
</mapping>
</mappings>
很普通的一个配置文件。
"getDutyPlanByCondition”这个方法总共有16个参数,默认情况下,客户端自动生成的代码中,参数形如:arg0,arg1...arg15,极不容易将每个参数及顺序填写正确,故配置以上文件,将wsdl中的参数赋予有意义的单词。
<parameter index="0" mappedName="dutyPlanId" />
<parameter index="1" mappedName="organizationId" />
......
编写如此的配置实在令人有点不耐烦,想点办法,自动生成?
OK,观察一下有什么规律:
1.<method name="getDutyPlanByCondition"> 方法名,反射呗。
2.<return-type componentType="com.boco.itms.ws.value.duty.DutyPlanValue" />返回值,反射呗。
3.xml文件名,反射呗。
通过反射,这些信息我们都能取到,再组织一下结构,循环一下,生成配置文件,小菜一碟!
但还有个东西别忘了,参数名(不是参数类型)。
public void save(int id , String name){ ... }
以上代码我们通过反射,能取到参数中的int,String,但就是取不到id,name。
别问为什么要取到参数名,总有用的上的时候,例如这篇文章……
先找个包:axis2-kernel-1.4.1.jar(明明是用Xfire,还是得拖个axis下水啊)
直接上代码:
ChainedParamReader paramReader = new ChainedParamReader(clazz);
Method[] methods = clazz.getMethods();
for(int i=0 ; i<methods.length ; i++){
String[] params = paramReader.getParameterNames(methods[i]);
}
OK,已经取到{id , name}了,该干嘛干嘛了