Hi,
   Thanks for the responses.

   For #2, how would I go about finding what the resulting class of the 
client.invoke will be at runtime?  (Looking to find it using programming 
instead of generating a code stub and manually looking through it.)

Thanks,
Kevin



________________________________
From: Freeman Fang <[email protected]>
To: [email protected]
Sent: Thursday, May 12, 2011 10:24 PM
Subject: Re: Two questions

Hi,

My comment inline
On 2011-5-13, at 上午9:47, Kevin McClusky wrote:

> 1) After a dynamic client is created using a WSDL (with 
> JaxWsDynamicClientFactory), how do I change the URL that it's using for the 
> web service?
client.getConduit().getTarget().getAddress().setValue("http://new_url_you_want";);
> 
> 2) client.invoke() is giving me back a different class than getTypeClass() is 
> giving me.  How do I make these match?
> 
getTypeClass() will return wrapped type which is useful for jaxb to do 
marshall/unmarshall, but the expected result here for client.invoke is the 
String, you can use the wsdl2java tool to generate code stub from that wsdl 
which you can find out the correct signature for that method.

Freeman
> 
> 
> My code for #2 follows.
> 
> 
>     public static void main(String[] args) throws Exception {
> 
>         String wsdlUrl = "http://www.webservicex.net/stockquote.asmx?WSDL";;
> 
>         // Select the WSI-BP compliant port
>         ServiceInfo serviceInfo = getServices(wsdlUrl).get(1);
>         QName service = serviceInfo.getName();
>         QName port    = serviceInfo.getBindings().iterator().next().getName();
> 
>         // Create the client
>         ClientImpl client = 
>(ClientImpl)JaxWsDynamicClientFactory.newInstance().createClient(wsdlUrl, 
>service, port);
> 
>         // Get the Class for the only input message part
>         Class inputClass = 
>client.getEndpoint().getEndpointInfo().getBinding().getOperations().iterator().next().getOperationInfo().getInput().getMessageParts().get(0).getTypeClass();
>         System.out.println("Class: "+inputClass);
> 
>         // Get the Class for the only output message part
>         Class outputClass = 
>client.getEndpoint().getEndpointInfo().getBinding().getOperations().iterator().next().getOperationInfo().getOutput().getMessageParts().get(0).getTypeClass();
>         System.out.println("Class: "+outputClass);
> 
> 
>         // Set the input object to request GOOGle's stock quote information
>         Object getQuote = inputClass.newInstance();
>         for (Method m : getQuote.getClass().getMethods()) {
>             if (m.getName().equals("setSymbol")) {
>                 m.invoke(getQuote, "GOOG");
>                 System.out.println(" Method: "+m.getName()+" invoked");
>             }
>         }
> 
>         BindingOperationInfo boi = 
>client.getEndpoint().getEndpointInfo().getBinding().getOperations().iterator().next();
>         Object[] objects = client.invoke(boi, getQuote);
> 
>         // We expect the output to be a GetQuoteResponse object, which is 
>what outputClass is, but it comes back as a String
> 
>         for (Object o : objects) {
>             System.out.println("Object: "+o.getClass());
>             if (o instanceof String) {
>                 String s = (String) o;
>                 System.out.println(s);
>             }
>         }
>     }
> 
>     public static List<ServiceInfo> getServices(String url) {
>         WSDLServiceFactory sf = new 
>WSDLServiceFactory(CXFBusFactory.getThreadDefaultBus(), url);
>         Definition definition = sf.getDefinition();
> 
>         List<ServiceInfo> services;
>         services = new 
>WSDLServiceBuilder(CXFBusFactory.getThreadDefaultBus()).buildServices(definition);
>         System.out.println(services.size() + " services in Service List");
> 
>         return services;
>     }
> 
> 
> 
> 
> 
> Thank you!
> Kevin

---------------------------------------------
Freeman Fang

FuseSource
Email:[email protected]
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
Connect at CamelOne May 24-26
The Open Source Integration Conference

Reply via email to