Axis2ってWSDLの生成を行なってるんだけど
WSDLに、サービスメソッドの引数名って入ってるよね?
これ、どうやって取ってるのかなーと思って調査開始。
まず、S2Containerの場合。
S2Containerでは、メソッドの引数名の取得って
という順番で行なわれるらしいんだけど、
試しにBeanDesc#getMethodParameterNamesってやってみたら、
なんか取得できなかった。
取得できない理由は、BeanDescImplの400行目
final ParameterAnnotationsAttribute attribute = (ParameterAnnotationsAttribute) methodInfo
.getAttribute(ParameterAnnotationsAttribute.visibleTag);
ここでnullが戻ってきて、それ以上は処理されないから。
原因を追究するのは後回しにして、とにかく、処理されない。
では、Axis2の場合。
org.apache.ws.java2wsdl.bytecode.ClassReaderの中で、
ごりごりクラスファイル読んでますね。
これを使いたい場合は、上位クラスであるParamReaderをnewして使う。
ParamReader reader = new ParamReader(obj.getClass());
String[] paramNames = reader.getParameterNames(method);
これだけで、引数名の一覧が取れました。
もちろん、デバッグ情報が必要とか、
interfaceだけやabstractのメソッドの引数名は取得できないとか
そんな制限は他と変わらず。
勉強になりました。