The endpoint information for a service is defined in a wsdl:port
element, and the
Service
object creates a proxy instance for each of the endpoints defined in a WSDL contract, if one is
specified. If you do not specify a WSDL contract when you create your Service
object, the
Service
object has no information about the endpoints that implement your service, and therefore
cannot create any proxy instances. In this case, you must provide the Service
object with the information
needed to represent a wsdl:port
element using the addPort()
method.
The Service
class defines an addPort()
method, shown in
Example 2.3, that is used in cases where there is no WSDL contract available to the
consumer implementation. The addPort()
method allows you to give a Service
object the
information, which is typically stored in a wsdl:port
element, necessary to create a proxy for a service
implementation.
Example 2.3. The addPort()
Method
void addPort(QName portName,
String bindingId,
String endpointAddress)
throws WebServiceException;
The value of the portName
is a QName. The value of its namespace part is the target namespace of the service.
The service's target namespace is specified in the targetNamespace property of the
@WebService
annotation. The value of the QName's local part is the value of
wsdl:port
element's name
attribute. You can determine this value in one of the
following ways:
Specify it in the portName property of the @WebService
annotation.
Append Port
to the value of the name property of the
@WebService
annotation.
Append Port
to the name of the SEI.
The value of the bindingId
parameter is a string that uniquely identifies the type of binding used by the
endpoint. For a SOAP binding you use the standard SOAP namespace: http://schemas.xmlsoap.org/soap/
.
If the endpoint is not using a SOAP binding, the value of the bindingId
parameter is determined by the binding
developer.
The value of the endpointAddress
parameter is the address where the endpoint is published. For a SOAP/HTTP
endpoint, the address is an HTTP address. Transports other than HTTP use different address schemes.
Example 2.4 shows code for adding a port to the Service
object created in Example 2.2.
Example 2.4. Adding a Port to a Service
Object
package com.fusesource.demo; import javax.xml.namespace.QName; import javax.xml.ws.Service; public class Client { public static void main(String args[]) { ...QName portName = new QName("http://demo.fusesource.com", "stockQuoteReporterPort");
s.addPort(portName,
"http://schemas.xmlsoap.org/soap/",
"http://localhost:9000/StockQuote"); ... } }
The code in Example 2.4 does the following: