cxf简单的helloworld的问题

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface HelloWorld {
String sayHi(@WebParam(name="text") String text);
}

这样在客户端,
String response = client.sayHi("Joe");
System.out.println("Response: " + response);
返回结果是 Response: Hello Joe。

但是如果把接口类里面的
(@WebParam(name="text") 去掉,变成

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface HelloWorld {
String sayHi( String text);

}

结果返回就是Response: Hello null。

这是为什么,我看了其他人写的接口类,不是每个都要加类似与(@WebParam(name="text") 的东西吧。

这是因为java在编译的时候,缺省会把String sayHi( String text); 中的参数名去掉并用arg0替代,这样通过reflection读到的参数名就不是test了。
如果你把WebParam annotation 去掉,CXF就无法定位到正确的参数名了。

如果你不想写WebParam的话,你可以在调用javac的时候是用-g 选项,这样javac就不会把参数名替换掉了。