I'm trying to understand a big difference in how a Web Service client works in JAX-WS/CXF versus AXIS2. In AXIS2, the WSDL2Java process reads a WSDL document and creates a lot of code to create, transport, and consume messages as directed by the WSDL. After this WSDL2Java process, the WSDL document is no longer required; it has essentially been compiled into a set of Java operations that obey the WSDL's specifications.
In JAX-WS, the WSDL2Java process also creates code, annotated with details from the motivating WSDL document. I had assumed that these annotations are used at compile time to generate much of the extra code we see generated by the AXIS2 WSDL2Java process. Instead, I find that the generated Service type wants to read a WSDL file in its constructor (following the call chain along to org.apache.cxf.wsdl11.WSDLServiceFactory.create() called on by org.apache.cxf.jaxwsServiceImpl.initializePorts()). Why does the client need to read the WSDL file at run time? Don't the annotations and method signatures provide enough information to lock in the basic operations it must perform? Is there some way to avoid needing to use the WSDL file at run time? -- Steven E. Harris
