...
The problem has to do with a quirk of Java reflection. If a program uses Java reflection to examine a function in concrete method of a class, the Java Language Specification requires the system to provide the parameter names from the source. However, if a program uses reflection to look at an interface abstract method, the specification does not require parameter names. In practical terms, the usual Java compilers preserve interface parameter names only when compiling with debug information.
This leads to the following trap: If you turn debug information on and off when compiling the SEI, you will change the WSDL model. Incompatibly. If the server and client disagree on the compilation options, they can fail to ugly parameters named arg0
, arg1
, ... Further, if you forget to specify the SEI when creating a service, and only provide the SEB, Simple will see your concrete methods and assign actual parameter names. If you client uses the SEI, they won't communicate.
Thus, while JAX-WS @WebParam
annotations may seem noisy and inconvenient, they are, in fact, ensuring that your service has a consistent contract.
If you choose to use the Simple front end, you will need to use parameter
elements in a .aegis.xml
file to specify the parameter names or be sure to provide the SEI to the ServerFactoryBean
.
Simple and Data Bindings
...