Building a web service client using Dynamic proxy

Hi everyone!

I'm trying to build a web service client using the notion of the "dynamic
proxy" as described in the JAX-RPC documentation
(http://java.sun.com/webservices/docs/1.0/tutorial/doc/JAXRPC5.html). That
is, trying to use the WSDL decription of a service knowing _nothing_ more
but that. Supposedly, I'm a service requestor and have just discovered a
service (no matter how) and want to bind to it.

The problem is that the sample code given both in the JAX-RPC docs and in
samples\jaxrpc\ or samples\stock in the Axis distribution uses the wsdl
document but also presumes that _somehow_ I know the input/output
parameterers' type, which I shouldn't know if I just discovered the service.
(I attach the code later on)

So my question is: Isn't there a way to extract this kind of info from the
wsdl doc? (I would think of some getter() methods) After all, that's what we
make it for, isn't it? Unless I'm missing something here :-)

Any help will be greatly appreciated.

P.S: I'm using Axis beta2...
Sample Code (samples\stock\GetQuote1.java, comments on the return
statement):
public float getQuote1(String args[]) throws Exception {

      /* Define the service QName and port QName */
      /*******************************************/
      QName servQN = new
QName("urn:xmltoday-delayed-quotes","GetQuoteService");
      QName portQN = new QName("urn:xmltoday-delayed-quotes","GetQuote");

      /* Now use those QNames as pointers into the WSDL doc */
      /******************************************************/
      Service service = new Service( new URL("file:GetQuote.wsdl"),
servQN );
      Call    call    = (Call) service.createCall( portQN, "getQuote" );

      /* Strange - but allows the user to change just certain portions of */
      /* the URL we're gonna use to invoke the service.  Useful when you  */
      /* want to run it thru tcpmon (ie. put  -p81 on the cmd line).      */
      /********************************************************************/
      opts.setDefaultURL( call.getTargetEndpointAddress() );
      call.setTargetEndpointAddress( new URL(opts.getURL()) );

      /* Define some service specific properties */
      /*******************************************/
      call.setUsername( opts.getUser() );
      call.setPassword( opts.getPassword() );

      /* Get symbol and invoke the service */
      /*************************************/
        Object result = call.invoke( new Object[] { symbol = args[0] } );

      return( ((Float) result).floatValue() ); //How do we know it's a
Float??????
    }

Thomi Pilioura
PhD Student
Department of Informatics & Telecommunications
University of Athens
Greece

Received on Saturday, 2 November 2002 15:10:40 UTC