在@WebService发布成wsdl时候, 方法的参数名称被自动的映射成arg0, arg1, 解决方法如下:
[code]public User create(
@WebParam(name = "user")
User user);[/code]
在wsimport自动生成的代码中也是这个样子. 这个馊主意丑陋无比. 如果参数多了,代码会惨不忍睹,而且这个工作会很无聊.
这个问题的主要原因还是java, 参数名称在编译后被抹掉了. 这个问题据说要在Java7才能解决.
几个solution:
1. 用插件来干这无聊的活,有人写吗? 但是写好后的代码依然惨不忍睹.
2. 用-g编译, 调试方式编译会包含很多其它信息. ParaNamer的BytecodeReadingParanamer是干这个事情用的.
3. 用[url=http://paranamer.codehaus.org/]ParaNamer[/ur]来编译你的代码. 它会在meta-inf下面加上点描述, 用它的api可以拿到参数名字. 这个对@WebParam没用.
4. 利用字节码工程和source, 直接对生成的代码加上@WebParam标记, 或者用debug的方法加上名字. 貌似还没人这个玩.
参数名称的重要性:
除了jaxb之外, ooweb现在的解决方法很无奈, 一些自动化验证框架如果有了参数名称,会正确的给出提示信息.
参考链接:
http://paulhammant.com/blog/at-least-one-unilateral-improvement-to-java.html
http://bugs.sun.com/view_bug.do?bug_id=6444738
http://paranamer.codehaus.org/
[code]public User create(
@WebParam(name = "user")
User user);[/code]
在wsimport自动生成的代码中也是这个样子. 这个馊主意丑陋无比. 如果参数多了,代码会惨不忍睹,而且这个工作会很无聊.
这个问题的主要原因还是java, 参数名称在编译后被抹掉了. 这个问题据说要在Java7才能解决.
几个solution:
1. 用插件来干这无聊的活,有人写吗? 但是写好后的代码依然惨不忍睹.
2. 用-g编译, 调试方式编译会包含很多其它信息. ParaNamer的BytecodeReadingParanamer是干这个事情用的.
3. 用[url=http://paranamer.codehaus.org/]ParaNamer[/ur]来编译你的代码. 它会在meta-inf下面加上点描述, 用它的api可以拿到参数名字. 这个对@WebParam没用.
4. 利用字节码工程和source, 直接对生成的代码加上@WebParam标记, 或者用debug的方法加上名字. 貌似还没人这个玩.
参数名称的重要性:
除了jaxb之外, ooweb现在的解决方法很无奈, 一些自动化验证框架如果有了参数名称,会正确的给出提示信息.
参考链接:
http://paulhammant.com/blog/at-least-one-unilateral-improvement-to-java.html
http://bugs.sun.com/view_bug.do?bug_id=6444738
http://paranamer.codehaus.org/