Daniel Kulp <[EMAIL PROTECTED]> writes:
> Technically, with JAX-WS, you don't need the wsdl. However, the
> spec does say that if it's available/specified, we're supposed to
> use it.
Use it to supply default values? It seems like a large run time tax
that the WSDL2Java tool -- or something like it -- should be fixing
into code.
> For the most part, if you remove the wsdlLocation attribute, it
> should work.
Yes, I figured out somewhat after writing yesterday. It's annoying
that there's a no-arg constructor that supplies the WSDL location and
the service name, and there's a two-arg constructor requiring WSDL
location and service name. What I really want is a one-arg constructor
asking for the WSDL location -- which I could designate as null -- but
that uses the known service name. The code generator puts this service
name in the class as a manifest constant ("SERVICE"), but it's
private, so I can't even reuse the string when calling the two-arg
constructor myself. Oh, and I'm pretty sure the service name is
required, though I'm not sure why if the WSDL isn't provided.
I then saw that I could call addPort() to define a target, but then I
ran into this problem:
Service.addPort(QName, String, String) does not accept binding ID
javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING
http://issues.apache.org/jira/browse/CXF-628
> The client side ends up being a bit different. You don't really use the
> generated service class. Instead, you can do something like:
>
> PortClass port = Service.create(serviceName).getPort(PortClass.class);
> ((BindingProvider)port).getRequestContext().put(
> BindingProvider.ENDPOINT_ADDRESS_PROPERY,
> "http://foo.com/blah");
Oh, that's different. What's the purpose of the serviceName attribute
passed to Service.create()?
> You MAY be able to pass null into the generated service for the
> wsdlLocation. I'm not sure if that works or not.
Yes, it sort of works, but I'll need to get past the JIRA issue above
to know for sure.
> You would still need to set the endpoint address though. That
> doesn't get recorded anywhere.
Oh, as that normally gets read from the WSDL at run time, not from an
annotation on the Service-derived class, right?
--
Steven E. Harris