+1 on Steve's comment.  Does a client need to have access to the actual WSDL at 
run-time?

And on a related note, is there a way for a client to specify a different 
endpoint URI at runtime?  The current API allows you to pass in a URL to a WSDL 
file, but what if I just want to use the WSDL I built off of, but want to point 
all requests at a test server (or just change the port so I can use TCPMon)?  
All of the other major frameworks make this pretty easy.  Maybe it exists in 
CXF but is undocumented?

-Chris

-----Original Message-----
From: Steven E. Harris [mailto:[EMAIL PROTECTED]
Sent: Wed 5/2/2007 4:33 PM
To: cxf-user@incubator.apache.org
Subject: Why does a JAX-WS client use the WSDL at run time?
 
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

Reply via email to