You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Kevin McClusky <ke...@yahoo.com> on 2011/04/16 05:33:59 UTC
Dynamic Client finding parameter classes for soap port
Hi,
I have a WSDL that I'm trying to use with the Dynamic Client functionality of CXF.
I've been through this page (and ComplexClient.java), and it works great if my wsdl is using type for message parts.
http://cxf.apache.org/docs/dynamic-clients.html
Unfortunately, the WSDL is using messages like this:
<wsdl:message name="FillTankSoapIn">
<wsdl:part name="parameters" element="tns:FillTank" />
</wsdl:message>
I've been able to get the element QName with MessagePartInfo.getElementQName(), and I can see that the classes for the element are being generated, but I'm not sure how to go from the QName to the generated Class.
(It appears there's no .getElementClass(), but I could just be missing something.)
Any help would be greatly appreciated. I've been banging my head on the keyboard for a while now :)
Thanks,
Kevin
Re: Dynamic Client finding parameter classes for soap port
Posted by Kevin McClusky <ke...@yahoo.com>.
That change works great, and does exactly what I need. Thank you so much!
________________________________
From: Daniel Kulp <dk...@apache.org>
To: users@cxf.apache.org
Cc: Kevin McClusky <ke...@yahoo.com>
Sent: Tuesday, April 19, 2011 12:10 PM
Subject: Re: Dynamic Client finding parameter classes for soap port
I'm not completely sure what's happening yet or why, but there is certainly an
easy fix. Change:
DynamicClientFactory dcf = DynamicClientFactory.newInstance();
to
DynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
The JAXWS subclass is much more capable as it can handle more of the complex
use cases with headers and inouts and such.
Dan
On Monday 18 April 2011 5:58:31 PM Kevin McClusky wrote:
> It looks like isUnwrapped() is false, so no dice on trying what you
> suggested. Here's a simple test case I threw together. It's using a
> publicly available WSDL, found here:
>
>
> http://www.webservicex.net/stockquote.asmx?WSDL
>
>
> import javax.xml.namespace.QName;
>
> import org.apache.cxf.endpoint.Client;
> import org.apache.cxf.endpoint.dynamic.DynamicClientFactory;
> import org.apache.cxf.service.model.MessagePartInfo;
>
> public class SimpleTest {
>
> public static void main(String[] args) {
> // WebserviceX Stock Quote
> String wsdlUrl = "http://www.webservicex.net/stockquote.asmx?WSDL";
> QName service = new
> QName("http://www.webserviceX.NET/","StockQuote"); // SOAP port, doesn't
> have a type class
> QName port = new
> QName("http://www.webserviceX.NET/","StockQuoteSoap12"); // POST port, has
> a type class
> //QName port = new
> QName("http://www.webserviceX.NET/","StockQuoteHttpPost");
> // Generate the SOAP client
> DynamicClientFactory dcf = DynamicClientFactory.newInstance();
> Client client = dcf.createClient(wsdlUrl, service,
> DynamicClientFactory.class.getClassLoader(), port);
> // Read and print the messagePartInfo
> MessagePartInfo messagePartInfo =
> client.getEndpoint().getBinding().getBindingInfo().getOperations().iterato
> r().next().getInput().getMessageParts().get(0); printInfo(messagePartInfo);
>
>
> }
>
> public static void printInfo(MessagePartInfo messagePartInfo) {
> System.out.println("Message Part Name:
> "+messagePartInfo.getName()); System.out.println(" Type Name:
> "+messagePartInfo.getTypeQName()); System.out.println(" Type Class:
> "+messagePartInfo.getTypeClass()); System.out.println(" Element Name:
> "+messagePartInfo.getElementQName()); System.out.println("");
> }
>
> }
>
>
> The output when using the SOAP port above:
>
> Message Part Name: {http://www.webserviceX.NET/}parameters
> Type Name: null
> Type Class: null
> Element Name: {http://www.webserviceX.NET/}GetQuote
>
>
> And when using POST:
>
> Message Part Name: {http://www.webserviceX.NET/}symbol
> Type Name: {http://www.w3.org/2001/XMLSchema}string
> Type Class: class java.lang.String
> Element Name: null
>
>
>
>
>
> ________________________________
> From: Daniel Kulp <dk...@apache.org>
> To: users@cxf.apache.org
> Cc: Kevin McClusky <ke...@yahoo.com>
> Sent: Monday, April 18, 2011 1:30 PM
> Subject: Re: Dynamic Client finding parameter classes for soap port
>
> On Monday 18 April 2011 4:22:18 PM Kevin McClusky wrote:
> > getTypeClass is actually giving me a null on any MessageParts that don't
> > have a type=
>
> Strange. That definitely should work fine as the class should be in
> there. On the operation, can you try calling isUnwrapped and if true,
> casting it to the UnwrappedOperationInfo and try the message parts on the
> result of getWrappedOperation?
>
> If that still doesn't help, we'd likely need to see a test case. I'm
> really not sure why those classes are being set in there.
>
> Dan
>
> > -Kevin
> >
> >
> >
> > ________________________________
> > From: Daniel Kulp <dk...@apache.org>
> > To: users@cxf.apache.org
> > Cc: Kevin McClusky <ke...@yahoo.com>
> > Sent: Monday, April 18, 2011 1:00 PM
> > Subject: Re: Dynamic Client finding parameter classes for soap port
> >
> >
> > This all should work fine. The getTypeClass should also be used in
> > this case and should return the required generated type for that
> > element.
> >
> > Dan
> >
> > On Friday 15 April 2011 11:33:59 PM Kevin McClusky wrote:
> > > Hi,
> > >
> > > I have a WSDL that I'm trying to use with the Dynamic Client
> > >
> > > functionality of CXF.
> > >
> > > I've been through this page (and ComplexClient.java), and it works
> > >great
> > >
> > > if my wsdl is using type for message parts.
> > >
> > > http://cxf.apache.org/docs/dynamic-clients.html
> > >
> > > Unfortunately, the WSDL is using messages like this:
> > >
> > > <wsdl:message name="FillTankSoapIn">
> > > <wsdl:part name="parameters" element="tns:FillTank" />
> > > </wsdl:message>
> > >
> > > I've been able to get the element QName with
> > >
> > > MessagePartInfo.getElementQName(), and I can see that the classes for
> > > the element are being generated, but I'm not sure how to go from the
> > > QName to the generated Class.
> > >
> > >
> > > (It appears there's no .getElementClass(), but I could just be missing
> > > something.)
> > >
> > > Any help would be greatly appreciated. I've been banging my head on
> > >the
> > >
> > > keyboard for a while now :)
> > >
> > > Thanks,
> > > Kevin
--
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com
Re: Dynamic Client finding parameter classes for soap port
Posted by Daniel Kulp <dk...@apache.org>.
I'm not completely sure what's happening yet or why, but there is certainly an
easy fix. Change:
DynamicClientFactory dcf = DynamicClientFactory.newInstance();
to
DynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
The JAXWS subclass is much more capable as it can handle more of the complex
use cases with headers and inouts and such.
Dan
On Monday 18 April 2011 5:58:31 PM Kevin McClusky wrote:
> It looks like isUnwrapped() is false, so no dice on trying what you
> suggested. Here's a simple test case I threw together. It's using a
> publicly available WSDL, found here:
>
>
> http://www.webservicex.net/stockquote.asmx?WSDL
>
>
> import javax.xml.namespace.QName;
>
> import org.apache.cxf.endpoint.Client;
> import org.apache.cxf.endpoint.dynamic.DynamicClientFactory;
> import org.apache.cxf.service.model.MessagePartInfo;
>
> public class SimpleTest {
>
> public static void main(String[] args) {
> // WebserviceX Stock Quote
> String wsdlUrl = "http://www.webservicex.net/stockquote.asmx?WSDL";
> QName service = new
> QName("http://www.webserviceX.NET/","StockQuote"); // SOAP port, doesn't
> have a type class
> QName port = new
> QName("http://www.webserviceX.NET/","StockQuoteSoap12"); // POST port, has
> a type class
> //QName port = new
> QName("http://www.webserviceX.NET/","StockQuoteHttpPost");
> // Generate the SOAP client
> DynamicClientFactory dcf = DynamicClientFactory.newInstance();
> Client client = dcf.createClient(wsdlUrl, service,
> DynamicClientFactory.class.getClassLoader(), port);
> // Read and print the messagePartInfo
> MessagePartInfo messagePartInfo =
> client.getEndpoint().getBinding().getBindingInfo().getOperations().iterato
> r().next().getInput().getMessageParts().get(0); printInfo(messagePartInfo);
>
>
> }
>
> public static void printInfo(MessagePartInfo messagePartInfo) {
> System.out.println("Message Part Name:
> "+messagePartInfo.getName()); System.out.println(" Type Name:
> "+messagePartInfo.getTypeQName()); System.out.println(" Type Class:
> "+messagePartInfo.getTypeClass()); System.out.println(" Element Name:
> "+messagePartInfo.getElementQName()); System.out.println("");
> }
>
> }
>
>
> The output when using the SOAP port above:
>
> Message Part Name: {http://www.webserviceX.NET/}parameters
> Type Name: null
> Type Class: null
> Element Name: {http://www.webserviceX.NET/}GetQuote
>
>
> And when using POST:
>
> Message Part Name: {http://www.webserviceX.NET/}symbol
> Type Name: {http://www.w3.org/2001/XMLSchema}string
> Type Class: class java.lang.String
> Element Name: null
>
>
>
>
>
> ________________________________
> From: Daniel Kulp <dk...@apache.org>
> To: users@cxf.apache.org
> Cc: Kevin McClusky <ke...@yahoo.com>
> Sent: Monday, April 18, 2011 1:30 PM
> Subject: Re: Dynamic Client finding parameter classes for soap port
>
> On Monday 18 April 2011 4:22:18 PM Kevin McClusky wrote:
> > getTypeClass is actually giving me a null on any MessageParts that don't
> > have a type=
>
> Strange. That definitely should work fine as the class should be in
> there. On the operation, can you try calling isUnwrapped and if true,
> casting it to the UnwrappedOperationInfo and try the message parts on the
> result of getWrappedOperation?
>
> If that still doesn't help, we'd likely need to see a test case. I'm
> really not sure why those classes are being set in there.
>
> Dan
>
> > -Kevin
> >
> >
> >
> > ________________________________
> > From: Daniel Kulp <dk...@apache.org>
> > To: users@cxf.apache.org
> > Cc: Kevin McClusky <ke...@yahoo.com>
> > Sent: Monday, April 18, 2011 1:00 PM
> > Subject: Re: Dynamic Client finding parameter classes for soap port
> >
> >
> > This all should work fine. The getTypeClass should also be used in
> > this case and should return the required generated type for that
> > element.
> >
> > Dan
> >
> > On Friday 15 April 2011 11:33:59 PM Kevin McClusky wrote:
> > > Hi,
> > >
> > > I have a WSDL that I'm trying to use with the Dynamic Client
> > >
> > > functionality of CXF.
> > >
> > > I've been through this page (and ComplexClient.java), and it works
> > >great
> > >
> > > if my wsdl is using type for message parts.
> > >
> > > http://cxf.apache.org/docs/dynamic-clients.html
> > >
> > > Unfortunately, the WSDL is using messages like this:
> > >
> > > <wsdl:message name="FillTankSoapIn">
> > > <wsdl:part name="parameters" element="tns:FillTank" />
> > > </wsdl:message>
> > >
> > > I've been able to get the element QName with
> > >
> > > MessagePartInfo.getElementQName(), and I can see that the classes for
> > > the element are being generated, but I'm not sure how to go from the
> > > QName to the generated Class.
> > >
> > >
> > > (It appears there's no .getElementClass(), but I could just be missing
> > > something.)
> > >
> > > Any help would be greatly appreciated. I've been banging my head on
> > >the
> > >
> > > keyboard for a while now :)
> > >
> > > Thanks,
> > > Kevin
--
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com
Re: Dynamic Client finding parameter classes for soap port
Posted by Kevin McClusky <ke...@yahoo.com>.
It looks like isUnwrapped() is false, so no dice on trying what you suggested.
Here's a simple test case I threw together. It's using a publicly available WSDL, found here:
http://www.webservicex.net/stockquote.asmx?WSDL
import javax.xml.namespace.QName;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.dynamic.DynamicClientFactory;
import org.apache.cxf.service.model.MessagePartInfo;
public class SimpleTest {
public static void main(String[] args) {
// WebserviceX Stock Quote
String wsdlUrl = "http://www.webservicex.net/stockquote.asmx?WSDL";
QName service = new QName("http://www.webserviceX.NET/","StockQuote");
// SOAP port, doesn't have a type class
QName port = new QName("http://www.webserviceX.NET/","StockQuoteSoap12");
// POST port, has a type class
//QName port = new QName("http://www.webserviceX.NET/","StockQuoteHttpPost");
// Generate the SOAP client
DynamicClientFactory dcf = DynamicClientFactory.newInstance();
Client client = dcf.createClient(wsdlUrl, service, DynamicClientFactory.class.getClassLoader(), port);
// Read and print the messagePartInfo
MessagePartInfo messagePartInfo = client.getEndpoint().getBinding().getBindingInfo().getOperations().iterator().next().getInput().getMessageParts().get(0);
printInfo(messagePartInfo);
}
public static void printInfo(MessagePartInfo messagePartInfo) {
System.out.println("Message Part Name: "+messagePartInfo.getName());
System.out.println(" Type Name: "+messagePartInfo.getTypeQName());
System.out.println(" Type Class: "+messagePartInfo.getTypeClass());
System.out.println(" Element Name: "+messagePartInfo.getElementQName());
System.out.println("");
}
}
The output when using the SOAP port above:
Message Part Name: {http://www.webserviceX.NET/}parameters
Type Name: null
Type Class: null
Element Name: {http://www.webserviceX.NET/}GetQuote
And when using POST:
Message Part Name: {http://www.webserviceX.NET/}symbol
Type Name: {http://www.w3.org/2001/XMLSchema}string
Type Class: class java.lang.String
Element Name: null
________________________________
From: Daniel Kulp <dk...@apache.org>
To: users@cxf.apache.org
Cc: Kevin McClusky <ke...@yahoo.com>
Sent: Monday, April 18, 2011 1:30 PM
Subject: Re: Dynamic Client finding parameter classes for soap port
On Monday 18 April 2011 4:22:18 PM Kevin McClusky wrote:
> getTypeClass is actually giving me a null on any MessageParts that don't
> have a type=
Strange. That definitely should work fine as the class should be in there.
On the operation, can you try calling isUnwrapped and if true, casting it to
the UnwrappedOperationInfo and try the message parts on the result of
getWrappedOperation?
If that still doesn't help, we'd likely need to see a test case. I'm really
not sure why those classes are being set in there.
Dan
>
>
> -Kevin
>
>
>
> ________________________________
> From: Daniel Kulp <dk...@apache.org>
> To: users@cxf.apache.org
> Cc: Kevin McClusky <ke...@yahoo.com>
> Sent: Monday, April 18, 2011 1:00 PM
> Subject: Re: Dynamic Client finding parameter classes for soap port
>
>
> This all should work fine. The getTypeClass should also be used in this
> case and should return the required generated type for that element.
>
> Dan
>
> On Friday 15 April 2011 11:33:59 PM Kevin McClusky wrote:
> > Hi,
> >
> > I have a WSDL that I'm trying to use with the Dynamic Client
> >
> > functionality of CXF.
> >
> > I've been through this page (and ComplexClient.java), and it works
> >great
> >
> > if my wsdl is using type for message parts.
> >
> > http://cxf.apache.org/docs/dynamic-clients.html
> >
> > Unfortunately, the WSDL is using messages like this:
> >
> > <wsdl:message name="FillTankSoapIn">
> > <wsdl:part name="parameters" element="tns:FillTank" />
> > </wsdl:message>
> >
> > I've been able to get the element QName with
> >
> > MessagePartInfo.getElementQName(), and I can see that the classes for the
> > element are being generated, but I'm not sure how to go from the QName to
> > the generated Class.
> >
> >
> > (It appears there's no .getElementClass(), but I could just be missing
> > something.)
> >
> > Any help would be greatly appreciated. I've been banging my head on
> >the
> >
> > keyboard for a while now :)
> >
> > Thanks,
> > Kevin
--
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com
Re: Dynamic Client finding parameter classes for soap port
Posted by Daniel Kulp <dk...@apache.org>.
On Monday 18 April 2011 4:22:18 PM Kevin McClusky wrote:
> getTypeClass is actually giving me a null on any MessageParts that don't
> have a type=
Strange. That definitely should work fine as the class should be in there.
On the operation, can you try calling isUnwrapped and if true, casting it to
the UnwrappedOperationInfo and try the message parts on the result of
getWrappedOperation?
If that still doesn't help, we'd likely need to see a test case. I'm really
not sure why those classes are being set in there.
Dan
>
>
> -Kevin
>
>
>
> ________________________________
> From: Daniel Kulp <dk...@apache.org>
> To: users@cxf.apache.org
> Cc: Kevin McClusky <ke...@yahoo.com>
> Sent: Monday, April 18, 2011 1:00 PM
> Subject: Re: Dynamic Client finding parameter classes for soap port
>
>
> This all should work fine. The getTypeClass should also be used in this
> case and should return the required generated type for that element.
>
> Dan
>
> On Friday 15 April 2011 11:33:59 PM Kevin McClusky wrote:
> > Hi,
> >
> > I have a WSDL that I'm trying to use with the Dynamic Client
> >
> > functionality of CXF.
> >
> > I've been through this page (and ComplexClient.java), and it works
> >great
> >
> > if my wsdl is using type for message parts.
> >
> > http://cxf.apache.org/docs/dynamic-clients.html
> >
> > Unfortunately, the WSDL is using messages like this:
> >
> > <wsdl:message name="FillTankSoapIn">
> > <wsdl:part name="parameters" element="tns:FillTank" />
> > </wsdl:message>
> >
> > I've been able to get the element QName with
> >
> > MessagePartInfo.getElementQName(), and I can see that the classes for the
> > element are being generated, but I'm not sure how to go from the QName to
> > the generated Class.
> >
> >
> > (It appears there's no .getElementClass(), but I could just be missing
> > something.)
> >
> > Any help would be greatly appreciated. I've been banging my head on
> >the
> >
> > keyboard for a while now :)
> >
> > Thanks,
> > Kevin
--
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com
Re: Dynamic Client finding parameter classes for soap port
Posted by Kevin McClusky <ke...@yahoo.com>.
getTypeClass is actually giving me a null on any MessageParts that don't have a type=
-Kevin
________________________________
From: Daniel Kulp <dk...@apache.org>
To: users@cxf.apache.org
Cc: Kevin McClusky <ke...@yahoo.com>
Sent: Monday, April 18, 2011 1:00 PM
Subject: Re: Dynamic Client finding parameter classes for soap port
This all should work fine. The getTypeClass should also be used in this
case and should return the required generated type for that element.
Dan
On Friday 15 April 2011 11:33:59 PM Kevin McClusky wrote:
> Hi,
> I have a WSDL that I'm trying to use with the Dynamic Client
> functionality of CXF.
>
> I've been through this page (and ComplexClient.java), and it works great
> if my wsdl is using type for message parts.
>
> http://cxf.apache.org/docs/dynamic-clients.html
>
>
> Unfortunately, the WSDL is using messages like this:
>
> <wsdl:message name="FillTankSoapIn">
> <wsdl:part name="parameters" element="tns:FillTank" />
> </wsdl:message>
>
> I've been able to get the element QName with
> MessagePartInfo.getElementQName(), and I can see that the classes for the
> element are being generated, but I'm not sure how to go from the QName to
> the generated Class.
>
>
> (It appears there's no .getElementClass(), but I could just be missing
> something.)
>
>
> Any help would be greatly appreciated. I've been banging my head on the
> keyboard for a while now :)
>
> Thanks,
> Kevin
--
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com
Re: Dynamic Client finding parameter classes for soap port
Posted by Daniel Kulp <dk...@apache.org>.
This all should work fine. The getTypeClass should also be used in this
case and should return the required generated type for that element.
Dan
On Friday 15 April 2011 11:33:59 PM Kevin McClusky wrote:
> Hi,
> I have a WSDL that I'm trying to use with the Dynamic Client
> functionality of CXF.
>
> I've been through this page (and ComplexClient.java), and it works great
> if my wsdl is using type for message parts.
>
> http://cxf.apache.org/docs/dynamic-clients.html
>
>
> Unfortunately, the WSDL is using messages like this:
>
> <wsdl:message name="FillTankSoapIn">
> <wsdl:part name="parameters" element="tns:FillTank" />
> </wsdl:message>
>
> I've been able to get the element QName with
> MessagePartInfo.getElementQName(), and I can see that the classes for the
> element are being generated, but I'm not sure how to go from the QName to
> the generated Class.
>
>
> (It appears there's no .getElementClass(), but I could just be missing
> something.)
>
>
> Any help would be greatly appreciated. I've been banging my head on the
> keyboard for a while now :)
>
> Thanks,
> Kevin
--
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com
Re: Dynamic Client finding parameter classes for soap port
Posted by Kevin McClusky <ke...@yahoo.com>.
Anyone? I just need to get a java Class from an element= instead of a type=
Thanks,
Kevin
________________________________
From: Kevin McClusky <ke...@yahoo.com>
To: "users@cxf.apache.org" <us...@cxf.apache.org>
Sent: Friday, April 15, 2011 8:33 PM
Subject: Dynamic Client finding parameter classes for soap port
Hi,
I have a WSDL that I'm trying to use with the Dynamic Client functionality of CXF.
I've been through this page (and ComplexClient.java), and it works great if my wsdl is using type for message parts.
http://cxf.apache.org/docs/dynamic-clients.html
Unfortunately, the WSDL is using messages like this:
<wsdl:message name="FillTankSoapIn">
<wsdl:part name="parameters" element="tns:FillTank" />
</wsdl:message>
I've been able to get the element QName with MessagePartInfo.getElementQName(), and I can see that the classes for the element are being generated, but I'm not sure how to go from the QName to the generated Class.
(It appears there's no .getElementClass(), but I could just be missing something.)
Any help would be greatly appreciated. I've been banging my head on the keyboard for a while now :)
Thanks,
Kevin