jaxws/src/share/classes/javax/xml/ws/Service.java
changeset 2678 57cf2a1c1a05
parent 8 474761f14bca
--- a/jaxws/src/share/classes/javax/xml/ws/Service.java	Wed Jul 05 16:49:07 2017 +0200
+++ b/jaxws/src/share/classes/javax/xml/ws/Service.java	Mon Apr 20 15:14:39 2009 -0700
@@ -33,14 +33,14 @@
 import javax.xml.ws.spi.Provider;
 
 /**
- *  <code>Service</code> objects provide the client view of a Web service.
- *  <p><code>Service</code> acts as a factory of the following:
- *  <ul>
- *  <li>Proxies for a target service endpoint.
- *  <li>Instances of <code>javax.xml.ws.Dispatch</code> for
- *      dynamic message-oriented invocation of a remote
- *      operation.
- *  </li>
+ * <code>Service</code> objects provide the client view of a Web service.
+ * <p><code>Service</code> acts as a factory of the following:
+ * <ul>
+ * <li>Proxies for a target service endpoint.
+ * <li>Instances of {@link javax.xml.ws.Dispatch} for
+ *     dynamic message-oriented invocation of a remote
+ *     operation.
+ * </li>
  *
  * <p>The ports available on a service can be enumerated using the
  * <code>getPorts</code> method. Alternatively, you can pass a
@@ -56,280 +56,658 @@
  * can be enabled by creating a <code>ThreadPoolExecutor</code> and
  * registering it with the service.
  *
- *  @since JAX-WS 2.0
+ * @since JAX-WS 2.0
  *
- *  @see javax.xml.ws.spi.Provider
- *  @see javax.xml.ws.handler.HandlerResolver
- *  @see java.util.concurrent.Executor
-**/
+ * @see javax.xml.ws.spi.Provider
+ * @see javax.xml.ws.handler.HandlerResolver
+ * @see java.util.concurrent.Executor
+ **/
 public class Service {
 
-  private ServiceDelegate delegate;
-  /**
-   * The orientation of a dynamic client or service. MESSAGE provides
-   * access to entire protocol message, PAYLOAD to protocol message
-   * payload only.
-  **/
-  public enum Mode { MESSAGE, PAYLOAD };
+    private ServiceDelegate delegate;
+    /**
+     * The orientation of a dynamic client or service. <code>MESSAGE</code> provides
+     * access to entire protocol message, <code>PAYLOAD</code> to protocol message
+     * payload only.
+     **/
+    public enum Mode { MESSAGE, PAYLOAD };
+
+    protected Service(java.net.URL wsdlDocumentLocation, QName serviceName) {
+        delegate = Provider.provider().createServiceDelegate(wsdlDocumentLocation,
+                serviceName,
+                this.getClass());
+    }
+
+
+    /**
+     * The <code>getPort</code> method returns a proxy. A service client
+     * uses this proxy to invoke operations on the target
+     * service endpoint. The <code>serviceEndpointInterface</code>
+     * specifies the service endpoint interface that is supported by
+     * the created dynamic proxy instance.
+     *
+     * @param portName  Qualified name of the service endpoint in
+     *                  the WSDL service description.
+     * @param serviceEndpointInterface Service endpoint interface
+     *                  supported by the dynamic proxy instance.
+     * @return Object Proxy instance that
+     *                supports the specified service endpoint
+     *                interface.
+     * @throws WebServiceException This exception is thrown in the
+     *                  following cases:
+     *                  <UL>
+     *                  <LI>If there is an error in creation of
+     *                      the proxy.
+     *                  <LI>If there is any missing WSDL metadata
+     *                      as required by this method.
+     *                  <LI>If an illegal
+     *                      <code>serviceEndpointInterface</code>
+     *                      or <code>portName</code> is specified.
+     *                  </UL>
+     * @see java.lang.reflect.Proxy
+     * @see java.lang.reflect.InvocationHandler
+     **/
+    public <T> T getPort(QName portName,
+            Class<T> serviceEndpointInterface) {
+        return delegate.getPort(portName, serviceEndpointInterface);
+    }
+
+    /**
+     * The <code>getPort</code> method returns a proxy. A service client
+     * uses this proxy to invoke operations on the target
+     * service endpoint. The <code>serviceEndpointInterface</code>
+     * specifies the service endpoint interface that is supported by
+     * the created dynamic proxy instance.
+     *
+     * @param portName  Qualified name of the service endpoint in
+     *                  the WSDL service description.
+     * @param serviceEndpointInterface Service endpoint interface
+     *                  supported by the dynamic proxy instance.
+     * @param features  A list of WebServiceFeatures to configure on the
+     *                proxy.  Supported features not in the <code>features
+     *                </code> parameter will have their default values.
+     * @return Object Proxy instance that
+     *                supports the specified service endpoint
+     *                interface.
+     * @throws WebServiceException This exception is thrown in the
+     *                  following cases:
+     *                  <UL>
+     *                  <LI>If there is an error in creation of
+     *                      the proxy.
+     *                  <LI>If there is any missing WSDL metadata
+     *                      as required by this method.
+     *                  <LI>If an illegal
+     *                      <code>serviceEndpointInterface</code>
+     *                      or <code>portName</code> is specified.
+     *                  <LI>If a feature is enabled that is not compatible
+     *                      with this port or is unsupported.
+     *                  </UL>
+     * @see java.lang.reflect.Proxy
+     * @see java.lang.reflect.InvocationHandler
+     * @see WebServiceFeature
+     *
+     * @since JAX-WS 2.1
+     **/
+    public <T> T getPort(QName portName,
+            Class<T> serviceEndpointInterface, WebServiceFeature... features) {
+        return delegate.getPort(portName, serviceEndpointInterface, features);
+    }
+
+
+    /**
+     * The <code>getPort</code> method returns a proxy. The parameter
+     * <code>serviceEndpointInterface</code> specifies the service
+     * endpoint interface that is supported by the returned proxy.
+     * In the implementation of this method, the JAX-WS
+     * runtime system takes the responsibility of selecting a protocol
+     * binding (and a port) and configuring the proxy accordingly.
+     * The returned proxy should not be reconfigured by the client.
+     *
+     * @param serviceEndpointInterface Service endpoint interface.
+     * @return Object instance that supports the
+     *                  specified service endpoint interface.
+     * @throws WebServiceException
+     *                  <UL>
+     *                  <LI>If there is an error during creation
+     *                      of the proxy.
+     *                  <LI>If there is any missing WSDL metadata
+     *                      as required by this method.
+     *                  <LI>If an illegal.
+     *                      <code>serviceEndpointInterface</code>
+     *                      is specified.
+     *                  </UL>
+     **/
+    public <T> T getPort(Class<T> serviceEndpointInterface) {
+        return delegate.getPort(serviceEndpointInterface);
+    }
+
 
-  protected Service(java.net.URL wsdlDocumentLocation, QName serviceName)
-  {
-      delegate = Provider.provider().createServiceDelegate(wsdlDocumentLocation,
-                                                           serviceName,
-                                                           this.getClass());
-  }
+    /**
+     * The <code>getPort</code> method returns a proxy. The parameter
+     * <code>serviceEndpointInterface</code> specifies the service
+     * endpoint interface that is supported by the returned proxy.
+     * In the implementation of this method, the JAX-WS
+     * runtime system takes the responsibility of selecting a protocol
+     * binding (and a port) and configuring the proxy accordingly.
+     * The returned proxy should not be reconfigured by the client.
+     *
+     * @param serviceEndpointInterface Service endpoint interface.
+     * @param features  A list of WebServiceFeatures to configure on the
+     *                proxy.  Supported features not in the <code>features
+     *                </code> parameter will have their default values.
+     * @return Object instance that supports the
+     *                  specified service endpoint interface.
+     * @throws WebServiceException
+     *                  <UL>
+     *                  <LI>If there is an error during creation
+     *                      of the proxy.
+     *                  <LI>If there is any missing WSDL metadata
+     *                      as required by this method.
+     *                  <LI>If an illegal
+     *                      <code>serviceEndpointInterface</code>
+     *                      is specified.
+     *                  <LI>If a feature is enabled that is not compatible
+     *                      with this port or is unsupported.
+     *                  </UL>
+     *
+     * @see WebServiceFeature
+     *
+     * @since JAX-WS 2.1
+     **/
+    public <T> T getPort(Class<T> serviceEndpointInterface,
+            WebServiceFeature... features) {
+        return delegate.getPort(serviceEndpointInterface, features);
+    }
+
+
+    /**
+     * The <code>getPort</code> method returns a proxy.
+     * The parameter <code>endpointReference</code> specifies the
+     * endpoint that will be invoked by the returned proxy.  If there
+     * are any reference parameters in the
+     * <code>endpointReference</code>, then those reference
+     * parameters MUST appear as SOAP headers, indicating them to be
+     * reference parameters, on all messages sent to the endpoint.
+     * The <code>endpointReference's</code> address MUST be used
+     * for invocations on the endpoint.
+     * The parameter <code>serviceEndpointInterface</code> specifies
+     * the service endpoint interface that is supported by the
+     * returned proxy.
+     * In the implementation of this method, the JAX-WS
+     * runtime system takes the responsibility of selecting a protocol
+     * binding (and a port) and configuring the proxy accordingly from
+     * the WSDL associated with this <code>Service</code> instance or
+     * from the metadata from the <code>endpointReference</code>.
+     * If this <code>Service</code> instance has a WSDL and
+     * the <code>endpointReference</code> metadata
+     * also has a WSDL, then the WSDL from this instance MUST be used.
+     * If this <code>Service</code> instance does not have a WSDL and
+     * the <code>endpointReference</code> does have a WSDL, then the
+     * WSDL from the <code>endpointReference</code> MAY be used.
+     * The returned proxy should not be reconfigured by the client.
+     * If this <code>Service</code> instance has a known proxy
+     * port that matches the information contained in
+     * the WSDL,
+     * then that proxy is returned, otherwise a WebServiceException
+     * is thrown.
+     * <p>
+     * Calling this method has the same behavior as the following
+     * <pre>
+     * <code>port = service.getPort(portName, serviceEndpointInterface);</code>
+     * </pre>
+     * where the <code>portName</code> is retrieved from the
+     * metadata of the <code>endpointReference</code> or from the
+     * <code>serviceEndpointInterface</code> and the WSDL
+     * associated with this <code>Service</code> instance.
+     *
+     * @param endpointReference  The <code>EndpointReference</code>
+     * for the target service endpoint that will be invoked by the
+     * returned proxy.
+     * @param serviceEndpointInterface Service endpoint interface.
+     * @param features  A list of <code>WebServiceFeatures</code> to configure on the
+     *                proxy.  Supported features not in the <code>features
+     *                </code> parameter will have their default values.
+     * @return Object Proxy instance that supports the
+     *                  specified service endpoint interface.
+     * @throws WebServiceException
+     *                  <UL>
+     *                  <LI>If there is an error during creation
+     *                      of the proxy.
+     *                  <LI>If there is any missing WSDL metadata
+     *                      as required by this method.
+     *                  <LI>If the <code>endpointReference</code> metadata does
+     *                      not match the <code>serviceName</code> of this
+     *                      <code>Service</code> instance.
+     *                  <LI>If a <code>portName</code> cannot be extracted
+     *                      from the WSDL or <code>endpointReference</code> metadata.
+     *                  <LI>If an invalid
+     *                      <code>endpointReference</code>
+     *                      is specified.
+     *                  <LI>If an invalid
+     *                      <code>serviceEndpointInterface</code>
+     *                      is specified.
+     *                  <LI>If a feature is enabled that is not compatible
+     *                      with this port or is unsupported.
+     *                  </UL>
+     *
+     * @since JAX-WS 2.1
+     **/
+    public <T> T getPort(EndpointReference endpointReference,
+           Class<T> serviceEndpointInterface, WebServiceFeature... features) {
+        return delegate.getPort(endpointReference, serviceEndpointInterface, features);
+    }
+
+    /**
+     * Creates a new port for the service. Ports created in this way contain
+     * no WSDL port type information and can only be used for creating
+     * <code>Dispatch</code>instances.
+     *
+     * @param portName  Qualified name for the target service endpoint.
+     * @param bindingId A String identifier of a binding.
+     * @param endpointAddress Address of the target service endpoint as a URI.
+     * @throws WebServiceException If any error in the creation of
+     * the port.
+     *
+     * @see javax.xml.ws.soap.SOAPBinding#SOAP11HTTP_BINDING
+     * @see javax.xml.ws.soap.SOAPBinding#SOAP12HTTP_BINDING
+     * @see javax.xml.ws.http.HTTPBinding#HTTP_BINDING
+     **/
+    public void addPort(QName portName, String bindingId, String endpointAddress) {
+        delegate.addPort(portName, bindingId, endpointAddress);
+    }
 
 
-  /** The getPort method returns a stub. A service client
-   *  uses this stub to invoke operations on the target
-   *  service endpoint. The <code>serviceEndpointInterface</code>
-   *  specifies the service endpoint interface that is supported by
-   *  the created dynamic proxy or stub instance.
-   *
-   *  @param portName  Qualified name of the service endpoint in
-   *                   the WSDL service description
-   *  @param serviceEndpointInterface Service endpoint interface
-   *                   supported by the dynamic proxy or stub
-   *                   instance
-   *  @return Object Proxy instance that
-   *                 supports the specified service endpoint
-   *                 interface
-   *  @throws WebServiceException This exception is thrown in the
-   *                   following cases:
-   *                   <UL>
-   *                   <LI>If there is an error in creation of
-   *                       the proxy
-   *                   <LI>If there is any missing WSDL metadata
-   *                       as required by this method
-   *                   <LI>Optionally, if an illegal
-   *                       <code>serviceEndpointInterface</code>
-   *                       or <code>portName</code> is specified
-   *                   </UL>
-   *  @see java.lang.reflect.Proxy
-   *  @see java.lang.reflect.InvocationHandler
-  **/
-  public <T> T getPort(QName portName,
-                                 Class<T> serviceEndpointInterface)
-  {
-      return delegate.getPort(portName, serviceEndpointInterface);
-  }
+    /**
+     * Creates a <code>Dispatch</code> instance for use with objects of
+     * the user's choosing.
+     *
+     * @param portName  Qualified name for the target service endpoint
+     * @param type The class of object used for messages or message
+     * payloads. Implementations are required to support
+     * <code>javax.xml.transform.Source</code>, <code>javax.xml.soap.SOAPMessage</code>
+     * and <code>javax.activation.DataSource</code>, depending on
+     * the binding in use.
+     * @param mode Controls whether the created dispatch instance is message
+     * or payload oriented, i.e. whether the user will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the user will work with
+     * SOAP messages or the contents of a SOAP body. Mode MUST be MESSAGE
+     * when type is SOAPMessage.
+     *
+     * @return Dispatch instance.
+     * @throws WebServiceException If any error in the creation of
+     *                  the <code>Dispatch</code> object.
+     *
+     * @see javax.xml.transform.Source
+     * @see javax.xml.soap.SOAPMessage
+     **/
+    public <T> Dispatch<T> createDispatch(QName portName, Class<T> type, Mode mode) {
+        return delegate.createDispatch(portName, type, mode);
+    }
 
-  /** The getPort method returns a stub. The parameter
-   *  <code>serviceEndpointInterface</code> specifies the service
-   *  endpoint interface that is supported by the returned proxy.
-   *  In the implementation of this method, the JAX-WS
-   *  runtime system takes the responsibility of selecting a protocol
-   *  binding (and a port) and configuring the proxy accordingly.
-   *  The returned proxy should not be reconfigured by the client.
-   *
-   *  @param serviceEndpointInterface Service endpoint interface
-   *  @return Object instance that supports the
-   *                   specified service endpoint interface
-   *  @throws WebServiceException
-   *                   <UL>
-   *                   <LI>If there is an error during creation
-   *                       of the proxy
-   *                   <LI>If there is any missing WSDL metadata
-   *                       as required by this method
-   *                   <LI>Optionally, if an illegal
-   *                       <code>serviceEndpointInterface</code>
-   *                       is specified
-   *                   </UL>
-  **/
-  public <T> T getPort(Class<T> serviceEndpointInterface) {
-      return delegate.getPort(serviceEndpointInterface);
-  }
 
-  /** Creates a new port for the service. Ports created in this way contain
-   *  no WSDL port type information and can only be used for creating
-   *  <code>Dispatch</code>instances.
-   *
-   *  @param portName  Qualified name for the target service endpoint
-   *  @param bindingId A String identifier of a binding.
-   *  @param endpointAddress Address of the target service endpoint as a URI
-   *  @throws WebServiceException If any error in the creation of
-   *  the port
-   *
-   *  @see javax.xml.ws.soap.SOAPBinding#SOAP11HTTP_BINDING
-   *  @see javax.xml.ws.soap.SOAPBinding#SOAP12HTTP_BINDING
-   *  @see javax.xml.ws.http.HTTPBinding#HTTP_BINDING
-   **/
-  public void addPort(QName portName, String bindingId, String endpointAddress)
-  {
-      delegate.addPort(portName, bindingId, endpointAddress);
-  }
-
-  /** Creates a <code>Dispatch</code> instance for use with objects of
-   *  the users choosing.
-   *
-   *  @param portName  Qualified name for the target service endpoint
-   *  @param type The class of object used to messages or message
-   *  payloads. Implementations are required to support
-   *  <code>javax.xml.transform.Source</code>, <code>javax.xml.soap.SOAPMessage</code>
-   *  and <code>javax.activation.DataSource</code>, depending on
-   *  the binding in use.
-   *  @param mode Controls whether the created dispatch instance is message
-   *  or payload oriented, i.e. whether the user will work with complete
-   *  protocol messages or message payloads. E.g. when using the SOAP
-   *  protocol, this parameter controls whether the user will work with
-   *  SOAP messages or the contents of a SOAP body. Mode must be MESSAGE
-   *  when type is SOAPMessage.
-   *
-   *  @return Dispatch instance
-   *  @throws WebServiceException If any error in the creation of
-   *                   the <code>Dispatch</code> object
-   *  @see javax.xml.transform.Source
-   *  @see javax.xml.soap.SOAPMessage
-   **/
-  public <T> Dispatch<T> createDispatch(QName portName, Class<T> type, Mode mode)
-  {
-      return delegate.createDispatch(portName, type, mode);
-  }
-
-  /** Creates a <code>Dispatch</code> instance for use with JAXB
-   *  generated objects.
-   *
-   *  @param portName  Qualified name for the target service endpoint
-   *  @param context The JAXB context used to marshall and unmarshall
-   *  messages or message payloads.
-   *  @param mode Controls whether the created dispatch instance is message
-   *  or payload oriented, i.e. whether the user will work with complete
-   *  protocol messages or message payloads. E.g. when using the SOAP
-   *  protocol, this parameter controls whether the user will work with
-   *  SOAP messages or the contents of a SOAP body.
-   *
-   *  @return Dispatch instance
-   *  @throws ServiceException If any error in the creation of
-   *                   the <code>Dispatch</code> object
-   *
-   *  @see javax.xml.bind.JAXBContext
-   **/
-  public Dispatch<Object> createDispatch(QName portName, JAXBContext context,
-      Mode mode)
-  {
-      return delegate.createDispatch(portName, context,  mode);
-  }
+    /**
+     * Creates a <code>Dispatch</code> instance for use with objects of
+     * the user's choosing.
+     *
+     * @param portName  Qualified name for the target service endpoint
+     * @param type The class of object used for messages or message
+     * payloads. Implementations are required to support
+     * <code>javax.xml.transform.Source</code> and <code>javax.xml.soap.SOAPMessage</code>.
+     * @param mode Controls whether the created dispatch instance is message
+     * or payload oriented, i.e. whether the user will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the user will work with
+     * SOAP messages or the contents of a SOAP body. Mode MUST be <code>MESSAGE</code>
+     * when type is <code>SOAPMessage</code>.
+     * @param features  A list of <code>WebServiceFeatures</code> to configure on the
+     *                proxy.  Supported features not in the <code>features
+     *                </code> parameter will have their default values.
+     *
+     * @return Dispatch instance.
+     * @throws WebServiceException If any error in the creation of
+     *                  the <code>Dispatch</code> object or if a
+     *                  feature is enabled that is not compatible with
+     *                  this port or is unsupported.
+     *
+     * @see javax.xml.transform.Source
+     * @see javax.xml.soap.SOAPMessage
+     * @see WebServiceFeature
+     *
+     * @since JAX-WS 2.1
+     **/
+    public <T> Dispatch<T> createDispatch(QName portName, Class<T> type,
+            Service.Mode mode, WebServiceFeature... features) {
+        return delegate.createDispatch(portName, type, mode, features);
+    }
 
 
+    /**
+     * Creates a <code>Dispatch</code> instance for use with objects of
+     * the user's choosing. If there
+     * are any reference parameters in the
+     * <code>endpointReference</code>, then those reference
+     * parameters MUST appear as SOAP headers, indicating them to be
+     * reference parameters, on all messages sent to the endpoint.
+     * The <code>endpointReference's</code> address MUST be used
+     * for invocations on the endpoint.
+     * In the implementation of this method, the JAX-WS
+     * runtime system takes the responsibility of selecting a protocol
+     * binding (and a port) and configuring the dispatch accordingly from
+     * the WSDL associated with this <code>Service</code> instance or
+     * from the metadata from the <code>endpointReference</code>.
+     * If this <code>Service</code> instance has a WSDL and
+     * the <code>endpointReference</code>
+     * also has a WSDL in its metadata, then the WSDL from this instance MUST be used.
+     * If this <code>Service</code> instance does not have a WSDL and
+     * the <code>endpointReference</code> does have a WSDL, then the
+     * WSDL from the <code>endpointReference</code> MAY be used.
+     * An implementation MUST be able to retrieve the <code>portName</code> from the
+     * <code>endpointReference</code> metadata.
+     * <p>
+     * This method behaves the same as calling
+     * <pre>
+     * <code>dispatch = service.createDispatch(portName, type, mode, features);</code>
+     * </pre>
+     * where the <code>portName</code> is retrieved from the
+     * WSDL or <code>EndpointReference</code> metadata.
+     *
+     * @param endpointReference  The <code>EndpointReference</code>
+     * for the target service endpoint that will be invoked by the
+     * returned <code>Dispatch</code> object.
+     * @param type The class of object used to messages or message
+     * payloads. Implementations are required to support
+     * <code>javax.xml.transform.Source</code> and <code>javax.xml.soap.SOAPMessage</code>.
+     * @param mode Controls whether the created dispatch instance is message
+     * or payload oriented, i.e. whether the user will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the user will work with
+     * SOAP messages or the contents of a SOAP body. Mode MUST be <code>MESSAGE</code>
+     * when type is <code>SOAPMessage</code>.
+     * @param features  An array of <code>WebServiceFeatures</code> to configure on the
+     *                proxy.  Supported features not in the <code>features
+     *                </code> parameter will have their default values.
+     *
+     * @return Dispatch instance
+     * @throws WebServiceException
+     *                  <UL>
+     *                    <LI>If there is any missing WSDL metadata
+     *                      as required by this method.
+     *                    <li>If the <code>endpointReference</code> metadata does
+     *                      not match the <code>serviceName</code> or <code>portName</code>
+     *                      of a WSDL associated
+     *                      with this <code>Service</code> instance.
+     *                    <li>If the <code>portName</code> cannot be determined
+     *                    from the <code>EndpointReference</code> metadata.
+     *                    <li>If any error in the creation of
+     *                     the <code>Dispatch</code> object.
+     *                    <li>If a feature is enabled that is not
+     *                    compatible with this port or is unsupported.
+     *                  </UL>
+     *
+     * @see javax.xml.transform.Source
+     * @see javax.xml.soap.SOAPMessage
+     * @see WebServiceFeature
+     *
+     * @since JAX-WS 2.1
+     **/
+    public <T> Dispatch<T> createDispatch(EndpointReference endpointReference,
+            Class<T> type, Service.Mode mode,
+            WebServiceFeature... features) {
+        return delegate.createDispatch(endpointReference, type, mode, features);
+    }
 
-  /** Gets the name of this service.
-   *  @return Qualified name of this service
-  **/
-  public QName getServiceName() {
-      return delegate.getServiceName();
-  }
+    /**
+     * Creates a <code>Dispatch</code> instance for use with JAXB
+     * generated objects.
+     *
+     * @param portName  Qualified name for the target service endpoint
+     * @param context The JAXB context used to marshall and unmarshall
+     * messages or message payloads.
+     * @param mode Controls whether the created dispatch instance is message
+     * or payload oriented, i.e. whether the user will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the user will work with
+     * SOAP messages or the contents of a SOAP body.
+     *
+     * @return Dispatch instance.
+     * @throws WebServiceException If any error in the creation of
+     *                  the <code>Dispatch</code> object.
+     *
+     * @see javax.xml.bind.JAXBContext
+     **/
+    public Dispatch<Object> createDispatch(QName portName, JAXBContext context,
+            Mode mode) {
+        return delegate.createDispatch(portName, context,  mode);
+    }
+
 
-  /** Returns an <code>Iterator</code> for the list of
-   *  <code>QName</code>s of service endpoints grouped by this
-   *  service
-   *
-   *  @return Returns <code>java.util.Iterator</code> with elements
-   *          of type <code>javax.xml.namespace.QName</code>
-   *  @throws WebServiceException If this Service class does not
-   *          have access to the required WSDL metadata
-  **/
-  public Iterator<javax.xml.namespace.QName> getPorts() {
-      return delegate.getPorts();
-  }
+    /**
+     * Creates a <code>Dispatch</code> instance for use with JAXB
+     * generated objects.
+     *
+     * @param portName  Qualified name for the target service endpoint
+     * @param context The JAXB context used to marshall and unmarshall
+     * messages or message payloads.
+     * @param mode Controls whether the created dispatch instance is message
+     * or payload oriented, i.e. whether the user will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the user will work with
+     * SOAP messages or the contents of a SOAP body.
+     * @param features  A list of <code>WebServiceFeatures</code> to configure on the
+     *                proxy.  Supported features not in the <code>features
+     *                </code> parameter will have their default values.
+     *
+     * @return Dispatch instance.
+     * @throws WebServiceException If any error in the creation of
+     *                  the <code>Dispatch</code> object or if a
+     *                  feature is enabled that is not compatible with
+     *                  this port or is unsupported.
+     *
+     * @see javax.xml.bind.JAXBContext
+     * @see WebServiceFeature
+     *
+     * @since JAX-WS 2.1
+     **/
+    public Dispatch<Object> createDispatch(QName portName,
+            JAXBContext context, Service.Mode mode, WebServiceFeature... features) {
+        return delegate.createDispatch(portName, context, mode, features);
+    }
+
 
-  /** Gets the location of the WSDL document for this Service.
-   *
-   *  @return URL for the location of the WSDL document for
-   *          this service
-  **/
-  public java.net.URL getWSDLDocumentLocation() {
-      return delegate.getWSDLDocumentLocation();
-  }
+    /**
+     * Creates a <code>Dispatch</code> instance for use with JAXB
+     * generated objects. If there
+     * are any reference parameters in the
+     * <code>endpointReference</code>, then those reference
+     * parameters MUST appear as SOAP headers, indicating them to be
+     * reference parameters, on all messages sent to the endpoint.
+     * The <code>endpointReference's</code> address MUST be used
+     * for invocations on the endpoint.
+     * In the implementation of this method, the JAX-WS
+     * runtime system takes the responsibility of selecting a protocol
+     * binding (and a port) and configuring the dispatch accordingly from
+     * the WSDL associated with this <code>Service</code> instance or
+     * from the metadata from the <code>endpointReference</code>.
+     * If this <code>Service</code> instance has a WSDL and
+     * the <code>endpointReference</code>
+     * also has a WSDL in its metadata, then the WSDL from this instance
+     * MUST be used.
+     * If this <code>Service</code> instance does not have a WSDL and
+     * the <code>endpointReference</code> does have a WSDL, then the
+     * WSDL from the <code>endpointReference</code> MAY be used.
+     * An implementation MUST be able to retrieve the <code>portName</code> from the
+     * <code>endpointReference</code> metadata.
+     * <p>
+     * This method behavies the same as calling
+     * <pre>
+     * <code>dispatch = service.createDispatch(portName, context, mode, features);</code>
+     * </pre>
+     * where the <code>portName</code> is retrieved from the
+     * WSDL or <code>endpointReference</code> metadata.
+     *
+     * @param endpointReference  The <code>EndpointReference</code>
+     * for the target service endpoint that will be invoked by the
+     * returned <code>Dispatch</code> object.
+     * @param context The JAXB context used to marshall and unmarshall
+     * messages or message payloads.
+     * @param mode Controls whether the created dispatch instance is message
+     * or payload oriented, i.e. whether the user will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the user will work with
+     * SOAP messages or the contents of a SOAP body.
+     * @param features  An array of <code>WebServiceFeatures</code> to configure on the
+     *                proxy.  Supported features not in the <code>features
+     *                </code> parameter will have their default values.
+     *
+     * @return Dispatch instance
+     * @throws WebServiceException
+     *                  <UL>
+     *                    <li>If there is any missing WSDL metadata
+     *                      as required by this method.
+     *                    <li>If the <code>endpointReference</code> metadata does
+     *                    not match the <code>serviceName</code> or <code>portName</code>
+     *                    of a WSDL associated
+     *                    with this <code>Service</code> instance.
+     *                    <li>If the <code>portName</code> cannot be determined
+     *                    from the <code>EndpointReference</code> metadata.
+     *                    <li>If any error in the creation of
+     *                    the <code>Dispatch</code> object.
+     *                    <li>if a feature is enabled that is not
+     *                    compatible with this port or is unsupported.
+     *                  </UL>
+     *
+     * @see javax.xml.bind.JAXBContext
+     * @see WebServiceFeature
+     *
+     * @since JAX-WS 2.1
+    **/
+    public Dispatch<Object> createDispatch(EndpointReference endpointReference,
+            JAXBContext context, Service.Mode mode,
+            WebServiceFeature... features) {
+        return delegate.createDispatch(endpointReference, context, mode, features);
+    }
 
-  /**
-   * Returns the configured handler resolver.
-   *
-   *  @return HandlerResolver The <code>HandlerResolver</code> being
-   *          used by this <code>Service</code> instance, or <code>null</code>
-   *          if there isn't one.
-  **/
+    /**
+     * Gets the name of this service.
+     * @return Qualified name of this service
+     **/
+    public QName getServiceName() {
+        return delegate.getServiceName();
+    }
+
+    /**
+     * Returns an <code>Iterator</code> for the list of
+     * <code>QName</code>s of service endpoints grouped by this
+     * service
+     *
+     * @return Returns <code>java.util.Iterator</code> with elements
+     *         of type <code>javax.xml.namespace.QName</code>.
+     * @throws WebServiceException If this Service class does not
+     *         have access to the required WSDL metadata.
+     **/
+    public Iterator<javax.xml.namespace.QName> getPorts() {
+        return delegate.getPorts();
+    }
+
+    /**
+     * Gets the location of the WSDL document for this Service.
+     *
+     * @return URL for the location of the WSDL document for
+     *         this service.
+     **/
+    public java.net.URL getWSDLDocumentLocation() {
+        return delegate.getWSDLDocumentLocation();
+    }
+
+    /**
+     * Returns the configured handler resolver.
+     *
+     * @return HandlerResolver The <code>HandlerResolver</code> being
+     *         used by this <code>Service</code> instance, or <code>null</code>
+     *         if there isn't one.
+     **/
     public HandlerResolver getHandlerResolver() {
         return delegate.getHandlerResolver();
     }
 
-  /**
-   *  Sets the <code>HandlerResolver</code> for this <code>Service</code>
-   *  instance.
-   *  <p>
-   *  The handler resolver, if present, will be called once for each
-   *  proxy or dispatch instance that is created, and the handler chain
-   *  returned by the resolver will be set on the instance.
-   *
-   *  @param handlerResolver The <code>HandlerResolver</code> to use
-   *         for all subsequently created proxy/dispatch objects.
-   *
-   *  @see javax.xml.ws.handler.HandlerResolver
-  **/
-   public void setHandlerResolver(HandlerResolver handlerResolver) {
-       delegate.setHandlerResolver(handlerResolver);
-   }
+    /**
+     * Sets the <code>HandlerResolver</code> for this <code>Service</code>
+     * instance.
+     * <p>
+     * The handler resolver, if present, will be called once for each
+     * proxy or dispatch instance that is created, and the handler chain
+     * returned by the resolver will be set on the instance.
+     *
+     * @param handlerResolver The <code>HandlerResolver</code> to use
+     *        for all subsequently created proxy/dispatch objects.
+     *
+     * @see javax.xml.ws.handler.HandlerResolver
+     **/
+    public void setHandlerResolver(HandlerResolver handlerResolver) {
+        delegate.setHandlerResolver(handlerResolver);
+    }
 
-  /**
-   * Returns the executor for this <code>Service</code>instance.
-   *
-   * The executor is used for all asynchronous invocations that
-   * require callbacks.
-   *
-   * @return The <code>java.util.concurrent.Executor</code> to be
-   *         used to invoke a callback.
-   *
-   * @see java.util.concurrent.Executor
-   **/
-   public java.util.concurrent.Executor getExecutor() {
-       return delegate.getExecutor();
-   }
+    /**
+     * Returns the executor for this <code>Service</code>instance.
+     *
+     * The executor is used for all asynchronous invocations that
+     * require callbacks.
+     *
+     * @return The <code>java.util.concurrent.Executor</code> to be
+     *         used to invoke a callback.
+     *
+     * @see java.util.concurrent.Executor
+     **/
+    public java.util.concurrent.Executor getExecutor() {
+        return delegate.getExecutor();
+    }
 
-  /**
-   * Sets the executor for this <code>Service</code> instance.
-   *
-   * The executor is used for all asynchronous invocations that
-   * require callbacks.
-   *
-   * @param executor The <code>java.util.concurrent.Executor</code>
-   *        to be used to invoke a callback.
-   *
-   * @throws SecurityException If the instance does not support
-   *         setting an executor for security reasons (e.g. the
-   *         necessary permissions are missing).
-   *
-   * @see java.util.concurrent.Executor
-   **/
-   public void setExecutor(java.util.concurrent.Executor executor) {
-       delegate.setExecutor(executor);
-   }
+    /**
+     * Sets the executor for this <code>Service</code> instance.
+     *
+     * The executor is used for all asynchronous invocations that
+     * require callbacks.
+     *
+     * @param executor The <code>java.util.concurrent.Executor</code>
+     *        to be used to invoke a callback.
+     *
+     * @throws SecurityException If the instance does not support
+     *         setting an executor for security reasons (e.g. the
+     *         necessary permissions are missing).
+     *
+     * @see java.util.concurrent.Executor
+     **/
+    public void setExecutor(java.util.concurrent.Executor executor) {
+        delegate.setExecutor(executor);
+    }
 
-  /**
-   *  Create a <code>Service</code> instance.
-   *
-   *  The specified WSDL document location and service qualified name must
-   *  uniquely identify a <code>wsdl:service</code> element.
-   *
-   *  @param wsdlDocumentLocation URL for the WSDL document location
-   *                              for the service
-   *  @param serviceName QName for the service
-   *  @throws WebServiceException If any error in creation of the
-   *                     specified service
-  **/
-  public static Service create(
-                            java.net.URL wsdlDocumentLocation,
-                            QName serviceName)
-  {
-      return new Service(wsdlDocumentLocation, serviceName);
-  }
+    /**
+     * Creates a <code>Service</code> instance.
+     *
+     * The specified WSDL document location and service qualified name MUST
+     * uniquely identify a <code>wsdl:service</code> element.
+     *
+     * @param wsdlDocumentLocation <code>URL</code> for the WSDL document location
+     *                             for the service
+     * @param serviceName <code>QName</code> for the service
+     * @throws WebServiceException If any error in creation of the
+     *                    specified service.
+     **/
+    public static Service create(
+            java.net.URL wsdlDocumentLocation,
+            QName serviceName) {
+        return new Service(wsdlDocumentLocation, serviceName);
+    }
 
-  /**
-   *  Create a <code>Service</code> instance.
-   *
-   *  @param serviceName QName for the service
-   *  @throws WebServiceException If any error in creation of the
-   *                     specified service
-   */
-  public static Service create(QName serviceName) {
-      return new Service(null, serviceName);
-  }
+    /**
+     * Creates a <code>Service</code> instance.
+     *
+     * @param serviceName <code>QName</code> for the service
+     * @throws WebServiceException If any error in creation of the
+     *                    specified service
+     */
+    public static Service create(QName serviceName) {
+        return new Service(null, serviceName);
+    }
 }