[jboss-cvs] JBossAS SVN: r104893 - in projects/specs/trunk: jboss-jaxws-api_2.2_spec and 13 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon May 17 21:17:50 EDT 2010


Author: smcgowan at redhat.com
Date: 2010-05-17 21:17:48 -0400 (Mon, 17 May 2010)
New Revision: 104893

Added:
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/pom.xml
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Action.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/AsyncHandler.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Binding.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/BindingProvider.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/BindingType.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Dispatch.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Endpoint.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/EndpointContext.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/EndpointReference.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/FaultAction.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Holder.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/LogicalMessage.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ProtocolException.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Provider.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RequestWrapper.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RespectBinding.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RespectBindingFeature.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Response.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ResponseWrapper.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Service.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ServiceMode.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebEndpoint.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebFault.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceClient.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceContext.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceException.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceFeature.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServicePermission.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceProvider.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceRef.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceRefs.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/Handler.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/HandlerResolver.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/LogicalHandler.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/LogicalMessageContext.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/MessageContext.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/PortInfo.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/package.html
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/SOAPHandler.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/SOAPMessageContext.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/package.html
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/HTTPBinding.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/HTTPException.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/package.html
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/package.html
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/Addressing.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/AddressingFeature.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/MTOM.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/MTOMFeature.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/SOAPBinding.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/SOAPFaultException.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/package.html
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/FactoryFinder.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/Invoker.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/Provider.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/ServiceDelegate.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/WebServiceFeatureAnnotation.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpContext.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpExchange.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpHandler.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/package-info.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/package.html
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/package-info.java
   projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/package.html
Log:
JBEE-28 - add JAX WS 2.2 APIs

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/pom.xml
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/pom.xml	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/pom.xml	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,22 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  
+  <parent>
+    <groupId>org.jboss.spec</groupId>
+    <artifactId>jboss-specs-parent</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.jboss.spec.javax.xml.ws</groupId>
+  <artifactId>jboss-jaxws-api_2.2_spec</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>jar</packaging>
+  <name>Java API for XML Web Services 2.2</name>
+  <description>Java API for XML Web Services Version 2.2 classes</description>
+  
+  <scm>
+    <connection>scm:svn:http://anonsvn.jboss.org/repos/jbossas/projects/specs/trunk/jboss-jaxws-api_2.2_spec</connection>
+    <developerConnection>scm:svn:https://svn.jboss.org/repos/jbossas/projects/specs/trunk/jboss-jaxws-api_2.2_spec</developerConnection>
+    <url>http://fisheye.jboss.org/browse/JBossAS/projects/specs/trunk/jboss-jaxws-api_2.2_spec</url>
+  </scm>
+  
+</project>

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Action.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Action.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Action.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The <code>Action</code> annotation allows explicit association of a 
+ * WS-Addressing <code>Action</code> message addressing property with 
+ * <code>input</code>, <code>output</code>, and 
+ * <code>fault</code> messages of the mapped WSDL operation. 
+ * <p>
+ * This annotation can be specified on each method of a service endpoint interface.
+ * For such a method, the mapped operation in the generated WSDL's
+ * <code>wsam:Action</code> attribute on the WSDL <code>input</code>,
+ * <code>output</code> and <code>fault</code> messages of the WSDL <code>operation</code>
+ * is based upon which attributes of the <code>Action</code> annotation have been specified.
+ * For the exact computation of <code>wsam:Action</code> values for the messages, refer
+ * to the algorithm in the JAX-WS specification.
+ * <p>
+ * <b>Example 1</b>: Specify explicit values for <code>Action</code> message addressing property
+ * for <code>input</code> and <code>output</code> messages.
+ * 
+ * <pre>
+ * &#64;WebService(targetNamespace="http://example.com/numbers")
+ * public class AddNumbersImpl {
+ *     <b>&#64;Action(
+ *         input="http://example.com/inputAction",
+ *         output="http://example.com/outputAction")</b>
+ *     public int addNumbers(int number1, int number2) {
+ *         return number1 + number2;
+ *     }
+ * }
+ * </pre>
+ *
+ * The generated WSDL looks like:
+ * <pre>
+ *   &lt;definitions targetNamespace="http://example.com/numbers" ...>
+ *     ...
+ *     &lt;portType name="AddNumbersPortType">
+ *       &lt;operation name="AddNumbers">
+ *         &lt;input message="tns:AddNumbersInput" name="foo"
+ *           <b>wsam:Action="http://example.com/inputAction"</b>/>
+ *         &lt;output message="tns:AddNumbersOutput" name="bar"
+ *           <b>wsam:Action="http://example.com/outputAction"</b>/>
+ *       &lt;/operation>
+ *     &lt;/portType>
+ *     ...
+ *   &lt;/definitions>
+ * </pre>
+ *
+ * <p>
+ * <b>Example 2</b>: Specify explicit value for <code>Action</code> message addressing property
+ * for only the <code>input</code> message. The <code>wsam:Action</code> values for the
+ * WSDL <code>output</code> message are computed using the algorithm in the JAX-WS specification.
+ *
+ * <pre>
+ * &#64;WebService(targetNamespace="http://example.com/numbers")
+ * public class AddNumbersImpl {
+ *     <b>&#64;Action(input="http://example.com/inputAction")</b>
+ *     public int addNumbers(int number1, int number2) {
+ *         return number1 + number2;
+ *     }
+ * }
+ * </pre>
+ *
+ * The generated WSDL looks like:
+ * <pre>
+ *   &lt;definitions targetNamespace="http://example.com/numbers" ...>
+ *     ...
+ *     &lt;portType name="AddNumbersPortType">
+ *       &lt;operation name="AddNumbers">
+ *         &lt;input message="tns:AddNumbersInput" name="foo"
+ *           <b>wsam:Action="http://example.com/inputAction"</b> />
+ *         &lt;output message="tns:AddNumbersOutput" name="bar"
+ *           <b>wsam:Action="http://example.com/numbers/AddNumbersPortType/AddNumbersResponse"</b>/>
+ *       &lt;/operation>
+ *     &lt;/portType>
+ *     ...
+ *   &lt;/definitions>
+ * </pre>
+ *
+ * It is legitimate to specify an explicit value for <code>Action</code> message addressing property for
+ * <code>output</code> message only. In this case, <code>wsam:Action</code> value for the
+ * WSDL <code>input</code> message is computed using the algorithm in the JAX-WS specification.
+ *
+ * <p>
+ * <b>Example 3</b>: See {@link FaultAction} annotation for an example of
+ * how to specify an explicit value for <code>Action</code> message addressing property for the
+ * <code>fault</code> message.
+ *
+ * @see FaultAction
+ *
+ * @since JAX-WS 2.1
+ */
+
+ at Documented
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Action {
+    /**
+     * Explicit value of the WS-Addressing <code>Action</code> message addressing property for the <code>input</code>
+     * message of the operation. 
+     */
+    String input() default "";
+
+    /**
+     * Explicit value of the WS-Addressing <code>Action</code> message addressing property for the <code>output</code>
+     * message of the operation. 
+     */
+    String output() default "";
+    
+    /**
+     * Explicit value of the WS-Addressing <code>Action</code> message addressing property for the <code>fault</code>
+     * message(s) of the operation. Each exception that is mapped to a fault and requires an explicit WS-Addressing
+     * <code>Action</code> message addressing property, needs to be specified as a value in this property 
+     * using {@link FaultAction} annotation.
+     */
+    FaultAction[] fault() default { };
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/AsyncHandler.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/AsyncHandler.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/AsyncHandler.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+/** The <code>AsyncHandler</code> interface is implemented by
+ * clients that wish to receive callback notification of the completion of
+ * service endpoint operations invoked asynchronously.
+ *
+ *  @since JAX-WS 2.0
+**/
+public interface AsyncHandler<T> {
+
+    /** Called when the response to an asynchronous operation is available.
+     *
+     * @param res The response to the operation invocation.
+     *
+    **/
+    void handleResponse(Response<T> res);
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Binding.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Binding.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Binding.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+
+/** The <code>Binding</code> interface is the base interface
+ *  for JAX-WS protocol bindings.
+ *
+ *  @since JAX-WS 2.0
+**/
+public interface Binding {
+
+   /** 
+    * Gets a copy of the handler chain for a protocol binding instance.
+    * If the returned chain is modified a call to <code>setHandlerChain</code>
+    * is required to configure the binding instance with the new chain.
+    *
+    *  @return java.util.List&lt;Handler> Handler chain
+    */
+    public java.util.List<javax.xml.ws.handler.Handler> getHandlerChain();
+
+   /** 
+    * Sets the handler chain for the protocol binding instance.
+    *
+    *  @param chain    A List of handler configuration entries
+    *  @throws WebServiceException On an error in the configuration of
+    *                  the handler chain
+    *  @throws java.lang.UnsupportedOperationException If this
+    *          operation is not supported. This may be done to
+    *          avoid any overriding of a pre-configured handler
+    *          chain.
+    */
+    public void setHandlerChain(java.util.List<javax.xml.ws.handler.Handler> chain);
+
+    /** 
+     * Get the URI for this binding instance. 
+     *
+     * @return String The binding identifier for the port.
+     *    Never returns <code>null</code>
+     *
+     * @since JAX-WS 2.1
+     */
+    String getBindingID();      
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/BindingProvider.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/BindingProvider.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/BindingProvider.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.util.Map;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+
+/** 
+ * The <code>BindingProvider</code> interface provides access to the
+ * protocol binding and associated context objects for request and
+ * response message processing.
+ *
+ * @since JAX-WS 2.0
+ *
+ * @see javax.xml.ws.Binding
+ **/
+public interface BindingProvider {
+    /** 
+     * Standard property: User name for authentication.
+     * <p>Type: <code>java.lang.String</code>
+     **/
+    public static final String USERNAME_PROPERTY =
+            "javax.xml.ws.security.auth.username";
+    
+    /** 
+     * Standard property: Password for authentication.
+     * <p>Type: <code>java.lang.String</code>
+     **/
+    public static final String PASSWORD_PROPERTY =
+            "javax.xml.ws.security.auth.password";
+    
+    /** 
+     * Standard property: Target service endpoint address. The
+     * URI scheme for the endpoint address specification MUST
+     * correspond to the protocol/transport binding for the
+     * binding in use.
+     * <p>Type: <code>java.lang.String</code>
+     **/
+    public static final String ENDPOINT_ADDRESS_PROPERTY =
+            "javax.xml.ws.service.endpoint.address";
+    
+    /** 
+     * Standard property: This boolean property is used by a service
+     * client to indicate whether or not it wants to participate in
+     * a session with a service endpoint. If this property is set to
+     * <code>true</code>, the service client indicates that it wants the session
+     * to be maintained. If set to <code>false</code>, the session is not maintained.
+     * The default value for this property is <code>false</code>.
+     * <p>Type: <code>java.lang.Boolean</code>
+     **/
+    public static final String SESSION_MAINTAIN_PROPERTY =
+            "javax.xml.ws.session.maintain";
+    
+    /** 
+     * Standard property for SOAPAction. This boolean property  
+     * indicates whether or not the value of the 
+     * <code>javax.xml.ws.soap.http.soapaction.uri</code> property 
+     * is used for the value of the SOAPAction. The  
+     * default value of this property is <code>false</code> indicating 
+     * that the 
+     * <code>javax.xml.ws.soap.http.soapaction.uri</code> property
+     * is not used for the value of the SOAPAction, however, 
+     * if WS-Addressing is enabled, the default value is 
+     * <code>true</code>.
+     * 
+     * <p>Type: <code>java.lang.Boolean</code>
+     **/
+    public static final String SOAPACTION_USE_PROPERTY =
+            "javax.xml.ws.soap.http.soapaction.use";
+    
+    /**
+     * Standard property for SOAPAction. Indicates the SOAPAction  
+     * URI if the <code>javax.xml.ws.soap.http.soapaction.use</code>  
+     * property is set to <code>true</code>. If WS-Addressing  
+     * is enabled, this value will also be used for the value of the  
+     * WS-Addressing Action header.  If this property is not set, 
+     * the default SOAPAction and WS-Addressing Action will be sent.
+     *
+     * <p>Type: <code>java.lang.String</code>
+     **/
+    public static final String SOAPACTION_URI_PROPERTY =
+            "javax.xml.ws.soap.http.soapaction.uri";
+
+    /** 
+     * Get the context that is used to initialize the message context
+     * for request messages.
+     *
+     * Modifications to the request context do not affect the message context of
+     * either synchronous or asynchronous operations that have already been
+     * started.
+     *
+     * @return The context that is used in processing request messages.
+     **/
+    Map<String, Object> getRequestContext();
+    
+    /** 
+     * Get the context that resulted from processing a response message.
+     *
+     * The returned context is for the most recently completed synchronous
+     * operation. Subsequent synchronous operation invocations overwrite the
+     * response context. Asynchronous operations return their response context
+     * via the Response interface.
+     *
+     * @return The context that resulted from processing the latest
+     * response messages.
+     **/
+    Map<String, Object> getResponseContext();
+    
+    /** 
+     * Get the Binding for this binding provider.
+     *
+     * @return The Binding for this binding provider.
+     **/
+    Binding getBinding();
+    
+   
+    
+    /**
+     * Returns the <code>EndpointReference</code> associated with
+     * this <code>BindingProvider</code> instance.
+     * <p>
+     * If the Binding for this <code>bindingProvider</code> is
+     * either SOAP1.1/HTTP or SOAP1.2/HTTP, then a
+     * <code>W3CEndpointReference</code> MUST be returned.
+     *
+     * @return EndpointReference of the target endpoint associated with this
+     * <code>BindingProvider</code> instance.
+     *
+     * @throws java.lang.UnsupportedOperationException If this 
+     * <code>BindingProvider</code> uses the XML/HTTP binding.
+     *
+     * @see W3CEndpointReference
+     *
+     * @since JAX-WS 2.1
+     */
+    public EndpointReference getEndpointReference();
+    
+    
+    /**
+     * Returns the <code>EndpointReference</code> associated with
+     * this <code>BindingProvider</code> instance.  The instance
+     * returned will be of type <code>clazz</code>.
+     *
+     * @param clazz Specifies the type of <code>EndpointReference</code>
+     * that MUST be returned.
+
+     * @return EndpointReference of the target endpoint associated with this
+     * <code>BindingProvider</code> instance. MUST be of type
+     * <code>clazz</code>.
+
+     * @throws WebServiceException If the Class <code>clazz</code>
+     * is not supported by this implementation.
+     * @throws java.lang.UnsupportedOperationException If this 
+     * <code>BindingProvider</code> uses the XML/HTTP binding.
+     *
+     * @since JAX-WS 2.1
+     */
+    public <T extends EndpointReference> T getEndpointReference(Class<T> clazz);  
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/BindingType.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/BindingType.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/BindingType.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ *  The <code>BindingType</code> annotation is used to
+ *  specify the binding to use for a web service
+ *  endpoint implementation class.
+ *  <p>
+ *  This annotation may be overriden programmatically or via
+ *  deployment descriptors, depending on the platform in use.
+ *
+ *  @since JAX-WS 2.0
+ *
+ **/
+ at Target(ElementType.TYPE)
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface BindingType {
+     /**
+      * A binding identifier (a URI).
+      * If not specified, the default is the SOAP 1.1 / HTTP binding.
+      * <p>
+      * See the <code>SOAPBinding</code> and <code>HTTPBinding</code>
+      * for the definition of the standard binding identifiers.
+      *
+      * @see javax.xml.ws.Binding
+      * @see javax.xml.ws.soap.SOAPBinding#SOAP11HTTP_BINDING
+      * @see javax.xml.ws.soap.SOAPBinding#SOAP12HTTP_BINDING
+      * @see javax.xml.ws.http.HTTPBinding#HTTP_BINDING
+      */
+     String value() default "" ;
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Dispatch.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Dispatch.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Dispatch.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.util.concurrent.Future;
+
+/** The <code>Dispatch</code> interface provides support 
+ *  for the dynamic invocation of a service endpoint operations. The
+ *  <code>javax.xml.ws.Service</code>
+ *  interface acts as a factory for the creation of <code>Dispatch</code>
+ *  instances.
+ *
+ *  @since JAX-WS 2.0
+**/
+public interface Dispatch<T> extends BindingProvider {
+
+    /** Invoke a service operation synchronously.
+     * 
+     * The client is responsible for ensuring that the <code>msg</code> object
+     * when marshalled is formed according to the requirements of the protocol
+     * binding in use.
+     *
+     * @param msg An object that will form the message or payload of
+     *     the message used to invoke the operation.
+     * @return The response message or message payload to the
+     *     operation invocation.
+     * @throws WebServiceException If a fault occurs during communication with
+     *     the service
+     * @throws WebServiceException If there is any error in the configuration of
+     *     the <code>Dispatch</code> instance
+    **/
+    public T invoke(T msg);
+
+    /** Invoke a service operation asynchronously.  The
+     *  method returns without waiting for the response to the operation
+     *  invocation, the results of the operation are obtained by polling the
+     *  returned <code>Response</code>.
+     * <p>
+     * The client is responsible for ensuring that the <code>msg</code> object 
+     * when marshalled is formed according to the requirements of the protocol
+     * binding in use.
+     * 
+     * @param msg An object that will form the message or payload of
+     *     the message used to invoke the operation.
+     * @return The response message or message payload to the
+     *     operation invocation.
+     * @throws WebServiceException If there is any error in the configuration of
+     *     the <code>Dispatch</code> instance
+    **/
+    public Response<T> invokeAsync(T msg);
+
+    /** Invoke a service operation asynchronously. The
+     *  method returns without waiting for the response to the operation
+     *  invocation, the results of the operation are communicated to the client
+     *  via the passed in <code>handler</code>.
+     * <p>
+     * The client is responsible for ensuring that the <code>msg</code> object 
+     * when marshalled is formed according to the requirements of the protocol
+     * binding in use.
+     *
+     * @param msg An object that will form the message or payload of
+     *     the message used to invoke the operation.
+     * @param handler The handler object that will receive the
+     *     response to the operation invocation.
+     * @return A <code>Future</code> object that may be used to check the status
+     *     of the operation invocation. This object MUST NOT be used to try to
+     *     obtain the results of the operation - the object returned from
+     *     <code>Future&lt;?>.get()</code> is implementation dependent
+     *     and any use of it will result in non-portable behaviour.
+     * @throws WebServiceException If there is any error in the configuration of
+     *     the <code>Dispatch</code> instance
+    **/
+    public Future<?> invokeAsync(T msg, AsyncHandler<T> handler);
+
+    /** Invokes a service operation using the one-way
+     *  interaction mode. The operation invocation is logically non-blocking,
+     *  subject to the capabilities of the underlying protocol, no results
+     *  are returned. When
+     *  the protocol in use is SOAP/HTTP, this method MUST block until
+     *  an HTTP response code has been received or an error occurs.
+     * <p>
+     * The client is responsible for ensuring that the <code>msg</code> object 
+     * when marshalled is formed according to the requirements of the protocol
+     * binding in use.
+     *
+     * @param msg An object that will form the message or payload of
+     *     the message used to invoke the operation.
+     * @throws WebServiceException If there is any error in the configuration of
+     *     the <code>Dispatch</code> instance or if an error occurs during the
+     *     invocation.
+    **/
+    public void invokeOneWay(T msg);
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Endpoint.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Endpoint.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Endpoint.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,478 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.util.List;
+import java.util.Map;
+import javax.xml.ws.spi.Provider;
+import javax.xml.ws.spi.http.HttpContext;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+import org.w3c.dom.Element;
+
+
+/**
+ * A Web service endpoint.
+ *
+ * <p>Endpoints are created using the static methods defined in this
+ * class. An endpoint is always tied to one <code>Binding</code>
+ * and one implementor, both set at endpoint creation time.
+ *
+ * <p>An endpoint is either in a published or an unpublished state.
+ * The <code>publish</code> methods can be used to start publishing
+ * an endpoint, at which point it starts accepting incoming requests.
+ * Conversely, the <code>stop</code> method can be used to stop
+ * accepting incoming requests and take the endpoint down.
+ * Once stopped, an endpoint cannot be published again.
+ *
+ * <p>An <code>Executor</code> may be set on the endpoint in order
+ * to gain better control over the threads used to dispatch incoming
+ * requests. For instance, thread pooling with certain parameters
+ * can be enabled by creating a <code>ThreadPoolExecutor</code> and
+ * registering it with the endpoint.
+ *
+ * <p>Handler chains can be set using the contained <code>Binding</code>.
+ *
+ * <p>An endpoint may have a list of metadata documents, such as WSDL
+ * and XMLSchema documents, bound to it. At publishing time, the
+ * JAX-WS implementation will try to reuse as much of that metadata
+ * as possible instead of generating new ones based on the annotations
+ * present on the implementor.
+ *
+ * @since JAX-WS 2.0
+ *
+ * @see javax.xml.ws.Binding
+ * @see javax.xml.ws.BindingType
+ * @see javax.xml.ws.soap.SOAPBinding
+ * @see java.util.concurrent.Executor
+ *
+ **/
+public abstract class Endpoint {
+    
+    /** Standard property: name of WSDL service.
+     *  <p>Type: javax.xml.namespace.QName
+     **/
+    public static final String WSDL_SERVICE = "javax.xml.ws.wsdl.service";
+    
+    /** Standard property: name of WSDL port.
+     *  <p>Type: javax.xml.namespace.QName
+     **/
+    public static final String WSDL_PORT = "javax.xml.ws.wsdl.port";
+    
+    
+    /**
+     * Creates an endpoint with the specified implementor object. If there is
+     * a binding specified via a BindingType annotation then it MUST be used else
+     * a default of SOAP 1.1 / HTTP binding MUST be used.
+     * <p>
+     * The newly created endpoint may be published by calling
+     * one of the {@link javax.xml.ws.Endpoint#publish(String)} and
+     * {@link javax.xml.ws.Endpoint#publish(Object)} methods.
+     *
+     *
+     * @param implementor The endpoint implementor.
+     *
+     * @return The newly created endpoint.
+     *
+     **/
+    public static Endpoint create(Object implementor) {
+        return create(null, implementor);
+    }
+
+    /**
+     * Creates an endpoint with the specified implementor object and web
+     * service features. If there is a binding specified via a BindingType
+     * annotation then it MUST be used else a default of SOAP 1.1 / HTTP
+     * binding MUST be used.
+     * <p>
+     * The newly created endpoint may be published by calling
+     * one of the {@link javax.xml.ws.Endpoint#publish(String)} and
+     * {@link javax.xml.ws.Endpoint#publish(Object)} methods.
+     *
+     *
+     * @param implementor The endpoint implementor.
+     * @param features A list of WebServiceFeature to configure on the
+     *        endpoint. Supported features not in the <code>features
+     *        </code> parameter will have their default values.
+     *
+     *
+     * @return The newly created endpoint.
+     * @since JAX-WS 2.2
+     *
+     */
+    public static Endpoint create(Object implementor, WebServiceFeature ... features) {
+        return create(null, implementor, features);
+    }
+    
+    /**
+     * Creates an endpoint with the specified binding type and
+     * implementor object.
+     * <p>
+     * The newly created endpoint may be published by calling
+     * one of the {@link javax.xml.ws.Endpoint#publish(String)} and
+     * {@link javax.xml.ws.Endpoint#publish(Object)} methods.
+     *
+     * @param bindingId A URI specifying the binding to use. If the bindingID is
+     * <code>null</code> and no binding is specified via a BindingType
+     * annotation then a default SOAP 1.1 / HTTP binding MUST be used.
+     *
+     * @param implementor The endpoint implementor.
+     *
+     * @return The newly created endpoint.
+     *
+     **/
+    public static Endpoint create(String bindingId, Object implementor) {
+        return Provider.provider().createEndpoint(bindingId, implementor);
+    }
+
+    /**
+     * Creates an endpoint with the specified binding type,
+     * implementor object, and web service features.
+     * <p>
+     * The newly created endpoint may be published by calling
+     * one of the {@link javax.xml.ws.Endpoint#publish(String)} and
+     * {@link javax.xml.ws.Endpoint#publish(Object)} methods.
+     *
+     * @param bindingId A URI specifying the binding to use. If the bindingID is
+     * <code>null</code> and no binding is specified via a BindingType
+     * annotation then a default SOAP 1.1 / HTTP binding MUST be used.
+     *
+     * @param implementor The endpoint implementor.
+     *
+     * @param features A list of WebServiceFeature to configure on the
+     *        endpoint. Supported features not in the <code>features
+     *        </code> parameter will have their default values.
+     *
+     * @return The newly created endpoint.
+     * @since JAX-WS 2.2
+     */
+    public static Endpoint create(String bindingId, Object implementor, WebServiceFeature ... features) {
+        return Provider.provider().createEndpoint(bindingId, implementor, features);
+    }
+    
+    /**
+     * Returns the binding for this endpoint.
+     *
+     * @return The binding for this endpoint
+     **/
+    public abstract Binding getBinding();
+    
+    /**
+     * Returns the implementation object for this endpoint.
+     *
+     * @return The implementor for this endpoint
+     **/
+    public abstract Object getImplementor();
+    
+    /**
+     * Publishes this endpoint at the given address.
+     * The necessary server infrastructure will be created and
+     * configured by the JAX-WS implementation using some default configuration.
+     * In order to get more control over the server configuration, please
+     * use the {@link javax.xml.ws.Endpoint#publish(Object)} method instead.
+     *
+     * @param address A URI specifying the address to use. The address
+     *        MUST be compatible with the binding specified at the
+     *        time the endpoint was created.
+     *
+     * @throws java.lang.IllegalArgumentException 
+     *          If the provided address URI is not usable
+     *          in conjunction with the endpoint's binding.
+     *
+     * @throws java.lang.IllegalStateException 
+     *          If the endpoint has been published already or it has been stopped.
+     *
+     * @throws java.lang.SecurityException 
+     *          If a <code>java.lang.SecurityManger</code>
+     *          is being used and the application doesn't have the
+     *          <code>WebServicePermission("publishEndpoint")</code> permission.
+     **/
+    public abstract void publish(String address);
+    
+    /**
+     * Creates and publishes an endpoint for the specified implementor
+     * object at the given address.
+     * <p>
+     * The necessary server infrastructure will be created and
+     * configured by the JAX-WS implementation using some default configuration.
+     *
+     * In order to get more control over the server configuration, please
+     * use the {@link javax.xml.ws.Endpoint#create(String,Object)} and
+     * {@link javax.xml.ws.Endpoint#publish(Object)} methods instead.
+     *
+     * @param address A URI specifying the address and transport/protocol
+     *        to use. A http: URI MUST result in the SOAP 1.1/HTTP
+     *        binding being used. Implementations may support other
+     *        URI schemes.
+     * @param implementor The endpoint implementor.
+     *
+     * @return The newly created endpoint.
+     *
+     * @throws java.lang.SecurityException 
+     *          If a <code>java.lang.SecurityManger</code>
+     *          is being used and the application doesn't have the
+     *          <code>WebServicePermission("publishEndpoint")</code> permission.
+     *
+     **/
+    public static Endpoint publish(String address, Object implementor) {
+        return Provider.provider().createAndPublishEndpoint(address, implementor);
+    }
+
+    /**
+     * Creates and publishes an endpoint for the specified implementor
+     * object at the given address. The created endpoint is configured
+     * with the web service features.
+     * <p>
+     * The necessary server infrastructure will be created and
+     * configured by the JAX-WS implementation using some default configuration.
+     *
+     * In order to get more control over the server configuration, please
+     * use the {@link javax.xml.ws.Endpoint#create(String,Object)} and
+     * {@link javax.xml.ws.Endpoint#publish(Object)} methods instead.
+     *
+     * @param address A URI specifying the address and transport/protocol
+     *        to use. A http: URI MUST result in the SOAP 1.1/HTTP
+     *        binding being used. Implementations may support other
+     *        URI schemes.
+     * @param implementor The endpoint implementor.
+     * @param features A list of WebServiceFeature to configure on the
+     *        endpoint. Supported features not in the <code>features
+     *        </code> parameter will have their default values.
+     * @return The newly created endpoint.
+     *
+     * @throws java.lang.SecurityException
+     *          If a <code>java.lang.SecurityManger</code>
+     *          is being used and the application doesn't have the
+     *          <code>WebServicePermission("publishEndpoint")</code> permission.
+     * @since JAX-WS 2.2
+     */
+    public static Endpoint publish(String address, Object implementor, WebServiceFeature ... features) {
+        return Provider.provider().createAndPublishEndpoint(address, implementor, features);
+    }
+
+
+    /**
+     * Publishes this endpoint at the provided server context.
+     * A server context encapsulates the server infrastructure
+     * and addressing information for a particular transport.
+     * For a call to this method to succeed, the server context
+     * passed as an argument to it MUST be compatible with the
+     * endpoint's binding.
+     *
+     * @param serverContext An object representing a server
+     *           context to be used for publishing the endpoint.
+     *
+     * @throws java.lang.IllegalArgumentException 
+     *              If the provided server context is not
+     *              supported by the implementation or turns
+     *              out to be unusable in conjunction with the
+     *              endpoint's binding.
+     *
+     * @throws java.lang.IllegalStateException 
+     *         If the endpoint has been published already or it has been stopped.
+     *
+     * @throws java.lang.SecurityException 
+     *          If a <code>java.lang.SecurityManger</code>
+     *          is being used and the application doesn't have the
+     *          <code>WebServicePermission("publishEndpoint")</code> permission.
+     **/
+    public abstract void publish(Object serverContext);
+
+    /**
+     * Publishes this endpoint at the provided server context.
+     * A server context encapsulates the server infrastructure
+     * and addressing information for a particular transport.
+     * For a call to this method to succeed, the server context
+     * passed as an argument to it MUST be compatible with the
+     * endpoint's binding.
+     *
+     * <p>
+     * This is meant for container developers to publish the
+     * the endpoints portably and not intended for the end
+     * developers.
+     *
+     *
+     * @param serverContext An object representing a server
+     *           context to be used for publishing the endpoint.
+     *
+     * @throws java.lang.IllegalArgumentException
+     *              If the provided server context is not
+     *              supported by the implementation or turns
+     *              out to be unusable in conjunction with the
+     *              endpoint's binding.
+     *
+     * @throws java.lang.IllegalStateException
+     *         If the endpoint has been published already or it has been stopped.
+     *
+     * @throws java.lang.SecurityException
+     *          If a <code>java.lang.SecurityManger</code>
+     *          is being used and the application doesn't have the
+     *          <code>WebServicePermission("publishEndpoint")</code> permission.
+     * @since JAX-WS 2.2
+     */
+    public void publish(HttpContext serverContext) {
+        throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
+    }
+    
+    /**
+     * Stops publishing this endpoint.
+     *
+     * If the endpoint is not in a published state, this method
+     * has no effect.
+     *
+     **/
+    public abstract void stop();
+    
+    /**
+     * Returns true if the endpoint is in the published state.
+     *
+     * @return <code>true</code> if the endpoint is in the published state.
+     **/
+    public abstract boolean isPublished();
+    
+    /**
+     * Returns a list of metadata documents for the service.
+     *
+     * @return <code>List&lt;javax.xml.transform.Source&gt;</code> A list of metadata documents for the service
+     **/
+    public abstract List<javax.xml.transform.Source> getMetadata();
+    
+    /**
+     * Sets the metadata for this endpoint.
+     *
+     * @param metadata A list of XML document sources containing
+     *           metadata information for the endpoint (e.g.
+     *           WSDL or XML Schema documents)
+     *
+     * @throws java.lang.IllegalStateException  If the endpoint
+     *         has already been published.
+     **/
+    public abstract void setMetadata(List<javax.xml.transform.Source> metadata);
+    
+    /**
+     * Returns the executor for this <code>Endpoint</code>instance.
+     *
+     * The executor is used to dispatch an incoming request to
+     * the implementor object.
+     *
+     * @return The <code>java.util.concurrent.Executor</code> to be
+     *         used to dispatch a request.
+     *
+     * @see java.util.concurrent.Executor
+     **/
+    public abstract java.util.concurrent.Executor getExecutor();
+    
+    /**
+     * Sets the executor for this <code>Endpoint</code> instance.
+     *
+     * The executor is used to dispatch an incoming request to
+     * the implementor object.
+     *
+     * If this <code>Endpoint</code> is published using the
+     * <code>publish(Object)</code> method and the specified server
+     * context defines its own threading behavior, the executor
+     * may be ignored.
+     *
+     * @param executor The <code>java.util.concurrent.Executor</code>
+     *        to be used to dispatch a request.
+     *
+     * @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 abstract void setExecutor(java.util.concurrent.Executor executor);
+    
+    
+    /**
+     * Returns the property bag for this <code>Endpoint</code> instance.
+     *
+     * @return Map&lt;String,Object&gt; The property bag
+     *         associated with this instance.
+     **/
+    public abstract Map<String,Object> getProperties();
+    
+    /**
+     * Sets the property bag for this <code>Endpoint</code> instance.
+     *
+     * @param properties The property bag associated with
+     *        this instance.
+     **/
+    public abstract void setProperties(Map<String,Object> properties);
+    
+    /**
+     * Returns the <code>EndpointReference</code> associated with
+     * this <code>Endpoint</code> instance.
+     * <p>
+     * If the Binding for this <code>bindingProvider</code> is
+     * either SOAP1.1/HTTP or SOAP1.2/HTTP, then a
+     * <code>W3CEndpointReference</code> MUST be returned.
+     *
+     * @param referenceParameters Reference parameters to be associated with the
+     * returned <code>EndpointReference</code> instance.
+     * @return EndpointReference of this <code>Endpoint</code> instance.
+     * If the returned <code>EndpointReference</code> is of type
+     * <code>W3CEndpointReference</code> then it MUST contain the
+     * the specified <code>referenceParameters</code>.
+
+     * @throws WebServiceException If any error in the creation of
+     * the <code>EndpointReference</code> or if the <code>Endpoint</code> is 
+     * not in the published state.
+     * @throws UnsupportedOperationException If this <code>BindingProvider</code>
+     * uses the XML/HTTP binding.
+     *
+     * @see W3CEndpointReference
+     *
+     * @since JAX-WS 2.1
+     **/
+    public abstract EndpointReference getEndpointReference(Element... referenceParameters);
+    
+    
+    /**
+     * Returns the <code>EndpointReference</code> associated with
+     * this <code>Endpoint</code> instance.
+     *
+     * @param clazz Specifies the type of EndpointReference  that MUST be returned.
+     * @param referenceParameters Reference parameters to be associated with the
+     * returned <code>EndpointReference</code> instance.
+     * @return EndpointReference of type <code>clazz</code> of this 
+     * <code>Endpoint<code> instance.
+     * If the returned <code>EndpointReference</code> is of type
+     * <code>W3CEndpointReference</code> then it MUST contain the
+     * the specified <code>referenceParameters</code>.
+
+     * @throws WebServiceException If any error in the creation of
+     * the <code>EndpointReference</code> or if the <code>Endpoint</code> is 
+     * not in the published state or if the <code>clazz</code> is not a supported
+     * <code>EndpointReference</code> type.
+     * @throws UnsupportedOperationException If this <code>BindingProvider</code>
+     * uses the XML/HTTP binding.
+     *
+     *
+     * @since JAX-WS 2.1
+     **/
+    public abstract <T extends EndpointReference> T getEndpointReference(Class<T> clazz,
+            Element... referenceParameters);
+
+    /**
+     * By settng a <code>EndpointContext</code>, JAX-WS runtime knows about
+     * addresses of other endpoints in an application. If multiple endpoints
+     * share different ports of a WSDL, then the multiple port addresses
+     * are patched when the WSDL is accessed.
+     *
+     * <p>
+     * This needs to be set before publishing the endpoints.
+     *
+     * @param ctxt that is shared for multiple endpoints
+     * @throws java.lang.IllegalStateException
+     *        If the endpoint has been published already or it has been stopped.
+     *
+     * @since JAX-WS 2.2
+     */
+    public void setEndpointContext(EndpointContext ctxt) {
+        throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
+    }
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/EndpointContext.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/EndpointContext.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/EndpointContext.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+package javax.xml.ws;
+
+import javax.xml.ws.Endpoint;
+import java.util.Set;
+
+/**
+ * <code>EndpointContext</code> allows multiple endpoints in an application
+ * to share any information. For example, servlet application's war may
+ * contain multiple endpoints and these endpoints can get addresses of each
+ * other by sharing this context. If multiple endpoints share different
+ * ports of a WSDL, then the multiple port addresses can be patched
+ * when the WSDL is accessed. It also allows all endpoints to share any
+ * other runtime information.
+ *
+ * <p>
+ * This needs to be set by using {@link Endpoint#setEndpointContext}
+ * before {@link Endpoint#publish} methods.
+ *
+ * @author Jitendra Kotamraju
+ * @since JAX-WS 2.2
+ */
+public abstract class EndpointContext {
+
+    /**
+     * This gives list of endpoints in an application. For e.g in
+     * servlet container, a war file may contain multiple endpoints.
+     * In case of http, these endpoints are hosted on the same http
+     * server.
+     *
+     * @return list of all endpoints in an application
+     */
+    public abstract Set<Endpoint> getEndpoints();
+
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/EndpointReference.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/EndpointReference.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/EndpointReference.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,172 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.ws.spi.Provider;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+import java.io.StringWriter;
+
+/**
+ * This class represents an WS-Addressing EndpointReference
+ * which is a remote reference to a web service endpoint. 
+ * See <a href="http://www.w3.org/TR/2006/REC-ws-addr-core-20060509/">
+ * Web Services Addressing 1.0 - Core</a> 
+ * for more information on WS-Addressing EndpointReferences.
+ * <p>  
+ * This class is immutable as the typical web service developer
+ * need not be concerned with its contents.  The web service
+ * developer should use this class strictly as a mechanism to 
+ * reference a remote web service endpoint. See the {@link Service} APIs 
+ * that clients can use to that utilize an <code>EndpointReference</code>. 
+ * See the {@link javax.xml.ws.Endpoint}, and 
+ * {@link javax.xml.ws.BindingProvider} APIs on how 
+ * <code>EndpointReferences</code> can be created for published 
+ * endpoints.
+ * <p>
+ * Concrete implementations of this class will represent
+ * an <code>EndpointReference</code> for a particular version of Addressing.
+ * For example the {@link W3CEndpointReference} is for use
+ * with W3C Web Services Addressing 1.0 - Core Recommendation. 
+ * If JAX-WS implementors need to support different versions
+ * of addressing, they should write their own 
+ * <code>EndpointReference</code> subclass for that version.
+ * This will allow a JAX-WS implementation to create
+ * a vendor specific <code>EndpointReferences</code> that the
+ * vendor can use to flag a different version of
+ * addressing.
+ * <p>
+ * Web service developers that wish to pass or return 
+ * <code>EndpointReference</code> in Java methods in an
+ * SEI should use
+ * concrete instances of an <code>EndpointReference</code> such
+ * as the <code>W3CEndpointReference</code>.  This way the 
+ * schema mapped from the SEI will be more descriptive of the
+ * type of endpoint reference being passed.
+ * <p>
+ * JAX-WS implementors are expected to extract the XML infoset
+ * from an <CODE>EndpointReferece</CODE> using the 
+ * <code>{@link EndpointReference#writeTo}</code>
+ * method.
+ * <p>
+ * JAXB will bind this class to xs:anyType. If a better binding
+ * is desired, web services developers should use a concrete
+ * subclass such as {@link W3CEndpointReference}.
+ *
+ * @see W3CEndpointReference
+ * @see Service
+ * @since JAX-WS 2.1
+ */
+ at XmlTransient // to treat this class like Object as far as databinding is concerned (proposed JAXB 2.1 feature)
+public abstract class EndpointReference {
+    //
+    //Default constructor to be only called by derived types.
+    //
+    protected EndpointReference(){}
+
+    /**
+     * Factory method to read an EndpointReference from the infoset contained in
+     * <code>eprInfoset</code>. This method delegates to the vendor specific
+     * implementation of the {@link javax.xml.ws.spi.Provider#readEndpointReference} method.
+     *
+     * @param eprInfoset The <code>EndpointReference<code> infoset to be unmarshalled
+     *
+     * @return the EndpointReference unmarshalled from <code>eprInfoset</code>
+     *    never <code>null</code>
+     * @throws WebServiceException
+     *    if an error occurs while creating the
+     *    <code>EndpointReference</code> from the <CODE>eprInfoset</CODE>
+     * @throws java.lang.IllegalArgumentException
+     *     if the <code>null</code> <code>eprInfoset</tt> value is given.
+     */
+    public static EndpointReference readFrom(Source eprInfoset) {
+        return Provider.provider().readEndpointReference(eprInfoset);
+    }
+
+    /**
+     * write this <code>EndpointReference</code> to the specified infoset format
+     *
+     * @param result for writing infoset
+     * @throws WebServiceException
+     *   if there is an error writing the
+     *   <code>EndpointReference</code> to the specified <code>result</code>.
+     *
+     * @throws java.lang.IllegalArgumentException
+     *      If the <code>null</code> <code>result</code> value is given.
+     */
+    public abstract void writeTo(Result result);
+
+
+    /**
+     * The <code>getPort</code> method returns a proxy. If there
+     * are any reference parameters in the 
+     * <code>EndpointReference</code> instance, then those reference
+     * parameters MUST appear as SOAP headers, indicating them to be
+     * reference parameters, on all messages sent to the endpoint.
+     * The parameter  <code>serviceEndpointInterface</code> specifies
+     * the service endpoint interface that is supported by the
+     * returned proxy.
+     * The <code>EndpointReference</code> instance specifies the
+     * endpoint that will be invoked 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 Metadata from this <code>EndpointReference</code> or from
+     * annotations on the <code>serviceEndpointInterface</code>.  For this method
+     * to successfully return a proxy, WSDL metadata MUST be available and the
+     * <code>EndpointReference</code> instance MUST contain an implementation understood
+     * <code>serviceName</code> metadata.
+     * <p>
+     * Because this port is not created from a <code>Service</code> object, handlers 
+     * will not automatically be configured, and the <code>HandlerResolver</code> 
+     * and <code>Executor</code> cannot be get or set for this port. The 
+     * <code>BindingProvider().getBinding().setHandlerChain()</code>
+     * method can be used to manually configure handlers for this port.
+     *
+     *
+     * @param serviceEndpointInterface Service endpoint interface
+     * @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 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 this
+     *                      <code>endpointReference</code>
+     *                      is invalid
+     *                  <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 java.lang.reflect.Proxy
+     * @see WebServiceFeature
+     **/
+    public <T> T getPort(Class<T> serviceEndpointInterface,
+                         WebServiceFeature... features) {
+        return Provider.provider().getPort(this, serviceEndpointInterface,
+                                           features);
+    }
+
+    /**
+     * Displays EPR infoset for debugging convenience.
+     */
+    public String toString() {
+        StringWriter w = new StringWriter();
+        writeTo(new StreamResult(w));
+        return w.toString();
+    }
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/FaultAction.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/FaultAction.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/FaultAction.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The <code>FaultAction</code> annotation is used inside an {@link Action}
+ * annotation to allow an explicit association of a WS-Addressing 
+ * <code>Action</code> message addressing property with the <code>fault</code> 
+ * messages of the WSDL operation mapped from the exception class.
+ * <p>
+ * The <code>wsam:Action</code> attribute value in the <code>fault</code>
+ * message in the generated WSDL operation mapped for <code>className</code>
+ * class is equal to the corresponding value in the <code>FaultAction</code>.
+ * For the exact computation of <code>wsam:Action</code> values for the
+ * fault messages, refer to the algorithm in the JAX-WS specification.
+ *
+ * <p>
+ * <b>Example 1</b>: Specify explicit values for <code>Action</code> message addressing
+ * property for the <code>input</code>, <code>output</code> and <code>fault</code> message
+ * if the Java method throws only one service specific exception.
+ *
+ * <pre>
+ * &#64;WebService(targetNamespace="http://example.com/numbers")
+ * public class AddNumbersImpl {
+ *     &#64;Action(
+ *         fault = {
+ *             <b>&#64;FaultAction(className=AddNumbersException.class, value="http://example.com/faultAction")</b>
+ *         })
+ *     public int addNumbers(int number1, int number2)
+ *         throws AddNumbersException {
+ *         return number1 + number2;
+ *     }
+ * }
+ * </pre>
+ *
+ * The generated WSDL looks like:
+ *
+ * <pre>
+ *   &lt;definitions targetNamespace="http://example.com/numbers" ...>
+ *     ...
+ *     &lt;portType name="AddNumbersPortType">
+ *       &lt;operation name="AddNumbers">
+ *         ...
+ *         &lt;fault message="tns:AddNumbersException" name="AddNumbersException"
+ *           <b>wsam:Action="http://example.com/faultAction"</b>/>
+ *       &lt;/operation>
+ *     &lt;/portType>
+ *     ...
+ *   &lt;/definitions>
+ * </pre>
+ *
+ * <p>
+ * Example 2: Here is an example that shows if the explicit value for <code>Action</code>
+ * message addressing property for the service specific exception is not present.
+ *
+ * <pre>
+ * &#64;WebService(targetNamespace="http://example.com/numbers")
+ * public class AddNumbersImpl {
+ *     public int addNumbers(int number1, int number2)
+ *         throws AddNumbersException {
+ *         return number1 + number2;
+ *     }
+ * }
+ * </pre>
+ *
+ * The generated WSDL looks like:
+ *
+ * <pre>
+ *   &lt;definitions targetNamespace="http://example.com/numbers" ...>
+ *     ...
+ *     &lt;portType name="AddNumbersPortType">
+ *       &lt;operation name="AddNumbers">
+ *         ...
+ *         &lt;fault message="tns:addNumbersFault" name="InvalidNumbers"
+ *           <b>wsam:Action="http://example.com/numbers/AddNumbersPortType/AddNumbers/Fault/AddNumbersException"</b>/>
+ *       &lt;/operation>
+ *     &lt;/portType>
+ *     ...
+ *   &lt;/definitions>
+ * </pre>
+ *
+ * <p>
+ * Example 3: Here is an example that shows how to specify explicit values for <code>Action</code>
+ * message addressing property if the Java method throws more than one service specific exception.
+ *
+ * <pre>
+ * &#64;WebService(targetNamespace="http://example.com/numbers")
+ * public class AddNumbersImpl {
+ *     &#64;Action(
+ *         fault = {
+ *             <b>&#64;FaultAction(className=AddNumbersException.class, value="http://example.com/addFaultAction"),
+ *             &#64;FaultAction(className=TooBigNumbersException.class, value="http://example.com/toobigFaultAction")</b>
+ *         })
+ *     public int addNumbers(int number1, int number2)
+ *         throws AddNumbersException, TooBigNumbersException {
+ *         return number1 + number2;
+ *     }
+ * }
+ * </pre>
+ *
+ * The generated WSDL looks like:
+ *
+ * <pre>
+ *   &lt;definitions targetNamespace="http://example.com/numbers" ...>
+ *     ...
+ *     &lt;portType name="AddNumbersPortType">
+ *       &lt;operation name="AddNumbers">
+ *         ...
+ *         &lt;fault message="tns:addNumbersFault" name="AddNumbersException"
+ *           <b>wsam:Action="http://example.com/addFaultAction"</b>/>
+ *         &lt;fault message="tns:tooBigNumbersFault" name="TooBigNumbersException"
+ *           <b>wsam:Action="http://example.com/toobigFaultAction"</b>/>
+ *       &lt;/operation>
+ *     &lt;/portType>
+ *     ...
+ *   &lt;/definitions>
+ * </pre>
+ *
+ * @since JAX-WS 2.1
+ */
+
+ at Documented
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface FaultAction {
+    /**
+     * Name of the exception class
+     */
+    Class<? extends Exception> className();
+
+    /**
+     * Value of WS-Addressing <code>Action</code> message addressing property for the exception
+     */
+    String value() default "";
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Holder.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Holder.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Holder.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.io.Serializable;
+
+/**
+ * Holds a value of type <code>T</code>.
+ *
+ * @since JAX-WS 2.0
+ */
+public final class Holder<T> implements Serializable {
+
+    private static final long serialVersionUID = 2623699057546497185L;
+
+    /**
+     * The value contained in the holder.
+     */
+    public T value;
+
+    /**
+     * Creates a new holder with a <code>null</code> value.
+     */
+    public Holder() {
+    }
+
+    /**
+     * Create a new holder with the specified value.
+     *
+     * @param value The value to be stored in the holder.
+     */
+    public Holder(T value) {
+        this.value = value;
+    }
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/LogicalMessage.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/LogicalMessage.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/LogicalMessage.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import javax.xml.transform.Source;
+import javax.xml.bind.JAXBContext;
+
+/** The <code>LogicalMessage</code> interface represents a
+ *  protocol agnostic XML message and contains methods that
+ *  provide access to the payload of the message.
+ *
+ *  @since JAX-WS 2.0
+**/
+public interface LogicalMessage {
+
+  /** Gets the message payload as an XML source, may be called
+   *  multiple times on the same LogicalMessage instance, always
+   *  returns a new <code>Source</code> that may be used to retrieve the entire
+   *  message payload.
+   *
+   *  <p>If the returned <code>Source</code> is an instance of 
+   *  <code>DOMSource</code>, then
+   *  modifications to the encapsulated DOM tree change the message
+   *  payload in-place, there is no need to susequently call
+   *  <code>setPayload</code>. Other types of <code>Source</code> provide only
+   *  read access to the message payload.
+   *
+   *  @return The contained message payload; returns <code>null</code> if no 
+   *          payload is present in this message.
+  **/
+  public Source getPayload();
+
+  /** Sets the message payload
+   *
+   *  @param  payload message payload
+   *  @throws WebServiceException If any error during the setting
+   *          of the payload in this message
+   *  @throws java.lang.UnsupportedOperationException If this
+   *          operation is not supported
+  **/
+  public void setPayload(Source payload);
+
+  /** Gets the message payload as a JAXB object. Note that there is no
+   *  connection between the returned object and the message payload,
+   *  changes to the payload require calling <code>setPayload</code>.
+   *
+   *  @param  context The JAXBContext that should be used to unmarshall
+   *          the message payload
+   *  @return The contained message payload; returns <code>null</code> if no 
+   *          payload is present in this message
+   *  @throws WebServiceException If an error occurs when using a supplied
+   *     JAXBContext to unmarshall the payload. The cause of
+   *     the WebServiceException is the original JAXBException.
+  **/
+  public Object getPayload(JAXBContext context);
+
+  /** Sets the message payload
+   *
+   *  @param  payload message payload
+   *  @param  context The JAXBContext that should be used to marshall 
+   *          the payload
+   *  @throws java.lang.UnsupportedOperationException If this
+   *          operation is not supported
+   *  @throws WebServiceException If an error occurs when using the supplied
+   *     JAXBContext to marshall the payload. The cause of
+   *     the WebServiceException is the original JAXBException.
+  **/
+  public void setPayload(Object payload, JAXBContext context);
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ProtocolException.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ProtocolException.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ProtocolException.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+/** The <code>ProtocolException</code> class is a
+ *  base class for exceptions related to a specific protocol binding. Subclasses
+ *  are used to communicate protocol level fault information to clients and may
+ *  be used on the server to control the protocol specific fault representation.
+ *
+ *  @since JAX-WS 2.0
+**/
+public class ProtocolException extends WebServiceException {
+    /**
+     * Constructs a new protocol exception with <code>null</code> as its detail message. The
+     * cause is not initialized, and may subsequently be initialized by a call
+     * to <code>Throwable.initCause(java.lang.Throwable)</code>.
+     */
+    public ProtocolException() {
+        super();
+    }
+
+    /**
+     * Constructs a new protocol exception with the specified detail message.
+     * The cause is not initialized, and may subsequently be initialized by a
+     * call to <code>Throwable.initCause(java.lang.Throwable)</code>.
+     *
+     * @param message the detail message. The detail message is saved for later
+     *   retrieval by the Throwable.getMessage() method.
+     */
+    public ProtocolException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructs a new runtime exception with the specified detail message and
+     * cause.
+     *
+     * Note that the detail message associated with  cause is not automatically
+     * incorporated in  this runtime exception's detail message.
+     *
+     * @param message the detail message (which is saved for later retrieval  by
+     *   the Throwable.getMessage() method).
+     * @param cause the cause (which is saved for later retrieval by the
+     * <code>Throwable.getCause()</code> method). (A <code>null</code> value is  permitted, and indicates
+     * that the cause is nonexistent or  unknown.)
+     */
+    public ProtocolException(String message,  Throwable cause) {
+        super(message, cause);
+    }
+
+    /**
+     * Constructs a new runtime exception with the specified cause and a  detail
+     * message of <code>(cause==null ? null : cause.toString())</code>  (which typically
+     * contains the class and detail message of  cause). This constructor is
+     * useful for runtime exceptions  that are little more than wrappers for
+     * other throwables.
+     *
+     * @param cause the cause (which is saved for later retrieval by the
+     * <code>Throwable.getCause()</code> method). (A <code>null</code> value is  permitted, and indicates
+     * that the cause is nonexistent or  unknown.)
+     */
+    public ProtocolException(Throwable cause) {
+        super(cause);
+    }
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Provider.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Provider.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Provider.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+/**
+ *  <p>Service endpoints may implement the <code>Provider</code>
+ *  interface as a dynamic alternative to an SEI.
+ *
+ *  <p>Implementations are required to support <code>Provider&lt;Source&gt;</code>,
+ *  <code>Provider&lt;SOAPMessage&gt;</code> and
+ *  <code>Provider&lt;DataSource&gt;</code>, depending on the binding
+ *  in use and the service mode.
+ *
+ *  <p>The <code>ServiceMode</code> annotation can be used to control whether
+ *  the <code>Provider</code> instance will receive entire protocol messages
+ *  or just message payloads.
+ *
+ *  @since JAX-WS 2.0
+ *
+ *  @see javax.xml.transform.Source
+ *  @see javax.xml.soap.SOAPMessage
+ *  @see javax.xml.ws.ServiceMode
+**/
+public interface Provider<T> {
+
+  /** Invokes an operation occording to the contents of the request
+   *  message.
+   *
+   *  @param  request The request message or message payload.
+   *  @return The response message or message payload. May be <code>null</code> if
+              there is no response.
+   *  @throws WebServiceException If there is an error processing request.
+   *          The cause of the <code>WebServiceException</code> may be set to a subclass
+   *          of <code>ProtocolException</code> to control the protocol level
+   *          representation of the exception.
+   *  @see javax.xml.ws.handler.MessageContext
+   *  @see javax.xml.ws.ProtocolException
+  **/
+  public T invoke(T request);
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RequestWrapper.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RequestWrapper.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RequestWrapper.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Used to annotate methods in the Service Endpoint Interface with the request 
+ * wrapper bean to be used at runtime. The default value of the <code>localName</code> is 
+ * the <code>operationName</code>, as defined in <code>WebMethod</code> annotation and the
+ * <code>targetNamespace</code> is the target namespace of the SEI.
+ * <p> When starting from Java this annotation is used resolve
+ * overloading conflicts in document literal mode. Only the <code>className</code>
+ * is required in this case.
+ * 
+ *  @since JAX-WS 2.0
+ **/
+
+ at Target(ElementType.METHOD)
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface RequestWrapper {
+    /**
+     * Element's local name.
+     */
+    public String localName() default "";
+
+    /**
+     * Element's namespace name.
+     */
+    public String targetNamespace() default "";
+
+    /**
+     * Request wrapper bean name.
+     */
+    public String className() default "";
+
+    /**
+     * wsdl:part name for the wrapper part
+     *
+     * @since JAX-WS 2.2
+     */
+    public String partName() default "";
+
+}
+

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RespectBinding.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RespectBinding.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RespectBinding.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
+
+
+/**
+ * This feature clarifies the use of the <code>wsdl:binding</code>
+ * in a JAX-WS runtime.
+ * <p>
+ * This annotation MUST only be used in conjunction the
+ * <code>javax.jws.WebService</code>, {@link WebServiceProvider},
+ * {@link WebServiceRef} annotations.
+ * When used with the <code>javax.jws.WebService</code> annotation this
+ * annotation MUST only be used on the service endpoint implementation
+ * class.
+ * When used with a <code>WebServiceRef</code> annotation, this annotation
+ * MUST only be used when a proxy instance is created. The injected SEI
+ * proxy, and endpoint MUST honor the values of the <code>RespectBinding</code>
+ * annotation.
+ * <p>
+ *
+ * This annotation's behaviour is defined by the corresponding feature
+ * {@link RespectBindingFeature}.
+ *
+ * @see RespectBindingFeature
+ *
+ * @since JAX-WS 2.1
+ */
+ at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+ at WebServiceFeatureAnnotation(id=RespectBindingFeature.ID,bean=RespectBindingFeature.class)
+public @interface RespectBinding {
+    /**
+     * Specifies if this feature is enabled or disabled.
+     */
+    boolean enabled() default true;
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RespectBindingFeature.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RespectBindingFeature.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/RespectBindingFeature.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import javax.xml.ws.soap.AddressingFeature;
+
+/**
+ * This feature clarifies the use of the <code>wsdl:binding</code>
+ * in a JAX-WS runtime.
+ *
+ * This feature can be used during the creation of SEI proxy, and
+ * {@link Dispatch} instances on the client side and {@link Endpoint}
+ * instances on the server side. This feature cannot be used for {@link Service}
+ * instance creation on the client side.
+ * <p>
+ * This feature is only useful with web services that have an
+ * associated WSDL. Enabling this feature requires that a JAX-WS
+ * implementation inspect the <code>wsdl:binding</code> for an
+ * endpoint at runtime to make sure that all <code>wsdl:extensions</code>
+ * that have the <code>required</code> attribute set to <code>true</code>
+ * are understood and are being used.
+ * <p>
+ * The following describes the affects of this feature with respect
+ * to be enabled or disabled:
+ * <ul>
+ *  <li> ENABLED: In this Mode, a JAX-WS runtime MUST assure that all
+ *  required <code>wsdl:binding</code> extensions(including policies) are
+ *  either understood and used by the runtime, or explicitly disabled by the
+ *  web service application. A web service can disable a particular
+ *  extension if there is a corresponding {@link WebServiceFeature} or annotation.
+ *  Similarly, a web service client can disable
+ *  particular extension using the corresponding <code>WebServiceFeature</code> while
+ *  creating a proxy or Dispatch instance.
+ *  The runtime MUST also make sure that binding of 
+ *  SEI parameters/return values respect the <code>wsdl:binding</code>.
+ *  With this feature enabled, if a required (<code>wsdl:required="true"</code>)
+ *  <code>wsdl:binding</code> extension is in the WSDL and it is not
+ *  supported by a JAX-WS runtime and it has not 
+ *  been explicitly turned off by the web service developer, then
+ *  that JAX-WS runtime MUST behave appropriately based on whether it is 
+ *  on the client or server:
+ *  <UL>
+ *    <li>Client: runtime MUST throw a 
+ *  {@link WebServiceException} no sooner than when one of the methods
+ *  above is invoked but no later than the first invocation of an endpoint
+ *  operation. 
+ *    <li>Server: throw a {@link WebServiceException} and the endpoint MUST fail to deploy
+ *  </ul>
+ *  
+ *  <li> DISABLED: In this Mode, an implementation may choose whether
+ *  to inspect the <code>wsdl:binding</code> or not and to what degree
+ *  the <code>wsdl:binding</code> will be inspected.  For example,
+ *  one implementation may choose to behave as if this feature is enabled,
+ *  another implementation may only choose to verify the SEI's 
+ *  parameter/return type bindings.
+ * </ul>
+ *
+ * @see AddressingFeature
+ *
+ * @since JAX-WS 2.1
+ */
+public final class RespectBindingFeature extends WebServiceFeature {
+    /**
+     * 
+     * Constant value identifying the RespectBindingFeature
+     */
+    public static final String ID = "javax.xml.ws.RespectBindingFeature";
+    
+    
+    /**
+     * Creates an <code>RespectBindingFeature</code>.
+     * The instance created will be enabled.
+     */
+    public RespectBindingFeature() {
+        this.enabled = true;
+    }
+
+    /**
+     * Creates an RespectBindingFeature
+     * 
+     * @param enabled specifies whether this feature should
+     * be enabled or not.
+     */
+    public RespectBindingFeature(boolean enabled) {
+        this.enabled = enabled;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getID() {
+        return ID;
+    }
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Response.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Response.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Response.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.util.Map;
+import java.util.concurrent.Future;
+
+/** The <code>Response</code> interface provides methods used to obtain the  
+ *  payload and context of a message sent in response to an operation
+ *  invocation.
+ *
+ *  <p>For asynchronous operation invocations it provides additional methods
+ *  to check the status of the request. The <code>get(...)</code> methods may
+ *  throw the standard
+ *  set of exceptions and their cause may be a <code>RemoteException</code> or a  
+ *  {@link WebServiceException} that represents the error that occured during the
+ *  asynchronous method invocation.</p>
+ *
+ *  @since JAX-WS 2.0
+**/
+public interface Response<T> extends Future<T> {
+    /** Gets the contained response context.
+     *
+     * @return The contained response context. May be <code>null</code> if a
+     * response is not yet available.
+     *
+    **/
+    Map<String,Object> getContext();
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ResponseWrapper.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ResponseWrapper.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ResponseWrapper.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+/** 
+ * Used to annotate methods in the Service Endpoint Interface with the response 
+ * wrapper bean to be used at runtime. The default value of the <code>localName</code> is 
+ * the <code>operationName</code> as defined in <code>WebMethod</code> annotation appended with
+ * <code>Response</code> and the <code>targetNamespace</code> is the target namespace of the SEI.
+ * <p> When starting from Java this annotation is used resolve
+ * overloading conflicts in document literal mode. Only the <code>className</code>
+ * is required in this case.
+ * 
+ *  @since JAX-WS 2.0
+**/
+
+ at Target(ElementType.METHOD)
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface ResponseWrapper {
+
+    /**
+     * Element's local name.
+     */
+    public String localName() default "";
+
+    /**
+     * Element's namespace name.
+     */
+    public String targetNamespace() default "";
+
+    /**
+     * Response wrapper bean name.
+     */
+    public String className() default "";
+
+    /**
+     * wsdl:part name for the wrapper part
+     * 
+     * @since JAX-WS 2.2
+     */
+    public String partName() default "";
+
+}
+

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Service.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Service.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/Service.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,743 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import javax.xml.namespace.QName;
+import java.util.Iterator;
+import javax.xml.ws.handler.HandlerResolver;
+import javax.xml.bind.JAXBContext;
+import javax.xml.ws.spi.ServiceDelegate;
+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>
+ * <li>Instances of {@link javax.xml.ws.Dispatch} for
+ *     dynamic message-oriented invocation of a remote
+ *     operation.
+ * </li>
+ * </ul>
+ *
+ * <p>The ports available on a service can be enumerated using the
+ * <code>getPorts</code> method. Alternatively, you can pass a
+ * service endpoint interface to the unary <code>getPort</code> method
+ * and let the runtime select a compatible port.
+ *
+ * <p>Handler chains for all the objects created by a <code>Service</code>
+ * can be set by means of a <code>HandlerResolver</code>.
+ *
+ * <p>An <code>Executor</code> may be set on the service in order
+ * to gain better control over the threads used to dispatch asynchronous
+ * callbacks. For instance, thread pooling with certain parameters
+ * can be enabled by creating a <code>ThreadPoolExecutor</code> and
+ * registering it with the service.
+ *
+ * @since JAX-WS 2.0
+ *
+ * @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. <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());
+    }
+
+    protected Service(java.net.URL wsdlDocumentLocation, QName serviceName, WebServiceFeature ... features) {
+        delegate = Provider.provider().createServiceDelegate(wsdlDocumentLocation,
+                serviceName,
+                this.getClass(), features);
+    }
+    
+    
+    /** 
+     * 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);
+    }
+       
+    
+    /**
+     * 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);
+    }
+    
+        
+    /** 
+     * Creates a <code>Dispatch</code> instance for use with objects of
+     * the client'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 client will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the client 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 objects of
+     * the client'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 client will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the client 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 client'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 client will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the client 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);
+    }     
+    
+    /** 
+     * 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 client will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the client 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);
+    }
+        
+    
+    /** 
+     * 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 client will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the client 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);
+    }      
+    
+    
+    /** 
+     * 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 client will work with complete
+     * protocol messages or message payloads. E.g. when using the SOAP
+     * protocol, this parameter controls whether the client 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);
+    }    
+    
+    /** 
+     * 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);
+    }
+    
+    /**
+     * 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);
+    }
+    
+    /**
+     * 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);
+    }
+
+    /**
+     * Creates a <code>Service</code> instance. The created instance is
+     * configured with the web service features.
+     *
+     * 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
+     * @param features Web Service features that must be configured on
+     *        the service. If the provider doesn't understand a feature,
+     *        it must throw a WebServiceException.
+     * @throws WebServiceException If any error in creation of the
+     *                    specified service.
+     * @since JAX-WS 2.2
+     **/
+    public static Service create(
+            java.net.URL wsdlDocumentLocation,
+            QName serviceName, WebServiceFeature ... features) {
+        return new Service(wsdlDocumentLocation, serviceName, features);
+    }
+    
+    /**
+     * 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);
+    }
+
+    /**
+     * Creates a <code>Service</code> instance. The created instance is
+     * configured with the web service features.
+     *
+     * @param serviceName <code>QName</code> for the service
+     * @param features Web Service features that must be configured on
+     *        the service. If the provider doesn't understand a feature,
+     *        it must throw a WebServiceException.
+     * @throws WebServiceException If any error in creation of the
+     *                    specified service
+     *
+     * @since JAX-WS 2.2
+     */
+    public static Service create(QName serviceName, WebServiceFeature ... features) {
+        return new Service(null, serviceName, features);
+    }
+}
+
+
+

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ServiceMode.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ServiceMode.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/ServiceMode.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Inherited;
+
+/** 
+ * Used to indicate whether a {@link Provider} implementation wishes to work
+ * with entire protocol messages or just with protocol message payloads.
+ *
+ *  @since JAX-WS 2.0
+**/
+ at Target({ElementType.TYPE})
+ at Retention(RetentionPolicy.RUNTIME)
+ at Inherited
+ at Documented
+public @interface ServiceMode {
+  /**
+   * Service mode. <code>PAYLOAD</code> indicates that the <code>Provider</code> implementation
+   * wishes to work with protocol message payloads only. <code>MESSAGE</code> indicates
+   * that the <code>Provider</code> implementation wishes to work with entire protocol
+   * messages.
+  **/
+  public Service.Mode value() default Service.Mode.PAYLOAD;
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebEndpoint.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebEndpoint.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebEndpoint.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/** 
+ *  Used to annotate the <code>get<em>PortName</em>()</code>
+ *  methods of a generated service interface.
+ *
+ *  <p>The information specified in this annotation is sufficient
+ *  to uniquely identify a <code>wsdl:port</code> element
+ *  inside a <code>wsdl:service</code>. The latter is
+ *  determined based on the value of the <code>WebServiceClient</code>
+ *  annotation on the generated service interface itself.
+ *
+ *  @since JAX-WS 2.0
+ *
+ *  @see javax.xml.ws.WebServiceClient
+**/
+ at Target({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface WebEndpoint {
+  /**
+   *  The local name of the endpoint.
+  **/
+  String name() default "";
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebFault.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebFault.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebFault.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/** 
+ * Used to annotate service specific exception classes to customize 
+ * to the local and namespace name of the fault element and the name
+ * of the fault bean.
+ *
+ *  @since JAX-WS 2.0
+**/
+ at Target({ElementType.TYPE})
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface WebFault {
+  /**
+   *  Element's local name.
+  **/
+  public String name() default "";
+
+  /**
+   *  Element's namespace name.
+  **/
+  public String targetNamespace() default "";
+
+  /**
+   *  Fault bean name.
+  **/
+  public String faultBean() default "";
+
+
+  /**
+   *  wsdl:Message's name. Default name is the exception's class name.
+   *  @since JAX-WS 2.2
+   */
+  public String messageName() default "";
+
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceClient.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceClient.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceClient.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/** 
+ *  Used to annotate a generated service interface.
+ *
+ *  <p>The information specified in this annotation is sufficient
+ *  to uniquely identify a <code>wsdl:service</code>
+ *  element inside a WSDL document. This <code>wsdl:service</code>
+ *  element represents the Web service for which the generated
+ *  service interface provides a client view.
+ *
+ *  @since JAX-WS 2.0
+**/
+ at Target({ElementType.TYPE})
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface WebServiceClient {
+  /**
+   *  The local name of the Web service.
+  **/
+  String name() default "";
+
+  /**
+   *  The namespace for the Web service.
+  **/
+  String targetNamespace() default "";
+
+  /**
+   *  The location of the WSDL document for the service (a URL).
+  **/
+  String wsdlLocation() default "";
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceContext.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceContext.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceContext.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.security.Principal;
+import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+import org.w3c.dom.Element;
+
+
+/**
+ *  A <code>WebServiceContext</code> makes it possible for
+ *  a web service endpoint implementation class to access
+ *  message context and security information relative to
+ *  a request being served.
+ *
+ *  Typically a <code>WebServiceContext</code> is injected
+ *  into an endpoint implementation class using the
+ *  <code>Resource</code> annotation.
+ *
+ *  @since JAX-WS 2.0
+ *
+ *  @see javax.annotation.Resource
+ **/
+public interface WebServiceContext {
+    
+    /**
+     * Returns the <code>MessageContext</code> for the request being served
+     * at the time this method is called. Only properties with
+     * APPLICATION scope will be visible to the application.
+     *
+     * @return MessageContext The message context.
+     *
+     * @throws IllegalStateException This exception is thrown
+     *         if the method is called while no request is
+     *         being serviced.
+     *
+     * @see javax.xml.ws.handler.MessageContext
+     * @see javax.xml.ws.handler.MessageContext.Scope
+     * @see java.lang.IllegalStateException
+     **/
+    public MessageContext getMessageContext();
+    
+    /**
+     * Returns the Principal that identifies the sender
+     * of the request currently being serviced. If the
+     * sender has not been authenticated, the method
+     * returns <code>null</code>.
+     *
+     * @return Principal The principal object.
+     *
+     * @throws IllegalStateException This exception is thrown
+     *         if the method is called while no request is
+     *         being serviced.
+     *
+     * @see java.security.Principal
+     * @see java.lang.IllegalStateException
+     **/
+    public Principal getUserPrincipal();
+    
+    /**
+     * Returns a boolean indicating whether the
+     * authenticated user is included in the specified
+     * logical role. If the user has not been
+     * authenticated, the method returns </code>false</code>.
+     *
+     * @param role  A <code>String</code> specifying the name of the role
+     *
+     * @return a <code>boolean</code> indicating whether
+     * the sender of the request belongs to a given role
+     *
+     * @throws IllegalStateException This exception is thrown
+     *         if the method is called while no request is
+     *         being serviced.
+     **/
+    public boolean isUserInRole(String role);
+    
+    /**
+     * Returns the <code>EndpointReference</code> for this
+     * endpoint.
+     * <p>
+     * If the {@link Binding} for this <code>bindingProvider</code> is
+     * either SOAP1.1/HTTP or SOAP1.2/HTTP, then a
+     * <code>W3CEndpointReference</code> MUST be returned.
+     *
+     * @param referenceParameters Reference parameters to be associated with the
+     * returned <code>EndpointReference</code> instance.
+     * @return EndpointReference of the endpoint associated with this
+     * <code>WebServiceContext</code>.   
+     * If the returned <code>EndpointReference</code> is of type
+     * <code>W3CEndpointReference</code> then it MUST contain the
+     * the specified <code>referenceParameters</code>.
+     *
+     * @throws IllegalStateException This exception is thrown
+     *         if the method is called while no request is
+     *         being serviced.
+     *
+     * @see W3CEndpointReference
+     *
+     * @since JAX-WS 2.1
+     */
+    public EndpointReference getEndpointReference(Element... referenceParameters);
+
+    /**
+     * Returns the <code>EndpointReference</code> associated with
+     * this endpoint.
+     *
+     * @param clazz The type of <code>EndpointReference</code> that
+     * MUST be returned.
+     * @param referenceParameters Reference parameters to be associated with the
+     * returned <code>EndpointReference</code> instance.
+     * @return EndpointReference of type <code>clazz</code> of the endpoint
+     * associated with this <code>WebServiceContext</code> instance.
+     * If the returned <code>EndpointReference</code> is of type
+     * <code>W3CEndpointReference</code> then it MUST contain the
+     * the specified <code>referenceParameters</code>.
+     *
+     * @throws IllegalStateException This exception is thrown
+     *         if the method is called while no request is
+     *         being serviced.     
+     * @throws WebServiceException If the <code>clazz</code> type of
+     * <code>EndpointReference</code> is not supported.
+     *
+     * @since JAX-WS 2.1
+     **/
+    public <T extends EndpointReference> T getEndpointReference(Class<T> clazz,
+            Element... referenceParameters);
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceException.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceException.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceException.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+/** The <code>WebServiceException</code> class is the base 
+ *  exception class for all JAX-WS API runtime exceptions.
+ *
+ *  @since JAX-WS 2.0
+**/
+
+public class WebServiceException extends java.lang.RuntimeException {
+  
+  /** Constructs a new exception with <code>null</code> as its 
+   *  detail message. The cause is not initialized.
+  **/
+  public WebServiceException() { 
+    super();
+  }
+
+  /** Constructs a new exception with the specified detail 
+   *  message.  The cause is not initialized.
+   *  @param message The detail message which is later 
+   *                 retrieved using the getMessage method
+  **/
+  public WebServiceException(String message) {
+    super(message);
+  }
+
+  /** Constructs a new exception with the specified detail 
+   *  message and cause.
+   *
+   *  @param message The detail message which is later retrieved
+   *                 using the getMessage method
+   *  @param cause   The cause which is saved for the later
+   *                 retrieval throw by the getCause method 
+  **/ 
+  public WebServiceException(String message, Throwable cause) {
+    super(message,cause);
+  }
+
+  /** Constructs a new WebServiceException with the specified cause
+   *  and a detail message of <tt>(cause==null ? null : 
+   *  cause.toString())</tt> (which typically contains the 
+   *  class and detail message of <tt>cause</tt>).
+   *
+   *  @param cause   The cause which is saved for the later
+   *                 retrieval throw by the getCause method.
+   *                 (A <tt>null</tt> value is permitted, and
+   *                 indicates that the cause is nonexistent or
+     *               unknown.)
+  **/ 
+  public WebServiceException(Throwable cause) {
+    super(cause);
+  }
+
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceFeature.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceFeature.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceFeature.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+
+/**
+ * A WebServiceFeature is used to represent a feature that can be 
+ * enabled or disabled for a web service.  
+ * <p>
+ * The JAX-WS specification will define some standard features and
+ * JAX-WS implementors are free to define additional features if
+ * necessary.  Vendor specific features may not be portable so 
+ * caution should be used when using them. Each Feature definition 
+ * MUST define a <code>public static final String ID</code> 
+ * that can be used in the Feature annotation to refer 
+ * to the feature. This ID MUST be unique across all features
+ * of all vendors.  When defining a vendor specific feature ID,
+ * use a vendor specific namespace in the ID string. 
+ *
+ * @see javax.xml.ws.RespectBindingFeature
+ * @see javax.xml.ws.soap.AddressingFeature
+ * @see javax.xml.ws.soap.MTOMFeature
+ * 
+ * @since 2.1
+ */
+public abstract class WebServiceFeature {
+   /**
+    * Each Feature definition MUST define a public static final 
+    * String ID that can be used in the Feature annotation to refer 
+    * to the feature.
+    */
+   // public static final String ID = "some unique feature Identifier";
+    
+   /**
+    * Get the unique identifier for this WebServiceFeature.
+    * 
+    * @return the unique identifier for this feature.
+    */
+   public abstract String getID(); 
+    
+   /**
+    * Specifies if the feature is enabled or disabled
+    */    
+   protected boolean enabled = false;
+   
+   
+   protected WebServiceFeature(){}
+   
+
+   /**
+    * Returns <code>true</code> if this feature is enabled.
+    *
+    * @return <code>true</code> if and only if the feature is enabled .
+    */
+   public boolean isEnabled() {
+       return enabled;
+   }
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServicePermission.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServicePermission.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServicePermission.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.security.BasicPermission;
+
+/**
+ * This class defines web service permissions.
+ * <p>
+ * Web service Permissions are identified by name (also referred to as
+ * a "target name") alone. There are no actions associated
+ * with them.
+ * <p>
+ * The following permission target name is defined:
+ * <p>
+ * <dl>
+ *   <dt>publishEndpoint
+ * </dl>
+ * <p>
+ * The <code>publishEndpoint</code> permission allows publishing a
+ * web service endpoint using the <code>publish</code> methods
+ * defined by the <code>javax.xml.ws.Endpoint</code> class.
+ *
+ * @see javax.xml.ws.Endpoint
+ * @see java.security.BasicPermission
+ * @see java.security.Permission
+ * @see java.security.Permissions
+ * @see java.lang.SecurityManager
+ */
+public final class WebServicePermission extends BasicPermission {
+
+    private static final long serialVersionUID = -146474640053770988L;
+
+    /**
+     * Creates a new permission with the specified name.
+     *
+     * @param name the name of the <code>WebServicePermission</code>
+     */
+    public WebServicePermission(String name) {
+        super(name);
+    }
+
+    /**
+     * Creates a new permission with the specified name and actions.
+     *
+     * The <code>actions</code> parameter is currently unused and
+     * it should be <code>null</code>.
+     *
+     * @param name the name of the <code>WebServicePermission</code>
+     * @param actions should be <code>null</code>
+     */
+    public WebServicePermission(String name, String actions) {
+        super(name, actions);
+    }
+
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceProvider.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceProvider.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceProvider.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+/**
+ * Used to annotate a Provider implementation class.
+ *
+ * @since JAX-WS 2.0
+ * @see javax.xml.ws.Provider
+ */
+ at Target(ElementType.TYPE)
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface WebServiceProvider {
+    /**
+     * Location of the WSDL description for the service.
+     */
+    String wsdlLocation() default "";    
+    
+    /**
+     * Service name.
+     */
+    String serviceName() default "";
+    
+    /**
+     * Target namespace for the service
+     */
+    String targetNamespace() default "";
+
+    /**
+     * Port name.
+     */
+    String portName() default "";
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceRef.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceRef.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceRef.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import javax.xml.ws.soap.Addressing;
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * The <code>WebServiceRef</code> annotation is used to
+ * define a reference to a web service and
+ * (optionally) an injection target for it.
+ * It can be used to inject both service and proxy
+ * instances. These injected references are not thread safe.
+ * If the references are accessed by multiple threads,
+ * usual synchronization techinques can be used to
+ * support multiple threads.
+ *
+ * <p>
+ * Web service references are resources in the Java EE 5 sense.
+ * The annotations (for example, {@link Addressing}) annotated with
+ * meta-annotation {@link WebServiceFeatureAnnotation}
+ * can be used in conjunction with <code>WebServiceRef</code>.
+ * The created reference MUST be configured with annotation's web service
+ * feature.
+ *
+ * <p>
+ * For example, in the code below, the injected 
+ * <code>StockQuoteProvider</code> proxy MUST
+ * have WS-Addressing enabled as specifed by the
+ * {@link Addressing}
+ * annotation.
+ *
+ * <code>
+ * <pre>
+ *    public class MyClient {
+ *       &#64;Addressing
+ *       &#64;WebServiceRef(StockQuoteService.class)
+ *       private StockQuoteProvider stockQuoteProvider;
+ *       ...
+ *    }
+ * </pre>
+ * </code>
+ *
+ * <p>
+ * If a JAX-WS implementation encounters an unsupported or unrecognized
+ * annotation annotated with the <code>WebServiceFeatureAnnotation</code>
+ * that is specified with <code>WebServiceRef</code>, an ERROR MUST be given.
+ * 
+ * @see javax.annotation.Resource
+ * @see WebServiceFeatureAnnotation
+ *
+ * @since JAX-WS 2.0
+ *
+**/
+
+ at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface WebServiceRef {
+    /**
+     * The JNDI name of the resource.  For field annotations,
+     * the default is the field name.  For method annotations,
+     * the default is the JavaBeans property name corresponding
+     * to the method.  For class annotations, there is no default
+     * and this MUST be specified.
+     *
+     * The JNDI name can be absolute(with any logical namespace) or relative
+     * to JNDI <code>java:comp/env</code> namespace.
+     */
+    String name() default "";
+
+    /**
+     * The Java type of the resource.  For field annotations,
+     * the default is the type of the field.  For method annotations,
+     * the default is the type of the JavaBeans property.
+     * For class annotations, there is no default and this MUST be
+     * specified.
+     */
+    Class<?> type() default Object.class;
+
+    /**
+     * A product specific name that this resource should be mapped to.
+     * The name of this resource, as defined by the <code>name</code>
+     * element or defaulted, is a name that is local to the application
+     * component using the resource.  (When a relative JNDI name
+     * is specified, then it's a name in the JNDI
+     * <code>java:comp/env</code> namespace.)  Many application servers
+     * provide a way to map these local names to names of resources
+     * known to the application server.  This mapped name is often a
+     * <i>global</i> JNDI name, but may be a name of any form. <p>
+     * <p/>
+     * Application servers are not required to support any particular
+     * form or type of mapped name, nor the ability to use mapped names.
+     * The mapped name is product-dependent and often installation-dependent.
+     * No use of a mapped name is portable.
+     */
+    String mappedName() default "";
+
+    /**
+     * The service class, always a type extending
+     * <code>javax.xml.ws.Service</code>. This element MUST be specified
+     * whenever the type of the reference is a service endpoint interface.
+     */
+    // 2.1 has Class value() default Object.class;
+    // Fixing this raw Class type correctly in 2.2 API. This shouldn't cause
+    // any compatibility issues for applications.
+    Class<? extends Service> value() default Service.class;
+
+    /**
+     * A URL pointing to the WSDL document for the web service.
+     * If not specified, the WSDL location specified by annotations
+     * on the resource type is used instead.
+     */
+    String wsdlLocation() default "";
+
+    /**
+     * A portable JNDI lookup name that resolves to the target
+     * web service reference.
+     *
+     * @since JAX-WS 2.2
+     */
+    String lookup() default "";
+
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceRefs.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceRefs.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/WebServiceRefs.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * The <code>WebServiceRefs</code> annotation allows
+ * multiple web service references to be declared at the
+ * class level.
+ *
+ * <p>
+ * It can be used to inject both service and proxy
+ * instances. These injected references are not thread safe.
+ * If the references are accessed by multiple threads,
+ * usual synchronization techinques can be used to
+ * support multiple threads.
+ *
+ * <p>
+ * There is no way to associate web service features with
+ * the injected instances. If an instance needs to be
+ * configured with web service features, use @WebServiceRef
+ * to inject the resource along with its features.
+ *
+ * <p>
+ * <b>Example</b>: The <code>StockQuoteProvider</code>
+ * proxy instance, and the <code>StockQuoteService</code> service
+ * instance are injected using @WebServiceRefs.
+ *
+ * <code>
+ * <pre>
+ *    &#64;WebServiceRefs({&#64;WebServiceRef(name="service/stockquoteservice", value=StockQuoteService.class),
+ *                     &#64;WebServiceRef(name="service/stockquoteprovider", type=StockQuoteProvider.class, value=StockQuoteService.class})
+ *    public class MyClient {
+ *        void init() {
+ *            Context ic = new InitialContext();
+ *            StockQuoteService service = (StockQuoteService) ic.lookup("java:comp/env/service/stockquoteservice");
+ *            StockQuoteProvider port = (StockQuoteProvider) ic.lookup("java:comp/env/service/stockquoteprovider");
+ *            ...
+ *       }
+ *       ...
+ *    }
+ * </pre>
+ * </code>
+ *
+ * @see WebServiceRef
+ * @since 2.0
+ */
+
+ at Documented
+ at Retention(RUNTIME)
+ at Target(TYPE)
+public @interface WebServiceRefs {
+   /**
+    * Array used for multiple web service reference declarations.
+    */
+   WebServiceRef[] value();
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/Handler.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/Handler.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/Handler.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.handler;
+
+import javax.xml.ws.ProtocolException;
+import javax.xml.ws.handler.MessageContext;
+
+/** The <code>Handler</code> interface
+ *  is the base interface for JAX-WS handlers.
+ * 
+ *  @since JAX-WS 2.0
+**/
+public interface Handler<C extends MessageContext> {
+
+  /** The <code>handleMessage</code> method is invoked for normal processing
+   *  of inbound and outbound messages. Refer to the description of the handler
+   *  framework in the JAX-WS specification for full details.
+   *
+   *  @param context the message context.
+   *  @return An indication of whether handler processing should continue for
+   *  the current message
+   *                 <ul>
+   *                 <li>Return <code>true</code> to continue 
+   *                     processing.</li>
+   *                 <li>Return <code>false</code> to block 
+   *                     processing.</li>
+   *                  </ul>
+   *  @throws RuntimeException Causes the JAX-WS runtime to cease
+   *    handler processing and generate a fault.
+   *  @throws ProtocolException Causes the JAX-WS runtime to switch to
+   *    fault message processing.
+  **/
+  public boolean handleMessage(C context);
+
+  /** The <code>handleFault</code> method is invoked for fault message 
+   *  processing.  Refer to the description of the handler
+   *  framework in the JAX-WS specification for full details.
+   *
+   *  @param context the message context
+   *  @return An indication of whether handler fault processing should continue 
+   *  for the current message
+   *                 <ul>
+   *                 <li>Return <code>true</code> to continue 
+   *                     processing.</li>
+   *                 <li>Return <code>false</code> to block 
+   *                     processing.</li>
+   *                  </ul>
+   *  @throws RuntimeException Causes the JAX-WS runtime to cease
+   *    handler fault processing and dispatch the fault.
+   *  @throws ProtocolException Causes the JAX-WS runtime to cease
+   *    handler fault processing and dispatch the fault.
+  **/
+  public boolean handleFault(C context);
+
+  /**
+   * Called at the conclusion of a message exchange pattern just prior to
+   * the JAX-WS runtime disptaching a message, fault or exception.  Refer to
+   * the description of the handler
+   * framework in the JAX-WS specification for full details.
+   *
+   * @param context the message context
+  **/
+  public void close(MessageContext context);
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/HandlerResolver.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/HandlerResolver.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/HandlerResolver.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.handler;
+
+/** 
+ *  <code>HandlerResolver</code> is an interface implemented
+ *  by an application to get control over the handler chain
+ *  set on proxy/dispatch objects at the time of their creation.
+ *  <p>
+ *  A <code>HandlerResolver</code> may be set on a <code>Service</code>
+ *  using the <code>setHandlerResolver</code> method.
+ * <p>
+ *  When the runtime invokes a <code>HandlerResolver</code>, it will
+ *  pass it a <code>PortInfo</code> object containing information
+ *  about the port that the proxy/dispatch object will be accessing.
+ *
+ *  @see javax.xml.ws.Service#setHandlerResolver
+ *
+ *  @since JAX-WS 2.0
+**/
+public interface HandlerResolver {
+
+  /** 
+   *  Gets the handler chain for the specified port.
+   *
+   *  @param portInfo Contains information about the port being accessed.
+   *  @return java.util.List&lt;Handler> chain
+  **/
+  public java.util.List<Handler> getHandlerChain(PortInfo portInfo);
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/LogicalHandler.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/LogicalHandler.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/LogicalHandler.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,14 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.handler;
+
+/** The <code>LogicalHandler</code> extends
+ *  Handler to provide typesafety for the message context parameter.
+ * 
+ *  @since JAX-WS 2.0
+**/
+public interface LogicalHandler<C extends LogicalMessageContext> extends Handler<C> {
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/LogicalMessageContext.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/LogicalMessageContext.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/LogicalMessageContext.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.handler;
+
+import javax.xml.ws.LogicalMessage;
+
+/** The <code>LogicalMessageContext</code> interface extends 
+ *  <code>MessageContext</code> to
+ *  provide access to a the contained message as a protocol neutral
+ *  LogicalMessage
+ * 
+ *  @since JAX-WS 2.0
+**/
+public interface LogicalMessageContext 
+                    extends MessageContext {
+
+  /** Gets the message from this message context
+   *
+   *  @return The contained message; returns <code>null</code> if no 
+   *          message is present in this message context
+  **/
+  public LogicalMessage getMessage();
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/MessageContext.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/MessageContext.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/MessageContext.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,185 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.handler;
+import java.util.Map;
+
+/**
+ * The interface <code>MessageContext</code> abstracts the message
+ * context that is processed by a handler in the <code>handle</code>
+ * method.
+ *
+ * <p>The <code>MessageContext</code> interface provides methods to
+ * manage a property set. <code>MessageContext</code> properties
+ * enable handlers in a handler chain to share processing related
+ * state.
+ *
+ * @since JAX-WS 2.0
+ */
+public interface MessageContext extends Map<String, Object> {
+    
+    /**
+     * Standard property: message direction, <code>true</code> for
+     * outbound messages, <code>false</code> for inbound.
+     * <p>Type: boolean
+     */
+    public static final String MESSAGE_OUTBOUND_PROPERTY =
+            "javax.xml.ws.handler.message.outbound";
+    
+    /**
+     * Standard property: Map of attachments to a message for the inbound
+     * message, key is  the MIME Content-ID, value is a DataHandler.
+     * <p>Type: java.util.Map<String,DataHandler>
+     */
+    public static final String INBOUND_MESSAGE_ATTACHMENTS =
+            "javax.xml.ws.binding.attachments.inbound";
+    
+    /**
+     * Standard property: Map of attachments to a message for the outbound
+     * message, key is the MIME Content-ID, value is a DataHandler.
+     * <p>Type: java.util.Map<String,DataHandler>
+     */
+    public static final String OUTBOUND_MESSAGE_ATTACHMENTS =
+            "javax.xml.ws.binding.attachments.outbound";
+    
+    /**
+     * Standard property: input source for WSDL document.
+     * <p>Type: org.xml.sax.InputSource
+     */
+    public static final String WSDL_DESCRIPTION =
+            "javax.xml.ws.wsdl.description";
+    
+    /**
+     * Standard property: name of WSDL service.
+     * <p>Type: javax.xml.namespace.QName
+     */
+    public static final String WSDL_SERVICE =
+            "javax.xml.ws.wsdl.service";
+    
+    /**
+     * Standard property: name of WSDL port.
+     * <p>Type: javax.xml.namespace.QName
+     */
+    public static final String WSDL_PORT =
+            "javax.xml.ws.wsdl.port";
+    
+    /**
+     * Standard property: name of wsdl interface (2.0) or port type (1.1).
+     * <p>Type: javax.xml.namespace.QName
+     */
+    public static final String WSDL_INTERFACE =
+            "javax.xml.ws.wsdl.interface";
+    
+    /**
+     * Standard property: name of WSDL operation.
+     * <p>Type: javax.xml.namespace.QName
+     */
+    public static final String WSDL_OPERATION =
+            "javax.xml.ws.wsdl.operation";
+    
+    /**
+     * Standard property: HTTP response status code.
+     * <p>Type: java.lang.Integer
+     */
+    public static final String HTTP_RESPONSE_CODE =
+            "javax.xml.ws.http.response.code";
+    
+    /**
+     * Standard property: HTTP request headers.
+     * <p>Type: java.util.Map&lt;java.lang.String, java.util.List&lt;java.lang.String>>
+     */
+    public static final String HTTP_REQUEST_HEADERS =
+            "javax.xml.ws.http.request.headers";
+    
+    /**
+     * Standard property: HTTP response headers.
+     * <p>Type: java.util.Map&lt;java.lang.String, java.util.List&lt;java.lang.String>>
+     */
+    public static final String HTTP_RESPONSE_HEADERS =
+            "javax.xml.ws.http.response.headers";
+    
+    /**
+     * Standard property: HTTP request method.
+     * <p>Type: java.lang.String
+     */
+    public static final String HTTP_REQUEST_METHOD =
+            "javax.xml.ws.http.request.method";
+    
+    /**
+     * Standard property: servlet request object.
+     * <p>Type: javax.servlet.http.HttpServletRequest
+     */
+    public static final String SERVLET_REQUEST =
+            "javax.xml.ws.servlet.request";
+    
+    /**
+     * Standard property: servlet response object.
+     * <p>Type: javax.servlet.http.HttpServletResponse
+     */
+    public static final String SERVLET_RESPONSE =
+            "javax.xml.ws.servlet.response";
+    
+    /**
+     * Standard property: servlet context object.
+     * <p>Type: javax.servlet.ServletContext
+     */
+    public static final String SERVLET_CONTEXT =
+            "javax.xml.ws.servlet.context";
+    
+    /**
+     * Standard property: Query string for request.
+     * <p>Type: String
+     **/
+    public static final String QUERY_STRING =
+            "javax.xml.ws.http.request.querystring";
+    
+    /**
+     * Standard property: Request Path Info
+     * <p>Type: String
+     */
+    public static final String PATH_INFO =
+            "javax.xml.ws.http.request.pathinfo";
+    
+    /**
+     * Standard property: WS Addressing Reference Parameters.
+     * The list MUST include all SOAP headers marked with the
+     * wsa:IsReferenceParameter="true" attribute.
+     * <p>Type: List<Element>
+     *
+     * @since JAX-WS 2.1
+     */
+    public static final String REFERENCE_PARAMETERS =
+            "javax.xml.ws.reference.parameters";
+    
+    /**
+     * Property scope. Properties scoped as <code>APPLICATION</code> are
+     * visible to handlers,
+     * client applications and service endpoints; properties scoped as
+     * <code>HANDLER</code>
+     * are only normally visible to handlers.
+     */
+    public enum Scope {APPLICATION, HANDLER};
+    
+    /** 
+     * Sets the scope of a property.
+     *
+     * @param name Name of the property associated with the
+     *             <code>MessageContext</code>
+     * @param scope Desired scope of the property
+     * @throws java.lang.IllegalArgumentException if an illegal
+     *             property name is specified
+     */
+    public void setScope(String name,  Scope scope);
+    
+    /** 
+     * Gets the scope of a property.
+     *
+     * @param name Name of the property
+     * @return Scope of the property
+     * @throws java.lang.IllegalArgumentException if a non-existant
+     *             property name is specified
+     */
+    public Scope getScope(String  name);
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/PortInfo.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/PortInfo.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/PortInfo.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.handler;
+
+import javax.xml.namespace.QName;
+
+/** 
+ *  The <code>PortInfo</code> interface is used by a
+ *  <code>HandlerResolver</code> to query information about
+ *  the port it is being asked to create a handler chain for.
+ *  <p>
+ *  This interface is never implemented by an application,
+ *  only by a JAX-WS implementation.
+ *
+ *  @since JAX-WS 2.0
+**/
+public interface PortInfo {
+
+  /** 
+   *  Gets the qualified name of the WSDL service name containing
+   *  the port being accessed.
+   *
+   *  @return javax.xml.namespace.QName The qualified name of the WSDL service.
+  **/
+  public QName getServiceName();
+
+  /** 
+   *  Gets the qualified name of the WSDL port being accessed.
+   *
+   *  @return javax.xml.namespace.QName The qualified name of the WSDL port.
+  **/
+  public QName getPortName();
+
+  /** 
+   *  Gets the URI identifying the binding used by the port being accessed.
+   *
+   *  @return String The binding identifier for the port.
+   *
+   *  @see javax.xml.ws.Binding
+  **/
+  public String getBindingID();
+
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/package.html
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/package.html	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/package.html	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,5 @@
+<html>
+<body>
+This package defines APIs for message handlers.
+</body>
+</html>

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/SOAPHandler.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/SOAPHandler.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/SOAPHandler.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.handler.soap;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.handler.Handler;
+import java.util.Set;
+
+/** The <code>SOAPHandler</code> class extends <code>Handler</code>
+ *  to provide typesafety for the message context parameter and add a method
+ *  to obtain access to the headers that may be processed by the handler.
+ * 
+ *  @since JAX-WS 2.0
+**/
+public interface SOAPHandler<T extends SOAPMessageContext>
+    extends Handler<T> {
+
+  /** Gets the header blocks that can be processed by this Handler
+   *  instance.
+   *
+   *  @return Set of <code>QNames</code> of header blocks processed by this
+   *           handler instance. <code>QName</code> is the qualified 
+   *           name of the outermost element of the Header block.
+  **/
+  Set<QName> getHeaders();
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/SOAPMessageContext.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/SOAPMessageContext.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/SOAPMessageContext.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.handler.soap;
+
+import javax.xml.soap.SOAPMessage;
+import javax.xml.bind.JAXBContext;
+import javax.xml.namespace.QName;
+import java.util.Set;
+
+/** The interface <code>SOAPMessageContext</code> 
+ *  provides access to the SOAP message for either RPC request or 
+ *  response. The <code>javax.xml.soap.SOAPMessage</code> specifies
+ *  the standard Java API for the representation of a SOAP 1.1 message
+ *  with attachments.
+ *
+ *  @see javax.xml.soap.SOAPMessage
+ * 
+ *  @since JAX-WS 2.0
+**/
+public interface SOAPMessageContext 
+                    extends javax.xml.ws.handler.MessageContext {
+
+  /** Gets the <code>SOAPMessage<code> from this message context. Modifications
+   *  to the returned <code>SOAPMessage</code> change the message in-place, there
+   *  is no need to susequently call <code>setMessage</code>.
+   *
+   *  @return Returns the <code>SOAPMessage</code>; returns <code>null</code> if no 
+   *          <code>SOAPMessage</code> is present in this message context
+  **/
+  public SOAPMessage getMessage();
+
+  /** Sets the SOAPMessage in this message context
+   *
+   *  @param  message SOAP message
+   *  @throws WebServiceException If any error during the setting
+   *          of the <code>SOAPMessage</code> in this message context
+   *  @throws java.lang.UnsupportedOperationException If this
+   *          operation is not supported
+  **/
+  public void setMessage(SOAPMessage message);
+
+  /** Gets headers that have a particular qualified name from the message in the
+   *  message context. Note that a SOAP message can contain multiple headers
+   *  with the same qualified name.
+   *
+   *  @param  header The XML qualified name of the SOAP header(s).
+   *  @param  context The JAXBContext that should be used to unmarshall the 
+   *          header
+   *  @param  allRoles If <code>true</code> then returns headers for all SOAP
+   *          roles, if <code>false</code> then only returns headers targetted
+   *          at the roles currently being played by this SOAP node, see
+   *          <code>getRoles</code>.
+   *  @return An array of unmarshalled headers; returns an empty array if no 
+   *          message is present in this message context or no headers match
+   *          the supplied qualified name.
+   *  @throws WebServiceException If an error occurs when using the supplied
+   *     <code>JAXBContext</code> to unmarshall. The cause of
+   *     the <code>WebServiceException</code> is the original <code>JAXBException</code>.
+  **/
+  public Object[] getHeaders(QName header, JAXBContext context,
+    boolean allRoles);
+
+  /** Gets the SOAP actor roles associated with an execution
+   *  of the handler chain.
+   *  Note that SOAP actor roles apply to the SOAP node and
+   *  are managed using {@link javax.xml.ws.soap.SOAPBinding#setRoles} and
+   *  {@link javax.xml.ws.soap.SOAPBinding#getRoles}. <code>Handler</code> instances in
+   *  the handler chain use this information about the SOAP actor
+   *  roles to process the SOAP header blocks. Note that the
+   *  SOAP actor roles are invariant during the processing of
+   *  SOAP message through the handler chain.
+   *
+   *  @return Array of <code>String</code> for SOAP actor roles
+  **/
+  public Set<String> getRoles();
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/package.html
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/package.html	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/handler/soap/package.html	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,5 @@
+<html>
+<body>
+This package defines APIs for SOAP message handlers.
+</body>
+</html>

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/HTTPBinding.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/HTTPBinding.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/HTTPBinding.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.http;
+
+
+import javax.xml.ws.Binding;
+
+/** The <code>HTTPBinding</code> interface is an 
+ *  abstraction for the XML/HTTP binding.
+ * 
+ *  @since JAX-WS 2.0
+**/
+public interface HTTPBinding extends Binding {
+
+  /**
+   * A constant representing the identity of the XML/HTTP binding.
+   */
+  public static final String HTTP_BINDING = "http://www.w3.org/2004/08/wsdl/http";
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/HTTPException.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/HTTPException.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/HTTPException.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.http;
+
+
+/** The <code>HTTPException</code> exception represents a 
+ *  XML/HTTP fault.
+ *
+ *  <p>Since there is no standard format for faults or exceptions
+ *  in XML/HTTP messaging, only the HTTP status code is captured. 
+ * 
+ *  @since JAX-WS 2.0
+**/
+public class HTTPException extends javax.xml.ws.ProtocolException  {
+  
+  private int statusCode;
+
+  /** Constructor for the HTTPException
+   *  @param statusCode   <code>int</code> for the HTTP status code
+  **/
+  public HTTPException(int statusCode) { 
+    super();
+    this.statusCode = statusCode;
+  }
+
+  /** Gets the HTTP status code.
+   *
+   *  @return HTTP status code
+  **/
+  public int getStatusCode() {
+    return statusCode;
+  }
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/package.html
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/package.html	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/http/package.html	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,5 @@
+<html>
+<body>
+This package defines APIs specific to the HTTP binding.
+</body>
+</html>

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/package.html
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/package.html	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/package.html	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,5 @@
+<html>
+<body>
+This package contains the core JAX-WS APIs.
+</body>
+</html>

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/Addressing.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/Addressing.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/Addressing.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.soap;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.WebServiceRef;
+import javax.xml.ws.WebServiceRefs;
+import javax.xml.ws.WebServiceProvider;
+import javax.xml.ws.soap.AddressingFeature.Responses;
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
+
+/**
+ * This annotation represents the use of WS-Addressing with either
+ * the SOAP 1.1/HTTP or SOAP 1.2/HTTP binding. Using this annotation
+ * with any other binding is undefined.
+ * <p>
+ * This annotation MUST only be used in conjunction with the
+ * {@link javax.jws.WebService}, {@link WebServiceProvider},
+ *  and {@link WebServiceRef} annotations.
+ * When used with a <code>javax.jws.WebService</code> annotation, this
+ * annotation MUST only be used on the service endpoint implementation
+ * class.
+ * When used with a <code>WebServiceRef</code> annotation, this annotation
+ * MUST only be used when a proxy instance is created. The injected SEI
+ * proxy, and endpoint MUST honor the values of the <code>Addressing</code>
+ * annotation.
+ * <p>
+ * This annotation's behaviour is defined by the corresponding feature
+ * {@link AddressingFeature}.
+ * 
+ * @since JAX-WS 2.1
+ */
+ at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+ at WebServiceFeatureAnnotation(id=AddressingFeature.ID,bean=AddressingFeature.class)
+public @interface Addressing {
+    /**
+     * Specifies if this feature is enabled or disabled. If enabled, it means
+     * the endpoint supports WS-Addressing but does not require its use.
+     * Corresponding
+     * <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyaddressing">
+     * 3.1.1 Addressing Assertion</a> must be generated in the generated WSDL.
+     */
+    boolean enabled() default true;
+    
+    /**
+     * If addressing is enabled, this property determines whether the endpoint
+     * requires WS-Addressing. If required is true, the endpoint requires
+     * WS-Addressing and WS-Addressing headers MUST
+     * be present on incoming messages. A corresponding
+     * <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyaddressing">
+     * 3.1.1 Addressing Assertion</a> must be generated in the WSDL.
+     */
+    boolean required() default false;
+
+    /**
+     * If addressing is enabled, this property determines whether endpoint
+     * requires the use of anonymous responses, or non-anonymous responses,
+     * or all.
+     *
+     * <p>
+     * {@link Responses#ALL} supports all response types and this is the
+     * default value.
+     *
+     * <p>
+     * {@link Responses#ANONYMOUS} requires the use of only anonymous
+     * responses. It will result into wsam:AnonymousResponses nested assertion
+     * as specified in
+     * <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyanonresponses">
+     * 3.1.2 AnonymousResponses Assertion</a> in the generated WSDL.
+     *
+     * <p>
+     * {@link Responses#NON_ANONYMOUS} requires the use of only non-anonymous
+     * responses. It will result into
+     * wsam:NonAnonymousResponses nested assertion as specified in
+     * <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicynonanonresponses">
+     * 3.1.3 NonAnonymousResponses Assertion</a> in the generated WSDL.
+     *
+     * @since JAX-WS 2.2
+     */
+    Responses responses() default Responses.ALL;
+
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/AddressingFeature.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/AddressingFeature.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/AddressingFeature.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,235 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.soap;
+
+import javax.xml.ws.WebServiceFeature;
+import javax.xml.ws.Endpoint;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Service;
+
+/**
+ * AddressingFeature represents the use of WS-Addressing with either
+ * the SOAP 1.1/HTTP or SOAP 1.2/HTTP binding. Using this feature
+ * with any other binding is undefined.
+ * <p>
+ * This feature can be used during the creation of SEI proxy, and
+ * {@link Dispatch} instances on the client side and {@link Endpoint}
+ * instances on the server side. This feature cannot be used for {@link Service}
+ * instance creation on the client side.
+ * <p>
+ * The following describes the effects of this feature with respect
+ * to be enabled or disabled:
+ * <ul>
+ *  <li> ENABLED: In this Mode, WS-Addressing will be enabled. It means
+ *       the endpoint supports WS-Addressing but does not require its use.
+ *       A sender could send messages with WS-Addressing headers or without
+ *       WS-Addressing headers. But a receiver MUST consume both types of
+ *       messages.
+ *  <li> DISABLED: In this Mode, WS-Addressing will be disabled.
+ *       At runtime, WS-Addressing headers MUST NOT be used by a sender or
+ *       receiver.
+ * </ul>
+ * <p>
+ * If the feature is enabled, the <code>required</code> property determines
+ * whether the endpoint requires WS-Addressing. If it is set true,
+ * WS-Addressing headers MUST be present on incoming and outgoing messages.
+ * By default the <code>required</code> property is <code>false</code>.
+ *
+ * <p>
+ * If the web service developer has not explicitly enabled this feature,
+ * WSDL's wsam:Addressing policy assertion is used to find
+ * the use of WS-Addressing. By using the feature explicitly, an application
+ * overrides WSDL's indication of the use of WS-Addressing. In some cases,
+ * this is really required. For example, if an application has implemented
+ * WS-Addressing itself, it can use this feature to disable addressing. That
+ * means a JAX-WS implementation doesn't consume or produce WS-Addressing
+ * headers.
+ *
+ * <p>
+ * If addressing is enabled, a corresponding wsam:Addressing policy assertion
+ * must be generated in the WSDL as per
+ * <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyassertions">
+ * 3.1 WS-Policy Assertions</a>
+ *
+ * <p>
+ * <b>Example 1: </b>Possible Policy Assertion in the generated WSDL for
+ * <code>&#64;Addressing</code>
+ * <pre>
+ *   &lt;wsam:Addressing wsp:Optional="true">
+ *     &lt;wsp:Policy/>
+ *   &lt;/wsam:Addressing>
+ * </pre>
+ *
+ * <p>
+ * <b>Example 2: </b>Possible Policy Assertion in the generated WSDL for
+ * <code>&#64;Addressing(required=true)</code>
+ * <pre>
+ *   &lt;wsam:Addressing>
+ *     &lt;wsp:Policy/>
+ *   &lt;/wsam:Addressing>
+ * </pre>
+ *
+ * <p>
+ * <b>Example 3: </b>Possible Policy Assertion in the generated WSDL for
+ * <code>&#64;Addressing(required=true, responses=Responses.ANONYMOUS)</code>
+ * <pre>
+ *   &lt;wsam:Addressing>
+ *      &lt;wsp:Policy>
+ *        &lt;wsam:AnonymousResponses/>
+ *      &lt;/wsp:Policy>
+ *   &lt;/wsam:Addressing>
+ * </pre>
+ *
+ * <p>
+ * See <a href="http://www.w3.org/TR/2006/REC-ws-addr-core-20060509/">
+ * Web Services Addressing - Core</a>,
+ * <a href="http://www.w3.org/TR/2006/REC-ws-addr-soap-20060509/">
+ * Web Services Addressing 1.0 - SOAP Binding</a>,
+ * and <a href="http://www.w3.org/TR/ws-addr-metadata/">
+ * Web Services Addressing 1.0 - Metadata</a>
+ * for more information on WS-Addressing.
+ * 
+ * @see Addressing
+ * @since JAX-WS 2.1
+ */
+
+public final class AddressingFeature extends WebServiceFeature {
+    /** 
+     * Constant value identifying the AddressingFeature
+     */
+    public static final String ID = "http://www.w3.org/2005/08/addressing/module";
+  
+    /**
+     * If addressing is enabled, this property determines whether the endpoint
+     * requires WS-Addressing. If required is true, WS-Addressing headers MUST
+     * be present on incoming and outgoing messages.
+     */
+    // didn't make it as private final for compatibility
+    protected /* final */ boolean required;
+
+    /**
+     * If addressing is enabled, this property determines if endpoint requires
+     * the use of only anonymous responses, or only non-anonymous responses, or all.
+     *
+     * <p>
+     * {@link Responses#ALL} supports all response types and this is the default
+     * value.
+     *
+     * <p>
+     * {@link Responses#ANONYMOUS} requires the use of only anonymous
+     * responses. It will result into wsam:AnonymousResponses nested assertion
+     * as specified in
+     * <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyanonresponses">
+     * 3.1.2 AnonymousResponses Assertion</a> in the generated WSDL.
+     *
+     * <p>
+     * {@link Responses#NON_ANONYMOUS} requires the use of only non-anonymous
+     * responses. It will result into
+     * wsam:NonAnonymousResponses nested assertion as specified in
+     * <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicynonanonresponses">
+     * 3.1.3 NonAnonymousResponses Assertion</a> in the generated WSDL.
+     *
+     * @since JAX-WS 2.2
+     */
+    public enum Responses { ANONYMOUS, NON_ANONYMOUS, ALL }
+
+    private final Responses responses;
+
+    /**
+     * Creates and configures an <code>AddressingFeature</code> with the
+     * use of addressing requirements. The created feature enables
+     * ws-addressing i.e. supports ws-addressing but doesn't require
+     * its use. It is also configured to accept all the response types.
+     */
+    public AddressingFeature() {
+        this(true, false, Responses.ALL);
+    }
+    
+    /**
+     * Creates and configures an <code>AddressingFeature</code> with the
+     * use of addressing requirements. If <code>enabled</code> is true,
+     * it enables ws-addressing i.e. supports ws-addressing but doesn't
+     * require its use. It also configures to accept all the response types.
+     * 
+     * @param enabled true enables ws-addressing i.e.ws-addressing
+     * is supported but doesn't require its use
+     */
+    public AddressingFeature(boolean enabled) {
+        this(enabled, false, Responses.ALL);
+    }
+
+    /** 
+     * Creates and configures an <code>AddressingFeature</code> with the
+     * use of addressing requirements. If <code>enabled</code> and
+     * <code>required</code> are true, it enables ws-addressing and
+     * requires its use. It also configures to accept all the response types.
+     *
+     * @param enabled true enables ws-addressing i.e.ws-addressing
+     * is supported but doesn't require its use
+     * @param required true means requires the use of ws-addressing .
+     */
+    public AddressingFeature(boolean enabled, boolean required) {
+        this(enabled, required, Responses.ALL);
+    }
+
+    /**
+     * Creates and configures an <code>AddressingFeature</code> with the
+     * use of addressing requirements. If <code>enabled</code> and
+     * <code>required</code> are true, it enables ws-addressing and
+     * requires its use. Also, the response types can be configured using
+     * <code>responses</code> parameter.
+     *
+     * @param enabled true enables ws-addressing i.e.ws-addressing
+     * is supported but doesn't require its use
+     * @param required true means requires the use of ws-addressing .
+     * @param responses specifies what type of responses are required
+     *
+     * @since JAX-WS 2.2
+     */
+    public AddressingFeature(boolean enabled, boolean required, Responses responses) {
+        this.enabled = enabled;
+        this.required = required;
+        this.responses = responses;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getID() {
+        return ID;
+    }
+
+    /**
+     * If addressing is enabled, this property determines whether the endpoint
+     * requires WS-Addressing. If required is true, WS-Addressing headers MUST
+     * be present on incoming and outgoing messages.
+     *
+     * @return the current required value
+     */
+    public boolean isRequired() {
+        return required;
+    }
+
+    /**
+     * If addressing is enabled, this property determines whether endpoint
+     * requires the use of anonymous responses, or non-anonymous responses,
+     * or all responses.
+     *
+     * <p>
+     * @return {@link Responses#ALL} when endpoint supports all types of
+     * responses,
+     *         {@link Responses#ANONYMOUS} when endpoint requires the use of
+     * only anonymous responses,
+     *         {@link Responses#NON_ANONYMOUS} when endpoint requires the use
+     * of only non-anonymous responses
+     *
+     * @since JAX-WS 2.2
+     */
+    public Responses getResponses() {
+        return responses;
+    }
+
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/MTOM.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/MTOM.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/MTOM.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.soap;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
+import javax.xml.ws.WebServiceRef;
+import javax.xml.ws.WebServiceProvider;
+
+/**
+ * This feature represents the use of MTOM with a 
+ * web service.
+ * <p>
+ * This annotation MUST only be used in conjunction the
+ * <code>javax.jws.WebService</code>, {@link WebServiceProvider},
+ * {@link WebServiceRef} annotations.
+ * When used with the <code>javax.jws.WebService</code> annotation this
+ * annotation MUST only be used on the service endpoint implementation
+ * class.
+ * When used with a <code>WebServiceRef</code> annotation, this annotation
+ * MUST only be used when a proxy instance is created. The injected SEI
+ * proxy, and endpoint MUST honor the values of the <code>MTOM</code>
+ * annotation.
+ * <p>
+ *
+ * This annotation's behaviour is defined by the corresponding feature
+ * {@link MTOMFeature}.
+ *
+ * @since JAX-WS 2.1
+ */   
+ at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+ at WebServiceFeatureAnnotation(id=MTOMFeature.ID,bean=MTOMFeature.class)
+public @interface MTOM {
+    /**
+     * Specifies if this feature is enabled or disabled.
+     */
+    boolean enabled() default true; 
+     
+    /**
+     * Property for MTOM threshold value. When MTOM is enabled, binary data above this 
+     * size in bytes will be XOP encoded or sent as attachment. The value of this property 
+     * MUST always be >= 0. Default value is 0.      
+     */         
+    int threshold() default 0;
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/MTOMFeature.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/MTOMFeature.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/MTOMFeature.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.soap;
+
+import javax.xml.ws.WebServiceFeature;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Endpoint;
+import javax.xml.ws.Service;
+
+/**
+ * This feature represents the use of MTOM with a 
+ * web service.
+ *
+ * This feature can be used during the creation of SEI proxy, and
+ * {@link Dispatch} instances on the client side and {@link Endpoint}
+ * instances on the server side. This feature cannot be used for {@link Service}
+ * instance creation on the client side.
+ *
+ * <p>
+ * The following describes the affects of this feature with respect
+ * to being enabled or disabled:
+ * <ul>
+ *  <li> ENABLED: In this Mode, MTOM will be enabled. A receiver MUST accept
+ * both a non-optimized and an optimized message, and a sender MAY send an
+ * optimized message, or a non-optimized message. The heuristics used by a
+ * sender to determine whether to use optimization or not are
+ * implementation-specific.
+ *  <li> DISABLED: In this Mode, MTOM will be disabled
+ * </ul>
+ * <p>
+ * The {@link #threshold} property can be used to set the threshold 
+ * value used to determine when binary data should be XOP encoded.
+ *
+ * @since JAX-WS 2.1
+ */       
+public final class MTOMFeature extends WebServiceFeature {
+    /** 
+     * Constant value identifying the MTOMFeature
+     */
+    public static final String ID = "http://www.w3.org/2004/08/soap/features/http-optimization";
+  
+   
+    /**
+     * Property for MTOM threshold value. This property serves as a hint when 
+     * MTOM is enabled, binary data above this size in bytes SHOULD be sent 
+     * as attachment.
+     * The value of this property MUST always be >= 0. Default value is 0.      
+     */
+    protected int threshold = 0;
+    
+
+    /**
+     * Create an <code>MTOMFeature</code>.
+     * The instance created will be enabled.
+     */
+    public MTOMFeature() {
+        this.enabled = true;
+    }    
+    
+    /**
+     * Creates an <code>MTOMFeature</code>.
+     * 
+     * @param enabled specifies if this feature should be enabled or not
+     */
+    public MTOMFeature(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+
+    /**
+     * Creates an <code>MTOMFeature</code>.
+     * The instance created will be enabled.
+     *
+     * @param threshold the size in bytes that binary data SHOULD be before
+     * being sent as an attachment.
+     *
+     * @throws WebServiceException if threshold is < 0
+     */
+    public MTOMFeature(int threshold) {
+        if (threshold < 0)
+            throw new WebServiceException("MTOMFeature.threshold must be >= 0, actual value: "+threshold);
+        this.enabled = true;
+        this.threshold = threshold;
+    }    
+    
+    /**
+     * Creates an <code>MTOMFeature</code>.
+     * 
+     * @param enabled specifies if this feature should be enabled or not
+     * @param threshold the size in bytes that binary data SHOULD be before
+     * being sent as an attachment.
+     *
+     * @throws WebServiceException if threshold is < 0
+     */
+    public MTOMFeature(boolean enabled, int threshold) {
+        if (threshold < 0)
+            throw new WebServiceException("MTOMFeature.threshold must be >= 0, actual value: "+threshold);
+        this.enabled = enabled;
+        this.threshold = threshold;
+    }    
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getID() {
+        return ID;
+    }
+    
+    /**
+     * Gets the threshold value used to determine when binary data 
+     * should be sent as an attachment.
+     *
+     * @return the current threshold size in bytes
+     */
+    public int getThreshold() {
+        return threshold;
+    }
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/SOAPBinding.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/SOAPBinding.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/SOAPBinding.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.soap;
+
+
+import java.util.Set;
+import javax.xml.ws.Binding;
+import javax.xml.soap.SOAPFactory;
+import javax.xml.soap.MessageFactory;
+
+/** The <code>SOAPBinding</code> interface is an abstraction for
+ *  the SOAP binding.
+ * 
+ *  @since JAX-WS 2.0
+**/
+public interface SOAPBinding extends Binding {
+
+  /**
+   * A constant representing the identity of the SOAP 1.1 over HTTP binding.
+   */
+  public static final String SOAP11HTTP_BINDING = "http://schemas.xmlsoap.org/wsdl/soap/http";
+
+  /**
+   * A constant representing the identity of the SOAP 1.2 over HTTP binding.
+   */
+  public static final String SOAP12HTTP_BINDING = "http://www.w3.org/2003/05/soap/bindings/HTTP/";
+
+  /**
+   * A constant representing the identity of the SOAP 1.1 over HTTP binding
+   * with MTOM enabled by default.
+   */
+  public static final String SOAP11HTTP_MTOM_BINDING = "http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true";
+
+  /**
+   * A constant representing the identity of the SOAP 1.2 over HTTP binding
+   * with MTOM enabled by default.
+   */
+  public static final String SOAP12HTTP_MTOM_BINDING = "http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true";
+    
+  
+  /** Gets the roles played by the SOAP binding instance.
+   *
+   *  @return Set<String> The set of roles played by the binding instance.
+  **/
+  public Set<String> getRoles();
+
+  /** Sets the roles played by the SOAP binding instance.
+   *
+   *  @param roles    The set of roles played by the binding instance.
+   *  @throws WebServiceException On an error in the configuration of
+   *                  the list of roles.
+  **/
+  public void setRoles(Set<String> roles);
+
+  /**
+   * Returns <code>true</code> if the use of MTOM is enabled.
+   *
+   * @return <code>true</code> if and only if the use of MTOM is enabled.
+  **/
+  
+  public boolean isMTOMEnabled();
+  
+  /**
+   * Enables or disables use of MTOM.
+   *
+   * @param flag   A <code>boolean</code> specifying whether the use of MTOM should
+   *               be enabled or disabled.
+   * @throws WebServiceException If the specified setting is not supported
+   *                  by this binding instance.
+   * 
+   **/
+  public void setMTOMEnabled(boolean flag);
+  
+  /**
+   * Gets the SAAJ <code>SOAPFactory</code> instance used by this SOAP binding.
+   *
+   * @return SOAPFactory instance used by this SOAP binding.
+  **/
+  public SOAPFactory getSOAPFactory();
+  
+  /**
+   * Gets the SAAJ <code>MessageFactory</code> instance used by this SOAP binding.
+   *
+   * @return MessageFactory instance used by this SOAP binding.
+  **/
+  public MessageFactory getMessageFactory();
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/SOAPFaultException.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/SOAPFaultException.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/SOAPFaultException.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.soap;
+
+import javax.xml.soap.SOAPFault;
+
+/** The <code>SOAPFaultException</code> exception represents a
+ *  SOAP 1.1 or 1.2 fault.
+ *
+ *  <p>A <code>SOAPFaultException</code> wraps a SAAJ <code>SOAPFault</code>
+ *  that manages the SOAP-specific representation of faults.
+ *  The <code>createFault</code> method of
+ *  <code>javax.xml.soap.SOAPFactory</code> may be used to create an instance
+ *  of <code>javax.xml.soap.SOAPFault</code> for use with the
+ *  constructor. <code>SOAPBinding</code> contains an accessor for the
+ *  <code>SOAPFactory</code> used by the binding instance.
+ *
+ *  <p>Note that the value of <code>getFault</code> is the only part of the
+ *  exception used when searializing a SOAP fault.
+ *
+ *  <p>Refer to the SOAP specification for a complete
+ *  description of SOAP faults.
+ *
+ *  @see javax.xml.soap.SOAPFault
+ *  @see javax.xml.ws.soap.SOAPBinding#getSOAPFactory
+ *  @see javax.xml.ws.ProtocolException
+ *
+ *  @since JAX-WS 2.0
+ **/
+public class SOAPFaultException extends javax.xml.ws.ProtocolException  {
+    
+    private SOAPFault fault;
+    
+    /** Constructor for SOAPFaultException
+     *  @param fault   <code>SOAPFault</code> representing the fault
+     *
+     *  @see javax.xml.soap.SOAPFactory#createFault
+     **/
+    public SOAPFaultException(SOAPFault fault) {
+        super(fault.getFaultString());
+        this.fault = fault;
+    }
+    
+    /** Gets the embedded <code>SOAPFault</code> instance.
+     *
+     *  @return <code>javax.xml.soap.SOAPFault</code> SOAP
+     *          fault element
+     **/
+    public javax.xml.soap.SOAPFault getFault() {
+        return this.fault;
+    }
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/package.html
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/package.html	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/soap/package.html	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,5 @@
+<html>
+<body>
+This package defines APIs specific to the SOAP binding.
+</body>
+</html>

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/FactoryFinder.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/FactoryFinder.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/FactoryFinder.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.spi;
+
+import java.io.InputStream;
+import java.io.File;
+import java.io.FileInputStream;
+
+import java.util.Properties;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import javax.xml.ws.WebServiceException;
+
+class FactoryFinder {
+
+    /**
+     * Creates an instance of the specified class using the specified 
+     * <code>ClassLoader</code> object.
+     *
+     * @exception WebServiceException if the given class could not be found
+     *            or could not be instantiated
+     */
+    private static Object newInstance(String className,
+                                      ClassLoader classLoader)
+    {
+        try {
+            Class spiClass = safeLoadClass(className, classLoader);
+            return spiClass.newInstance();
+        } catch (ClassNotFoundException x) {
+            throw new WebServiceException(
+                "Provider " + className + " not found", x);
+        } catch (Exception x) {
+            throw new WebServiceException(
+                "Provider " + className + " could not be instantiated: " + x,
+                x);
+        }
+    }
+
+    /**
+     * Finds the implementation <code>Class</code> object for the given
+     * factory name, or if that fails, finds the <code>Class</code> object
+     * for the given fallback class name. The arguments supplied MUST be
+     * used in order. If using the first argument is successful, the second
+     * one will not be used.
+     * <P>
+     * This method is package private so that this code can be shared.
+     *
+     * @return the <code>Class</code> object of the specified message factory;
+     *         may not be <code>null</code>
+     *
+     * @param factoryId             the name of the factory to find, which is
+     *                              a system property
+     * @param fallbackClassName     the implementation class name, which is
+     *                              to be used only if nothing else
+     *                              is found; <code>null</code> to indicate that
+     *                              there is no fallback class name
+     * @exception WebServiceException if there is an error
+     */
+    static Object find(String factoryId, String fallbackClassName)
+    {
+        ClassLoader classLoader;
+        try {
+            classLoader = Thread.currentThread().getContextClassLoader();
+        } catch (Exception x) {
+            throw new WebServiceException(x.toString(), x);
+        }
+
+        String serviceId = "META-INF/services/" + factoryId;
+        // try to find services in CLASSPATH
+        try {
+            InputStream is=null;
+            if (classLoader == null) {
+                is=ClassLoader.getSystemResourceAsStream(serviceId);
+            } else {
+                is=classLoader.getResourceAsStream(serviceId);
+            }
+        
+            if( is!=null ) {
+                BufferedReader rd =
+                    new BufferedReader(new InputStreamReader(is, "UTF-8"));
+        
+                String factoryClassName = rd.readLine();
+                rd.close();
+
+                if (factoryClassName != null &&
+                    ! "".equals(factoryClassName)) {
+                    return newInstance(factoryClassName, classLoader);
+                }
+            }
+        } catch( Exception ex ) {
+        }
+        
+
+        // try to read from $java.home/lib/jaxws.properties
+        try {
+            String javah=System.getProperty( "java.home" );
+            String configFile = javah + File.separator +
+                "lib" + File.separator + "jaxws.properties";
+            File f=new File( configFile );
+            if( f.exists()) {
+                Properties props=new Properties();
+                props.load( new FileInputStream(f));
+                String factoryClassName = props.getProperty(factoryId);
+                return newInstance(factoryClassName, classLoader);
+            }
+        } catch(Exception ex ) {
+        }
+
+
+        // Use the system property
+        try {
+            String systemProp =
+                System.getProperty( factoryId );
+            if( systemProp!=null) {
+                return newInstance(systemProp, classLoader);
+            }
+        } catch (SecurityException se) {
+        }
+
+        if (fallbackClassName == null) {
+            throw new WebServiceException(
+                "Provider for " + factoryId + " cannot be found", null);
+        }
+
+        return newInstance(fallbackClassName, classLoader);
+    }
+
+
+    /**
+     * Loads the class, provided that the calling thread has an access to the class being loaded.
+     */
+    private static Class safeLoadClass(String className, ClassLoader classLoader) throws ClassNotFoundException {
+        try {
+            // make sure that the current thread has an access to the package of the given name.
+            SecurityManager s = System.getSecurityManager();
+            if (s != null) {
+                int i = className.lastIndexOf('.');
+                if (i != -1) {
+                    s.checkPackageAccess(className.substring(0, i));
+                }
+            }
+
+            if (classLoader == null)
+                return Class.forName(className);
+            else
+                return classLoader.loadClass(className);
+        } catch (SecurityException se) {
+            // anyone can access the platform default factory class without permission
+            if (Provider.DEFAULT_JAXWSPROVIDER.equals(className))
+                return Class.forName(className);
+            throw se;
+        }
+    }
+
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/Invoker.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/Invoker.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/Invoker.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ * $Id: Invoker.java,v 1.1.2.5 2009/02/18 00:21:32 jitu Exp $
+ */
+package javax.xml.ws.spi;
+
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.WebServiceFeature;
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+
+/**
+ * Invoker hides the detail of calling into application endpoint
+ * implementation. Container hands over an implementation of Invoker
+ * to JAX-WS runtime, and jax-ws runtime calls {@link #invoke}
+ * for a web service invocation. Finally, Invoker does the actual
+ * invocation of web service on endpoint instance.
+ *
+ * Container also injects the provided <code>WebServiceContext</code> and takes
+ * care of invoking <code>javax.annotation.PostConstruct</code> methods,
+ * if present, on the endpoint implementation.
+ *
+ * @see Provider#createEndpoint(String, Class, Invoker, WebServiceFeature...)
+ * @author Jitendra Kotamraju
+ * @since JAX-WS 2.2
+ */
+
+public abstract class Invoker {
+
+    /**
+     * JAX-WS runtimes calls this method to ask container to inject
+     * WebServiceContext on the endpoint instance. The
+     * <code>WebServiceContext</code> object uses thread-local information
+     * to return the correct information during the actual endpoint invocation
+     * regardless of how many threads are concurrently being used to serve
+     * requests.
+     *
+     * @param webServiceContext a holder for MessageContext
+     * @throws IllegalAccessException if the injection done
+     *         by reflection API throws this exception
+     * @throws IllegalArgumentException if the injection done
+     *         by reflection API throws this exception
+     * @throws InvocationTargetException if the injection done
+     *         by reflection API throws this exception
+     */
+    public abstract void inject(WebServiceContext webServiceContext)
+    throws IllegalAccessException, IllegalArgumentException, InvocationTargetException;
+    
+    /**
+     * JAX-WS runtime calls this method to do the actual web service
+     * invocation on endpoint instance. The injected
+     * <code>WebServiceContext.getMessageContext()</code> gives the correct
+     * information for this invocation.
+     *
+     * @param m Method to be invoked on the service
+     * @param args Method arguments
+     * @return return value of the method
+     * @throws IllegalAccessException if the invocation done
+     *         by reflection API throws this exception
+     * @throws IllegalArgumentException if the invocation done
+     *         by reflection API throws this exception
+     * @throws InvocationTargetException if the invocation done
+     *         by reflection API throws this exception
+
+     * @see Method#invoke
+     */
+    public abstract Object invoke(Method m, Object... args)
+    throws  IllegalAccessException, IllegalArgumentException, InvocationTargetException;
+
+}
\ No newline at end of file

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/Provider.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/Provider.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/Provider.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,502 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ *$Id: Provider.java,v 1.9.2.15 2009/09/08 20:27:02 jitu Exp $
+ */
+
+package javax.xml.ws.spi;
+
+import java.net.URL;
+import java.util.List;
+import java.util.Iterator;
+import java.util.Map;
+import java.lang.reflect.Method;
+import javax.xml.namespace.QName;
+import javax.xml.ws.*;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+
+import org.w3c.dom.Element;
+
+/**
+ * Service provider for <code>ServiceDelegate</code> and
+ * <code>Endpoint</code> objects.
+ * <p>
+ *
+ * @since JAX-WS 2.0
+ */
+public abstract class Provider {
+    
+    /**
+     * A constant representing the property used to lookup the
+     * name of a <code>Provider</code> implementation
+     * class.
+     */
+    static public final String JAXWSPROVIDER_PROPERTY
+            = "javax.xml.ws.spi.Provider";
+    
+    /**
+     * A constant representing the name of the default
+     * <code>Provider</code> implementation class.
+     **/
+    // Using two strings so that package renaming doesn't change it 
+    static final String DEFAULT_JAXWSPROVIDER
+            = "com.sun"+".xml.internal.ws.spi.ProviderImpl";
+
+    /**
+     * Take advantage of Java SE 6's java.util.ServiceLoader API.
+     * Using reflection so that there is no compile-time dependency on SE 6.
+     */
+    static private final Method loadMethod;
+    static private final Method iteratorMethod;
+    static {
+        Method tLoadMethod = null;
+        Method tIteratorMethod = null;
+        try {
+            Class<?> clazz = Class.forName("java.util.ServiceLoader");
+            tLoadMethod = clazz.getMethod("load", Class.class);
+            tIteratorMethod = clazz.getMethod("iterator");
+        } catch(ClassNotFoundException ce) {
+            // Running on Java SE 5
+        } catch(NoSuchMethodException ne) {
+            // Shouldn't happen
+        }
+        loadMethod = tLoadMethod;
+        iteratorMethod = tIteratorMethod;
+    }
+    
+    
+    /**
+     * Creates a new instance of Provider
+     */
+    protected Provider() {
+    }
+    
+    /**
+     *
+     * Creates a new provider object.
+     * <p>
+     * The algorithm used to locate the provider subclass to use consists
+     * of the following steps:
+     * <p>
+     * <ul>
+     * <li>
+     *   If a resource with the name of
+     *   <code>META-INF/services/javax.xml.ws.spi.Provider</code>
+     *   exists, then its first line, if present, is used as the UTF-8 encoded
+     *   name of the implementation class.
+     * </li>
+     * <li>
+     *   If the $java.home/lib/jaxws.properties file exists and it is readable by
+     *   the <code>java.util.Properties.load(InputStream)</code> method and it contains
+     *   an entry whose key is <code>javax.xml.ws.spi.Provider</code>, then the value of
+     *   that entry is used as the name of the implementation class.
+     * </li>
+     * <li>
+     *   If a system property with the name <code>javax.xml.ws.spi.Provider</code>
+     *   is defined, then its value is used as the name of the implementation class.
+     * </li>
+     * <li>
+     *   Finally, a default implementation class name is used.
+     * </li>
+     * </ul>
+     *
+     */
+    public static Provider provider() {
+        try {
+            Object provider = getProviderUsingServiceLoader();
+            if (provider == null) {
+                provider = FactoryFinder.find(JAXWSPROVIDER_PROPERTY, DEFAULT_JAXWSPROVIDER);
+            }
+            if (!(provider instanceof Provider)) {
+                Class pClass = Provider.class;
+                String classnameAsResource = pClass.getName().replace('.', '/') + ".class";
+                ClassLoader loader = pClass.getClassLoader();
+                if(loader == null) {
+                    loader = ClassLoader.getSystemClassLoader();
+                }
+                URL targetTypeURL  = loader.getResource(classnameAsResource);
+                throw new LinkageError("ClassCastException: attempting to cast" + 
+                       provider.getClass().getClassLoader().getResource(classnameAsResource) +
+                       "to" + targetTypeURL.toString() );
+            }
+            return (Provider) provider;
+        } catch (WebServiceException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new WebServiceException("Unable to createEndpointReference Provider", ex);
+        } 
+    }
+
+
+    private static Provider getProviderUsingServiceLoader() {
+        if (loadMethod != null) {
+            Object loader;
+            try {
+                loader = loadMethod.invoke(null, Provider.class);
+            } catch (Exception e) {
+                throw new WebServiceException("Cannot invoke java.util.ServiceLoader#load()", e);
+            }
+
+            Iterator<Provider> it;
+            try {
+                it = (Iterator<Provider>)iteratorMethod.invoke(loader);
+            } catch(Exception e) {
+                throw new WebServiceException("Cannot invoke java.util.ServiceLoader#iterator()", e);
+            }
+            return it.hasNext() ? it.next() : null;
+        }
+        return null;
+    }
+    
+    /**
+     * Creates a service delegate object.
+     * <p>
+     * @param wsdlDocumentLocation A URL pointing to the WSDL document
+     *        for the service, or <code>null</code> if there isn't one.
+     * @param serviceName The qualified name of the service.
+     * @param serviceClass The service class, which MUST be either
+     *        <code>javax.xml.ws.Service</code> or a subclass thereof.
+     * @return The newly created service delegate.
+     */
+    public abstract ServiceDelegate createServiceDelegate(
+            java.net.URL wsdlDocumentLocation,
+            QName serviceName, Class<? extends Service> serviceClass);
+
+    /**
+     * Creates a service delegate object.
+     * <p>
+     * @param wsdlDocumentLocation A URL pointing to the WSDL document
+     *        for the service, or <code>null</code> if there isn't one.
+     * @param serviceName The qualified name of the service.
+     * @param serviceClass The service class, which MUST be either
+     *        <code>javax.xml.ws.Service</code> or a subclass thereof.
+     * @param features Web Service features that must be configured on
+     *        the service. If the provider doesn't understand a feature,
+     *        it must throw a WebServiceException.
+     * @return The newly created service delegate.
+     *
+     * @since JAX-WS 2.2
+     */
+    public ServiceDelegate createServiceDelegate(
+            java.net.URL wsdlDocumentLocation,
+            QName serviceName, Class<? extends Service> serviceClass, WebServiceFeature ... features) {
+        throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
+    }
+    
+    
+    /**
+     *
+     * Creates an endpoint object with the provided binding and implementation
+     * object.
+     *
+     * @param bindingId A URI specifying the desired binding (e.g. SOAP/HTTP)
+     * @param implementor A service implementation object to which
+     *        incoming requests will be dispatched. The corresponding
+     *        class MUST be annotated with all the necessary Web service
+     *        annotations.
+     * @return The newly created endpoint.
+     */
+    public abstract Endpoint createEndpoint(String bindingId,
+            Object implementor);
+    
+    
+    /**
+     * Creates and publishes an endpoint object with the specified
+     * address and implementation object.
+     *
+     * @param address A URI specifying the address and transport/protocol
+     *        to use. A http: URI MUST result in the SOAP 1.1/HTTP
+     *        binding being used. Implementations may support other
+     *        URI schemes.
+     * @param implementor A service implementation object to which
+     *        incoming requests will be dispatched. The corresponding
+     *        class MUST be annotated with all the necessary Web service
+     *        annotations.
+     * @return The newly created endpoint.
+     */
+    public abstract Endpoint createAndPublishEndpoint(String address,
+            Object implementor);
+
+    /**
+     * read an EndpointReference from the infoset contained in
+     * <code>eprInfoset</code>.
+     *
+     * @param eprInfoset infoset for EndpointReference
+     *
+     * @return the <code>EndpointReference</code> unmarshalled from
+     * <code>eprInfoset</code>.  This method never returns <code>null</code>.
+     *
+     * @throws WebServiceException If there is an error creating the
+     * <code>EndpointReference</code> from the specified <code>eprInfoset</code>.
+     *
+     * @throws NullPointerException If the <code>null</code>
+     * <code>eprInfoset</code> value is given.
+     *
+     * @since JAX-WS 2.1
+     **/
+    public abstract EndpointReference readEndpointReference(javax.xml.transform.Source eprInfoset);
+     
+    
+    /**
+     * The getPort method returns a 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 parameter  <code>serviceEndpointInterface</code> specifies
+     * the service endpoint interface that is supported by the
+     * returned proxy.
+     * The parameter <code>endpointReference</code> specifies the
+     * endpoint that will be invoked 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 metadata of the
+     * <code>serviceEndpointInterface</code> and the <code>EndpointReference</code>. 
+     * For this method
+     * to successfully return a proxy, WSDL metadata MUST be available and the
+     * <code>endpointReference</code> MUST contain an implementation understood
+     * <code>serviceName</code> metadata.  
+     *
+     *
+     * @param endpointReference the EndpointReference that will
+     * be invoked by the returned proxy.
+     * @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 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 this
+     *                      <code>endpointReference</code>
+     *                      is illegal
+     *                  <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 abstract <T> T getPort(EndpointReference endpointReference,
+            Class<T> serviceEndpointInterface,
+            WebServiceFeature... features);
+    
+    /**
+     * Factory method to create a <code>W3CEndpointReference</code>.
+     *
+     * <p>
+     * This method can be used to create a <code>W3CEndpointReference</code>
+     * for any endpoint by specifying the <code>address</code> property along
+     * with any other desired properties.  This method
+     * can also be used to create a <code>W3CEndpointReference</code> for
+     * an endpoint that is published by the same Java EE application.
+     * To do so the <code>address</code> property can be provided or this
+     * method can automatically determine the <code>address</code> of 
+     * an endpoint that is published by the same Java EE application and is
+     * identified by the <code>serviceName</code> and 
+     * <code>portName</code> propeties.  If the <code>address</code> is 
+     * <code>null</code> and the <code>serviceName</code> and 
+     * <code>portName</code> do not identify an endpoint published by the 
+     * same Java EE application, a
+     * <code>javax.lang.IllegalStateException</code> MUST be thrown.
+     *
+     * @param address Specifies the address of the target endpoint
+     * @param serviceName Qualified name of the service in the WSDL.
+     * @param portName Qualified name of the endpoint in the WSDL.
+     * @param metadata A list of elements that should be added to the 
+     * <code>W3CEndpointReference</code> instances <code>wsa:metadata</code> 
+     * element.
+     * @param wsdlDocumentLocation URL for the WSDL document location for 
+     * the service.  
+     * @param referenceParameters Reference parameters to be associated 
+     * with the returned <code>EndpointReference</code> instance.
+     *
+     * @return the <code>W3CEndpointReference<code> created from 
+     *          <code>serviceName</code>, <code>portName</code>,
+     *          <code>metadata</code>, <code>wsdlDocumentLocation</code> 
+     *          and <code>referenceParameters</code>. This method
+     *          never returns <code>null</code>.
+     *
+     * @throws java.lang.IllegalStateException
+     *     <ul>
+     *        <li>If the <code>address</code>, <code>serviceName</code> and
+     *            <code>portName</code> are all <code>null</code>.
+     *        <li>If the <code>serviceName</code> service is <code>null</code> and the
+     *            <code>portName> is NOT <code>null</code>.
+     *        <li>If the <code>address</code> property is <code>null</code> and
+     *            the <code>serviceName</code> and <code>portName</code> do not
+     *            specify a valid endpoint published by the same Java EE
+     *            application.
+     *        <li>If the <code>serviceName</code>is NOT <code>null</code>
+     *             and is not present in the specified WSDL.
+     *        <li>If the <code>portName</code> port is not <code>null<code> and it
+     *             is not present in <code>serviceName</code> service in the WSDL.
+     *        <li>If the <code>wsdlDocumentLocation</code> is NOT <code>null</code>
+     *            and does not represent a valid WSDL.
+     *     </ul>
+     * @throws WebServiceException If an error occurs while creating the 
+     *                             <code>W3CEndpointReference</code>.
+     *
+     * @since JAX-WS 2.1
+     */
+    public abstract W3CEndpointReference createW3CEndpointReference(String address, QName serviceName, QName portName,
+            List<Element> metadata, String wsdlDocumentLocation, List<Element> referenceParameters);
+
+
+    /**
+     * Factory method to create a <code>W3CEndpointReference</code>.
+     * Using this method, a <code>W3CEndpointReference</code> instance
+     * can be created with extension elements, and attributes.
+     * <code>Provider</code> implementations must override the default
+     * implementation.
+     *
+     * <p>
+     * This method can be used to create a <code>W3CEndpointReference</code>
+     * for any endpoint by specifying the <code>address</code> property along
+     * with any other desired properties.  This method
+     * can also be used to create a <code>W3CEndpointReference</code> for
+     * an endpoint that is published by the same Java EE application.
+     * To do so the <code>address</code> property can be provided or this
+     * method can automatically determine the <code>address</code> of
+     * an endpoint that is published by the same Java EE application and is
+     * identified by the <code>serviceName</code> and
+     * <code>portName</code> propeties.  If the <code>address</code> is
+     * <code>null</code> and the <code>serviceName</code> and
+     * <code>portName</code> do not identify an endpoint published by the
+     * same Java EE application, a
+     * <code>javax.lang.IllegalStateException</code> MUST be thrown.
+     *
+     * @param address Specifies the address of the target endpoint
+     * @param interfaceName the wsam:InterfaceName</code> element in the
+     * <code>wsa:Metadata</code> element.
+     * @param serviceName Qualified name of the service in the WSDL.
+     * @param portName Qualified name of the endpoint in the WSDL.
+     * @param metadata A list of elements that should be added to the
+     * <code>W3CEndpointReference</code> instances <code>wsa:metadata</code>
+     * element.
+     * @param wsdlDocumentLocation URL for the WSDL document location for
+     * the service.
+     * @param referenceParameters Reference parameters to be associated
+     * with the returned <code>EndpointReference</code> instance.
+     * @param elements extension elements to be associated
+     * with the returned <code>EndpointReference</code> instance.
+     * @param attributes extension attributes to be associated
+     * with the returned <code>EndpointReference</code> instance.
+     *
+     * @return the <code>W3CEndpointReference<code> created from
+     *          <code>serviceName</code>, <code>portName</code>,
+     *          <code>metadata</code>, <code>wsdlDocumentLocation</code>
+     *          and <code>referenceParameters</code>. This method
+     *          never returns <code>null</code>.
+     *
+     * @throws java.lang.IllegalStateException
+     *     <ul>
+     *        <li>If the <code>address</code>, <code>serviceName</code> and
+     *            <code>portName</code> are all <code>null</code>.
+     *        <li>If the <code>serviceName</code> service is <code>null</code> and the
+     *            <code>portName> is NOT <code>null</code>.
+     *        <li>If the <code>address</code> property is <code>null</code> and
+     *            the <code>serviceName</code> and <code>portName</code> do not
+     *            specify a valid endpoint published by the same Java EE
+     *            application.
+     *        <li>If the <code>serviceName</code>is NOT <code>null</code>
+     *             and is not present in the specified WSDL.
+     *        <li>If the <code>portName</code> port is not <code>null<code> and it
+     *             is not present in <code>serviceName</code> service in the WSDL.
+     *        <li>If the <code>wsdlDocumentLocation</code> is NOT <code>null</code>
+     *            and does not represent a valid WSDL.
+     *        <li>If the <code>wsdlDocumentLocation</code> is NOT <code>null</code> but
+     *            wsdli:wsdlLocation's namespace name cannot be got from the available
+     *            metadata.
+     *     </ul>
+     * @throws WebServiceException If an error occurs while creating the
+     *                             <code>W3CEndpointReference</code>.
+     * @since JAX-WS 2.2
+     */
+    public W3CEndpointReference createW3CEndpointReference(String address,
+            QName interfaceName, QName serviceName, QName portName,
+            List<Element> metadata, String wsdlDocumentLocation, List<Element> referenceParameters,
+            List<Element> elements, Map<QName, String> attributes) {
+        throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
+    }
+
+    /**
+     * Creates and publishes an endpoint object with the specified
+     * address, implementation object and web service features.
+     * <code>Provider</code> implementations must override the
+     * default implementation.
+     *
+     * @param address A URI specifying the address and transport/protocol
+     *        to use. A http: URI MUST result in the SOAP 1.1/HTTP
+     *        binding being used. Implementations may support other
+     *        URI schemes.
+     * @param implementor A service implementation object to which
+     *        incoming requests will be dispatched. The corresponding
+     *        class MUST be annotated with all the necessary Web service
+     *        annotations.
+     * @param features A list of WebServiceFeatures to configure on the
+     *        endpoint.  Supported features not in the <code>features
+     *        </code> parameter will have their default values.
+     * @return The newly created endpoint.
+     * @since JAX-WS 2.2
+     */
+    public Endpoint createAndPublishEndpoint(String address,
+            Object implementor, WebServiceFeature ... features) {
+        throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
+    }
+
+    /**
+     * Creates an endpoint object with the provided binding, implementation
+     * object and web service features. <code>Provider</code> implementations
+     * must override the default implementation.
+     *
+     * @param bindingId A URI specifying the desired binding (e.g. SOAP/HTTP)
+     * @param implementor A service implementation object to which
+     *        incoming requests will be dispatched. The corresponding
+     *        class MUST be annotated with all the necessary Web service
+     *        annotations.
+     * @param features A list of WebServiceFeatures to configure on the
+     *        endpoint.  Supported features not in the <code>features
+     *        </code> parameter will have their default values.
+     * @return The newly created endpoint.
+     * @since JAX-WS 2.2
+     */
+    public Endpoint createEndpoint(String bindingId, Object implementor,
+            WebServiceFeature ... features) {
+        throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
+    }
+
+    /**
+     * Creates an endpoint object with the provided binding, implementation
+     * class, invoker and web service features. Containers typically use
+     * this to create Endpoint objects. <code>Provider</code>
+     * implementations must override the default implementation.
+     *
+     * @param bindingId A URI specifying the desired binding (e.g. SOAP/HTTP).
+     *        Can be null.
+     * @param implementorClass A service implementation class that
+     *        MUST be annotated with all the necessary Web service
+     *        annotations.
+     * @param invoker that does the actual invocation on the service instance.
+     * @param features A list of WebServiceFeatures to configure on the
+     *        endpoint.  Supported features not in the <code>features
+     *        </code> parameter will have their default values.
+     * @return The newly created endpoint.
+     * @since JAX-WS 2.2
+     */
+    public Endpoint createEndpoint(String bindingId, Class<?> implementorClass,
+            Invoker invoker, WebServiceFeature ... features) {
+        throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
+    }
+
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/ServiceDelegate.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/ServiceDelegate.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/ServiceDelegate.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,602 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.spi;
+
+import java.util.Iterator;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Service;
+import javax.xml.ws.handler.HandlerResolver;
+import javax.xml.ws.WebServiceFeature;
+import javax.xml.bind.JAXBContext;
+import javax.xml.ws.EndpointReference;
+import javax.xml.ws.WebServiceException;
+
+
+/**
+ * Service delegates are used internally by <code>Service</code> objects
+ * to allow pluggability of JAX-WS implementations.
+ * <p>
+ * Every <code>Service</code> object has its own delegate, created using
+ * the {@link javax.xml.ws.spi.Provider#createServiceDelegate} method. A <code>Service</code>
+ * object delegates all of its instance methods to its delegate.
+ *
+ * @see javax.xml.ws.Service
+ * @see javax.xml.ws.spi.Provider
+ *
+ * @since JAX-WS 2.0
+ */
+public abstract class ServiceDelegate {
+    
+    protected ServiceDelegate() {
+    }
+    
+    /** 
+     * 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
+     * @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 abstract <T> T getPort(QName portName,
+            Class<T> 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 or 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 abstract <T> T getPort(QName portName,
+            Class<T> serviceEndpointInterface, WebServiceFeature... 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 abstract <T> T getPort(EndpointReference endpointReference,
+           Class<T> serviceEndpointInterface, WebServiceFeature... 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 abstract <T> T getPort(Class<T> serviceEndpointInterface);
+
+    
+    /**
+     * 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  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 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 abstract <T> T getPort(Class<T> serviceEndpointInterface, 
+            WebServiceFeature... 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 URI 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 abstract void addPort(QName portName, String bindingId,
+            String endpointAddress);
+    
+   
+    
+    /** 
+     * 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>.
+     *
+     * @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 abstract <T> Dispatch<T> createDispatch(QName portName, Class<T> type, 
+            Service.Mode 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 abstract <T> Dispatch<T> createDispatch(QName portName, Class<T> type, 
+            Service.Mode mode, WebServiceFeature... 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 abstract <T> Dispatch<T> createDispatch(EndpointReference endpointReference,
+            Class<T> type, Service.Mode mode, 
+            WebServiceFeature... features);
+
+
+    
+    /** 
+     * 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 abstract Dispatch<Object> createDispatch(QName portName,
+            JAXBContext context, Service.Mode 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.
+     * @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 abstract Dispatch<Object> createDispatch(QName portName,
+            JAXBContext context, Service.Mode mode, WebServiceFeature... features);
+   
+    /** 
+     * 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 abstract Dispatch<Object> createDispatch(EndpointReference endpointReference,
+            JAXBContext context, Service.Mode mode,
+            WebServiceFeature... features);
+        
+    
+    /** 
+     * Gets the name of this service.
+     * @return Qualified name of this service
+     **/
+    public abstract QName 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 abstract Iterator<javax.xml.namespace.QName> getPorts();
+    
+    /** 
+     * Gets the location of the WSDL document for this Service.
+     *
+     * @return URL for the location of the WSDL document for
+     *         this service
+     **/
+    public abstract java.net.URL 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 abstract HandlerResolver 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 abstract void setHandlerResolver(HandlerResolver 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 abstract java.util.concurrent.Executor 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 abstract void setExecutor(java.util.concurrent.Executor executor);
+    
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/WebServiceFeatureAnnotation.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/WebServiceFeatureAnnotation.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/WebServiceFeatureAnnotation.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.spi;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import javax.xml.ws.WebServiceFeature;
+import javax.xml.ws.WebServiceRef;
+import javax.xml.ws.WebServiceRefs;
+import javax.xml.ws.RespectBinding;
+import javax.xml.ws.soap.Addressing;
+import javax.xml.ws.soap.MTOM;
+
+/**
+ * Annotation used to identify other annotations
+ * as a <code>WebServiceFeature</code>.
+ * <p>
+ * Each <code>WebServiceFeature</code> annotation annotated with
+ * this annotation MUST contain an 
+ * <code>enabled</code> property of type
+ * <code>boolean</code> with a default value of <code>true</code>. 
+ * <p>
+ * JAX-WS defines the following
+ * <code>WebServiceFeature</code> annotations (<code>Addressing</code>, 
+ * <code>MTOM</code>, <code>RespectBinding</code>), however, an implementation
+ * may define vendors specific annotations for other features.
+ * <p>
+ * Annotations annotated with <code>WebServiceFeatureAnnotation</code> MUST
+ * have the same @Target of {@link WebServiceRef} annotation, so that the resulting
+ * feature annotation can be used in conjunction with the {@link WebServiceRef}
+ * annotation if necessary.
+ * <p>
+ * If a JAX-WS implementation encounters an annotation annotated
+ * with the <code>WebServiceFeatureAnnotation</code> that it does not
+ * recognize/support an error MUST be given.
+ * <p>
+ *
+ * @see Addressing
+ * @see MTOM
+ * @see RespectBinding
+ *
+ * @since JAX-WS 2.1
+ */
+ at Target(ElementType.ANNOTATION_TYPE)
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface WebServiceFeatureAnnotation {
+    /**
+     * Unique identifier for the WebServiceFeature.  This 
+     * identifier MUST be unique across all implementations
+     * of JAX-WS.
+     */
+    String id();
+
+    /**
+     * The <code>WebServiceFeature</code> bean that is associated
+     * with the <code>WebServiceFeature</code> annotation
+     */
+    Class<? extends WebServiceFeature> bean();
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpContext.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpContext.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpContext.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.spi.http;
+
+import javax.xml.ws.Endpoint;
+import java.util.Set;
+
+/**
+ * HttpContext represents a mapping between the root URI path of a web
+ * service to a {@link HttpHandler} which is invoked to handle requests
+ * destined for that path on the associated container.
+ * <p>
+ * Container provides the implementation for this and it matches
+ * web service requests to corresponding HttpContext objects.
+ *
+ * @author Jitendra Kotamraju
+ * @since JAX-WS 2.2
+ */
+public abstract class HttpContext {
+
+    protected HttpHandler handler;
+
+    /**
+     * JAX-WS runtime sets its handler during
+     * {@link Endpoint#publish(HttpContext)} to handle
+     * HTTP requests for this context. Container or its extensions
+     * use this handler to process the requests.
+     *
+     * @param handler the handler to set for this context
+     */
+    public void setHandler(HttpHandler handler) {
+        this.handler = handler;
+    }
+
+    /**
+     * Returns the path for this context. This path uniquely identifies
+     * an endpoint inside an application and the path is relative to
+     * application's context path. Container should give this
+     * path based on how it matches request URIs to this HttpContext object.
+     *
+     * <p>
+     * For servlet container, this is typically a url-pattern for an endpoint.
+     *
+     * <p>
+     * Endpoint's address for this context can be computed as follows:
+     * <pre>
+     *  HttpExchange exch = ...;
+     *  String endpointAddress =
+     *      exch.getScheme() + "://"
+     *      + exch.getLocalAddress().getHostName()
+     *      + ":" + exch.getLocalAddress().getPort()
+     *      + exch.getContextPath() + getPath();
+     * </pre>
+     * 
+     * @return this context's path
+     */
+    public abstract String getPath();
+
+    /**
+     * Returns an attribute value for container's configuration
+     * and other data that can be used by jax-ws runtime.
+     *
+     * @param name attribute name
+     * @return attribute value
+     */
+    public abstract Object getAttribute(String name);
+
+    /**
+     * Returns all attribute names for container's configuration
+     * and other data that can be used by jax-ws runtime.
+     *
+     * @return set of all attribute names
+     */
+    public abstract Set<String> getAttributeNames();
+
+}
\ No newline at end of file

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpExchange.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpExchange.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpExchange.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,308 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.spi.http;
+
+import javax.xml.ws.handler.MessageContext;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.security.Principal;
+
+/**
+ * This class encapsulates a HTTP request received and a 
+ * response to be generated in one exchange. It provides methods 
+ * for examining the request from the client, and for building and
+ * sending the response.
+ * <p>
+ * A <code>HttpExchange</code> must be closed to free or reuse
+ * underlying resources. The effect of failing to close an exchange
+ * is undefined.
+ *
+ * @author Jitendra Kotamraju
+ * @since JAX-WS 2.2
+ */
+public abstract class HttpExchange {
+
+    /**
+     * Standard property: cipher suite value when the request is received
+     * over HTTPS
+     * <p>Type: String
+     */
+    public static final String REQUEST_CIPHER_SUITE =
+            "javax.xml.ws.spi.http.request.cipher.suite";
+
+    /**
+     * Standard property: bit size of the algorithm when the request is
+     * received over HTTPS
+     * <p>Type: Integer
+     */
+    public static final String REQUEST_KEY_SIZE =
+            "javax.xml.ws.spi.http.request.key.size";
+
+    /**
+     * Standard property: A SSL certificate, if any, associated with the request
+     *
+     * <p>Type: java.security.cert.X509Certificate[]
+     * The order of this array is defined as being in ascending order of trust.
+     * The first certificate in the chain is the one set by the client, the next
+     * is the one used to authenticate the first, and so on.
+     */
+    public static final String REQUEST_X509CERTIFICATE =
+            "javax.xml.ws.spi.http.request.cert.X509Certificate";
+
+    /**
+     * Returns an immutable Map containing the HTTP headers that were 
+     * included with this request. The keys in this Map will be the header 
+     * names, while the values will be a List of Strings containing each value 
+     * that was included (either for a header that was listed several times, 
+     * or one that accepts a comma-delimited list of values on a single line). 
+     * In either of these cases, the values for the header name will be 
+     * presented in the order that they were included in the request.
+     * <p>
+     * The keys in Map are case-insensitive.
+     *
+     * @return an immutable Map which can be used to access request headers
+     */
+    public abstract Map<String, List<String>> getRequestHeaders();
+
+    /**
+     * Returns the value of the specified request header. If the request
+     * did not include a header of the specified name, this method returns
+     * null. If there are multiple headers with the same name, this method
+     * returns the first header in the request. The header name is
+     * case-insensitive. This is a convienence method to get a header
+     * (instead of using the {@link #getRequestHeaders}).
+     *
+     * @param name the name of the request header
+     * @return returns the value of the requested header,
+     *         or null if the request does not have a header of that name
+     */
+     public abstract String getRequestHeader(String name);
+
+    /**
+     * Returns a mutable Map into which the HTTP response headers can be stored
+     * and which will be transmitted as part of this response. The keys in the 
+     * Map will be the header names, while the values must be a List of Strings
+     * containing each value that should be included multiple times 
+     * (in the order that they should be included).
+     * <p>
+     * The keys in Map are case-insensitive.
+     *
+     * @return a mutable Map which can be used to set response headers.
+     */
+    public abstract Map<String, List<String>> getResponseHeaders();
+
+    /**
+     * Adds a response header with the given name and value. This method
+     * allows a response header to have multiple values. This is a
+     * convenience method to add a response header(instead of using the
+     * {link #getResponseHeaders()}).
+     * 
+     * @param name the name of the header
+     * @param value the additional header value. If it contains octet string,
+     *        it should be encoded according to
+     *        RFC 2047 (http://www.ietf.org/rfc/rfc2047.txt)
+     *
+     * @see #getResponseHeaders
+     */
+    public abstract void addResponseHeader(String name, String value);
+
+    /**
+     * Returns the part of the request's URI from the protocol
+     * name up to the query string in the first line of the HTTP request.
+     * Container doesn't decode this string.
+     *
+     * @return the request URI 
+     */
+    public abstract String getRequestURI();
+
+    /**
+     * Returns the context path of all the endpoints in an application.
+     * This path is the portion of the request URI that indicates the
+     * context of the request. The context path always comes first in a
+     * request URI. The path starts with a "/" character but does not
+     * end with a "/" character. If this method returns "", the request
+     * is for default context. The container does not decode this string.
+     *
+     * <p>
+     * Context path is used in computing the endpoint address. See
+     * {@link HttpContext#getPath}
+     *
+     * @return context path of all the endpoints in an application
+     * @see HttpContext#getPath
+     */
+    public abstract String getContextPath();
+
+    /**
+     * Get the HTTP request method
+     *
+     * @return the request method
+     */
+    public abstract String getRequestMethod();
+
+    /**
+     * Returns a {@link HttpContext} for this exchange.
+     * Container matches the request with the associated Endpoint's HttpContext
+     *
+     * @return the HttpContext for this exchange
+     */
+    public abstract HttpContext getHttpContext();
+
+    /**
+     * This must be called to end an exchange. Container takes care of
+     * closing request and response streams. This must be called so that
+     * the container can free or reuse underlying resources.
+     *
+     * @throws IOException if any i/o error
+     */
+    public abstract void close() throws IOException;
+
+    /**
+     * Returns a stream from which the request body can be read.
+     * Multiple calls to this method will return the same stream.
+     *
+     * @return the stream from which the request body can be read.
+     * @throws IOException if any i/o error during request processing
+     */
+    public abstract InputStream getRequestBody() throws IOException;
+
+    /**
+     * Returns a stream to which the response body must be
+     * written. {@link #setStatus}) must be called prior to calling
+     * this method. Multiple calls to this method (for the same exchange)
+     * will return the same stream.
+     *
+     * @return the stream to which the response body is written
+     * @throws IOException if any i/o error during response processing
+     */
+    public abstract OutputStream getResponseBody() throws IOException;
+
+    /**
+     * Sets the HTTP status code for the response.
+     *
+     * <p>
+     * This method must be called prior to calling {@link #getResponseBody}.
+     *
+     * @param status the response code to send
+     * @see #getResponseBody
+     */
+    public abstract void setStatus(int status);
+
+    /**
+     * Returns the unresolved address of the remote entity invoking
+     * this request.
+     *
+     * @return the InetSocketAddress of the caller
+     */
+    public abstract InetSocketAddress getRemoteAddress();
+
+    /**
+     * Returns the unresolved local address on which the request was received.
+     *
+     * @return the InetSocketAddress of the local interface
+     */
+    public abstract InetSocketAddress getLocalAddress();
+
+    /**
+     * Returns the protocol string from the request in the form 
+     * <i>protocol/majorVersion.minorVersion</i>. For example,
+     * "HTTP/1.1"
+     *
+     * @return the protocol string from the request
+     */
+    public abstract String getProtocol();
+
+    /**
+     * Returns the name of the scheme used to make this request,
+     * for example: http, or https.
+     *
+     * @return name of the scheme used to make this request
+     */
+    public abstract String getScheme();
+
+    /**
+     * Returns the extra path information that follows the web service
+     * path but precedes the query string in the request URI and will start
+     * with a "/" character.
+     *
+     * <p>
+     * This can be used for {@link MessageContext#PATH_INFO}
+     *
+     * @return decoded extra path information of web service.
+     *         It is the path that comes
+     *         after the web service path but before the query string in the
+     *         request URI
+     *         <tt>null</tt> if there is no extra path in the request URI
+     */
+    public abstract String getPathInfo();
+
+    /**
+     * Returns the query string that is contained in the request URI
+     * after the path.
+     *
+     * <p>
+     * This can be used for {@link MessageContext#QUERY_STRING}
+     *
+     * @return undecoded query string of request URI, or
+     *         <tt>null</tt> if the request URI doesn't have one
+     */
+    public abstract String getQueryString();
+
+    /**
+     * Returns an attribute that is associated with this
+     * <code>HttpExchange</code>. JAX-WS handlers and endpoints may then
+     * access the attribute via {@link MessageContext}.
+     * <p>
+     * Servlet containers must expose {@link MessageContext#SERVLET_CONTEXT},
+     * {@link MessageContext#SERVLET_REQUEST}, and
+     * {@link MessageContext#SERVLET_RESPONSE}
+     * as attributes.
+     *
+     * <p>If the request has been received by the container using HTTPS, the
+     * following information must be exposed as attributes. These attributes
+     * are {@link #REQUEST_CIPHER_SUITE}, and {@link #REQUEST_KEY_SIZE}.
+     * If there is a SSL certificate associated with the request, it must
+     * be exposed using {@link #REQUEST_X509CERTIFICATE}
+     *
+     * @param name attribute name
+     * @return the attribute value, or <tt>null</tt> if the attribute doesn't
+     *         exist
+     */
+    public abstract Object getAttribute(String name);
+
+    /**
+     * Gives all the attribute names that are associated with
+     * this <code>HttpExchange</code>.
+     *
+     * @return set of all attribute names
+     * @see #getAttribute(String)
+     */
+    public abstract Set<String> getAttributeNames();
+    
+    /**
+     * Returns the {@link Principal} that represents the authenticated
+     * user for this <code>HttpExchange</code>.
+     *
+     * @return Principal for an authenticated user, or
+     *         <tt>null</tt> if not authenticated
+     */
+    public abstract Principal getUserPrincipal();
+
+    /**
+     * Indicates whether an authenticated user is included in the specified
+     * logical "role".
+     *
+     * @param role specifies the name of the role
+     * @return <tt>true</tt> if the user making this request belongs to a
+     *         given role
+     */
+    public abstract boolean isUserInRole(String role);
+
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpHandler.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpHandler.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/HttpHandler.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.spi.http;
+
+import javax.xml.ws.Endpoint;
+import java.io.IOException;
+
+/**
+ * A handler which is invoked to process HTTP requests.
+ * <p>
+ * JAX-WS runtime provides the implementation for this and sets
+ * it using {@link HttpContext#setHandler(HttpHandler)} during
+ * {@link Endpoint#publish(HttpContext) }
+ *
+ * @author Jitendra Kotamraju
+ * @since JAX-WS 2.2
+ */
+public abstract class HttpHandler {
+    /**
+     * Handles a given request and generates an appropriate response.
+     * See {@link HttpExchange} for a description of the steps
+     * involved in handling an exchange. Container invokes this method
+     * when it receives an incoming request.
+     *
+     * @param exchange the exchange containing the request from the 
+     *      client and used to send the response
+     * @throws IOException when an I/O error happens during request
+     *      handling
+     */
+    public abstract void handle(HttpExchange exchange) throws IOException;
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/package-info.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/package-info.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/http/package-info.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+/**
+  Provides HTTP SPI that is used for portable deployment of JAX-WS
+  web services in containers(for e.g. servlet containers). This SPI
+  is not for end developers but provides a way for the container
+  developers to deploy JAX-WS services portably.
+
+  <p>
+  The portable deployment is done as below:
+  <ol>
+  <li>Container creates {@link javax.xml.ws.Endpoint} objects for an
+  application. The necessary information to create Endpoint objects
+  may be got from web service deployment descriptor files.</li>
+  <li>Container needs to create {@link javax.xml.ws.spi.http.HttpContext}
+  objects for the deployment. For example, a HttpContext could be
+  created using servlet configuration(for e.g url-pattern) for the
+  web service in servlet container case.</li>
+  <li>Then publishes all the endpoints using
+  {@link javax.xml.ws.Endpoint#publish(HttpContext)}. During publish(),
+  JAX-WS runtime registers a {@link javax.xml.ws.spi.http.HttpHandler}
+  callback to handle incoming requests or
+  {@link javax.xml.ws.spi.http.HttpExchange} objects. The HttpExchange
+  object encapsulates a HTTP request and a response.
+  </ol>
+
+  <pre>
+  Container                               JAX-WS runtime
+  ---------                               --------------
+  1. Creates Invoker1, ... InvokerN
+  2. Provider.createEndpoint(...)     --> 3. creates Endpoint1
+     configures Endpoint1
+     ...
+  4. Provider.createEndpoint(...)     --> 5. creates EndpointN
+     configures EndpointN
+  6. Creates ApplicationContext
+  7. creates HttpContext1, ... HttpContextN
+  8. Endpoint1.publish(HttpContext1)  --> 9. creates HttpHandler1
+                                          HttpContext1.setHandler(HttpHandler1)
+     ...
+ 10. EndpointN.publish(HttpContextN)  --> 11. creates HttpHandlerN
+                                         HttpContextN.setHandler(HttpHandlerN)
+
+  </pre>
+
+  The request processing is done as below(for every request):
+  <pre>
+  Container                               JAX-WS runtime
+  ---------                               --------------
+  1. Creates a HttpExchange
+  2. Gets handler from HttpContext
+  3. HttpHandler.handle(HttpExchange) --> 4. reads request from HttpExchange
+                                      <-- 5. Calls Invoker
+  6. Invokes the actual instance
+                                          7. Writes the response to HttpExchange
+  </pre>
+
+  <p>
+  The portable undeployment is done as below:
+  <pre>
+  Container
+  ---------
+  1. @preDestroy on instances
+  2. Endpoint1.stop()
+  ...
+  3. EndpointN.stop()
+  </pre>
+
+  @author Jitendra Kotamraju
+  @since JAX-WS 2.2
+ */
+package javax.xml.ws.spi.http;

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/package.html
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/package.html	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/spi/package.html	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,5 @@
+<html>
+<body>
+This package defines SPIs for JAX-WS.
+</body>
+</html>

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.wsaddressing;
+
+
+import org.w3c.dom.Element;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.annotation.XmlAnyAttribute;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.namespace.QName;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.ws.EndpointReference;
+import javax.xml.ws.WebServiceException;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * This class represents a W3C Addressing EndpointReferece which is
+ * a remote reference to a web service endpoint that supports the
+ * W3C WS-Addressing 1.0 - Core Recommendation.
+ * <p>
+ * Developers should use this class in their SEIs if they want to
+ * pass/return endpoint references that represent the W3C WS-Addressing
+ * recommendation.
+ * <p>
+ * JAXB will use the JAXB annotations and bind this class to XML infoset
+ * that is consistent with that defined by WS-Addressing.  See
+ * <a href="http://www.w3.org/TR/2006/REC-ws-addr-core-20060509/">
+ * WS-Addressing</a> 
+ * for more information on WS-Addressing EndpointReferences.
+ *
+ * @since JAX-WS 2.1
+ */
+
+// XmlRootElement allows this class to be marshalled on its own
+ at XmlRootElement(name="EndpointReference",namespace=W3CEndpointReference.NS)
+ at XmlType(name="EndpointReferenceType",namespace=W3CEndpointReference.NS)
+public final class W3CEndpointReference extends EndpointReference {
+    
+    private final static JAXBContext w3cjc = getW3CJaxbContext();
+
+    protected W3CEndpointReference() {
+    }
+    
+    /**
+     * Creates an EPR from infoset representation
+     *
+     * @param source A source object containing valid XmlInfoset
+     * instance consistent with the W3C WS-Addressing Core
+     * recommendation.
+     *
+     * @throws WebServiceException 
+     *   If the source does NOT contain a valid W3C WS-Addressing
+     *   EndpointReference.
+     * @throws NullPointerException 
+     *   If the <code>null</code> <code>source</code> value is given
+     */
+    public W3CEndpointReference(Source source) {
+        try {
+            W3CEndpointReference epr = w3cjc.createUnmarshaller().unmarshal(source,W3CEndpointReference.class).getValue();
+            this.address = epr.address;
+            this.metadata = epr.metadata;
+            this.referenceParameters = epr.referenceParameters;
+            this.elements = epr.elements;
+            this.attributes = epr.attributes;
+        } catch (JAXBException e) {
+            throw new WebServiceException("Error unmarshalling W3CEndpointReference " ,e);
+        } catch (ClassCastException e) {
+            throw new WebServiceException("Source did not contain W3CEndpointReference", e);
+        }
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void writeTo(Result result){
+        try {
+            Marshaller marshaller = w3cjc.createMarshaller();
+            marshaller.marshal(this, result);
+        } catch (JAXBException e) {
+            throw new WebServiceException("Error marshalling W3CEndpointReference. ", e);
+        }
+    }
+    
+    private static JAXBContext getW3CJaxbContext() {
+        try {
+            return JAXBContext.newInstance(W3CEndpointReference.class);
+        } catch (JAXBException e) {
+            throw new WebServiceException("Error creating JAXBContext for W3CEndpointReference. ", e);
+        }
+    }
+    
+    // private but necessary properties for databinding
+    @XmlElement(name="Address",namespace=NS)
+    private Address address;
+    @XmlElement(name="ReferenceParameters",namespace=NS)
+    private Elements referenceParameters;
+    @XmlElement(name="Metadata",namespace=NS)
+    private Elements metadata;
+    // attributes and elements are not private for performance reasons
+    // (JAXB can bypass reflection)
+    @XmlAnyAttribute
+    Map<QName,String> attributes;
+    @XmlAnyElement
+    List<Element> elements;
+    
+    
+    private static class Address {
+        protected Address() {}
+        @XmlValue
+        String uri;
+        @XmlAnyAttribute
+        Map<QName,String> attributes;
+    }
+    
+    
+    private static class Elements {
+        protected Elements() {}
+        @XmlAnyElement
+        List<Element> elements;
+        @XmlAnyAttribute
+        Map<QName,String> attributes;
+    }
+    
+    protected static final String NS = "http://www.w3.org/2005/08/addressing";
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,336 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package javax.xml.ws.wsaddressing;
+
+
+import org.w3c.dom.Element;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import javax.xml.namespace.QName;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.spi.Provider;
+
+
+/**
+ * This class is used to build <code>W3CEndpointReference</code>
+ * instances. The intended use of this clsss is for
+ * an application component, for example a factory component,
+ * to create an <code>W3CEndpointReference</code> for a
+ * web service endpoint published by the same 
+ * Java EE application. It can also be used to create
+ * <code>W3CEndpointReferences</code> for an Java SE based
+ * endpoint by providing the <code>address</code> property.
+ * <p>
+ * When creating a <code>W3CEndpointReference</code> for an
+ * endpoint that is not published by the same Java EE application,
+ * the <code>address</code> property MUST be specified.  
+ * <p>
+ * When creating a <code>W3CEndpointReference</code> for an endpoint 
+ * published by the same Java EE application, the <code>address</code>
+ * property MAY be <code>null</code> but then the <code>serviceName</code>
+ * and <code>endpointName</code> MUST specify an endpoint published by
+ * the same Java EE application.
+ * <p>
+ * When the <code>wsdlDocumentLocation</code> is specified it MUST refer
+ * to a valid WSDL document and the <code>serviceName</code> and
+ * <code>endpointName</code> (if specified) MUST match a service and port 
+ * in the WSDL document.
+ *
+ * @since JAX-WS 2.1
+ */
+public final class W3CEndpointReferenceBuilder {
+    /**
+     * Creates a new <code>W3CEndpointReferenceBuilder</code> instance.
+     */
+    public W3CEndpointReferenceBuilder() {
+        referenceParameters = new ArrayList<Element>();
+        metadata = new ArrayList<Element>();
+        attributes = new HashMap<QName, String>();
+        elements = new ArrayList<Element>();
+    }
+    
+    /**
+     * Sets the <code>address</code> to the
+     * <code>W3CEndpointReference</code> instance's
+     * <code>wsa:Address</code>.
+     * <p>
+     * The <code>address</code> MUST be set to a non-<code>null</code>
+     * value when building a <code>W3CEndpointReference</code> for a 
+     * web service endpoint that is not published by the same
+     * Java EE application or when running on Java SE.
+     *
+     * @param address The address of the endpoint to be targeted
+     *      by the returned <code>W3CEndpointReference<code>.
+     *
+     * @return A <code>W3CEndpointReferenceBuilder</code> instance with
+     *   the <code>address</code> set to the <code>wsa:Address</code>.
+     */
+    public W3CEndpointReferenceBuilder address(String address) {
+        this.address = address;
+        return this;
+    }
+
+    /**
+     * Sets the <code>interfaceName</code> as the
+     * <code>wsam:InterfaceName</code> element in the
+     * <code>wsa:Metadata</code> element.
+     *
+     * See <a href="http://www.w3.org/TR/2007/REC-ws-addr-metadata-20070904/#refmetadatfromepr">
+     * 2.1 Referencing WSDL Metadata from an EPR</a> for more details.
+     *
+     * @param interfaceName The port type name of the endpoint to be targeted
+     *      by the returned <code>W3CEndpointReference<code>.
+     *
+     * @return A <code>W3CEndpointReferenceBuilder</code> instance with
+     *   the <code>interfaceName</code> as <code>wsam:InterfaceName</code>
+     *   element added to the <code>wsa:Metadata</code> element
+     */
+    public W3CEndpointReferenceBuilder interfaceName(QName interfaceName) {
+        this.interfaceName = interfaceName;
+        return this;
+    }
+    
+    /**
+     * Sets the <code>serviceName</code> as the
+     * <code>wsam:ServiceName</code> element in the
+     * <code>wsa:Metadata</code> element.
+     *
+     * See <a href="http://www.w3.org/TR/2007/REC-ws-addr-metadata-20070904/#refmetadatfromepr">
+     * 2.1 Referencing WSDL Metadata from an EPR</a> for more details.
+     *
+     * @param serviceName The service name of the endpoint to be targeted
+     *      by the returned <code>W3CEndpointReference<code>.  This property
+     *      may also be used with the <code>endpointName</code> (portName) 
+     *      property to lookup the <code>address</code> of a web service 
+     *      endpoint that is published by the same Java EE application.
+     *
+     * @return A <code>W3CEndpointReferenceBuilder</code> instance with
+     *   the <code>serviceName</code> as <code>wsam:ServiceName</code>
+     *   element added to the <code>wsa:Metadata</code> element
+     *
+     */
+    public W3CEndpointReferenceBuilder serviceName(QName serviceName) {
+        this.serviceName = serviceName;
+        return this;
+    }
+    
+    /**
+     * Sets the <code>endpointName</code> as
+     * <code>wsam:ServiceName/@EndpointName</code> in the
+     * <code>wsa:Metadata</code> element. This method can only be called
+     * after the {@link #serviceName} method has been called.
+     * <p>
+     * See <a href="http://www.w3.org/TR/2007/REC-ws-addr-metadata-20070904/#refmetadatfromepr">
+     * 2.1 Referencing WSDL Metadata from an EPR</a> for more details.
+     *
+     * @param endpointName The name of the endpoint to be targeted
+     *      by the returned <code>W3CEndpointReference<code>. The 
+     *      <code>endpointName</code> (portName) property may also be
+     *      used with the <code>serviceName</code> property to lookup 
+     *      the <code>address</code> of a web service 
+     *      endpoint published by the same Java EE application.
+     *
+     * @return A <code>W3CEndpointReferenceBuilder</code> instance with
+     *   the <code>endpointName</code> as
+     * <code>wsam:ServiceName/@EndpointName</code> in the
+     * <code>wsa:Metadata</code> element.
+     *
+     * @throws IllegalStateException, if the <code>serviceName</code>
+     * has not been set.
+     * @throws IllegalArgumentException, if the <code>endpointName</code>'s
+     * Namespace URI doesn't match <code>serviceName</code>'s Namespace URI
+     *
+     */
+    public W3CEndpointReferenceBuilder endpointName(QName endpointName) {
+        if (serviceName == null) {
+            throw new IllegalStateException("The W3CEndpointReferenceBuilder's serviceName must be set before setting the endpointName: "+endpointName);
+        }
+        
+        this.endpointName = endpointName;
+        return this;
+    }
+    
+    /**
+     * Sets the <code>wsdlDocumentLocation</code> that will be referenced
+     * as <code>wsa:Metadata/@wsdli:wsdlLocation</code>. The namespace name
+     * for the wsdli:wsdlLocation's value can be taken from the WSDL itself.
+     *
+     * <p>
+     * See <a href="http://www.w3.org/TR/2007/REC-ws-addr-metadata-20070904/#refmetadatfromepr">
+     * 2.1 Referencing WSDL Metadata from an EPR</a> for more details.
+     *
+     * @param wsdlDocumentLocation The location of the WSDL document to
+     *      be referenced in the <code>wsa:Metadata</code> of the
+     *     <code>W3CEndpointReference<code>.
+     * @return A <code>W3CEndpointReferenceBuilder</code> instance with
+     *   the <code>wsdlDocumentLocation</code> that is to be referenced.
+     */
+    public W3CEndpointReferenceBuilder wsdlDocumentLocation(String wsdlDocumentLocation) {
+        this.wsdlDocumentLocation = wsdlDocumentLocation;
+        return this;
+    }
+    
+    /**
+     * Adds the <code>referenceParameter</code> to the
+     * <code>W3CEndpointReference</code> instance
+     * <code>wsa:ReferenceParameters</code> element.
+     *
+     * @param referenceParameter The element to be added to the
+     *      <code>wsa:ReferenceParameters</code> element.
+     *
+     * @return A <code>W3CEndpointReferenceBuilder</code> instance with
+     *   the <code>referenceParameter</code> added to the
+     *   <code>wsa:ReferenceParameters</code> element.
+     *
+     * @throws java.lang.IllegalArgumentException if <code>referenceParameter</code>
+     * is <code>null</code>.
+     */
+    public W3CEndpointReferenceBuilder referenceParameter(Element referenceParameter) {
+        if (referenceParameter == null)
+            throw new java.lang.IllegalArgumentException("The referenceParameter cannot be null.");
+        referenceParameters.add(referenceParameter);
+        return this;
+    }
+    
+    /**
+     * Adds the <code>metadataElement</code> to the
+     * <code>W3CEndpointReference</code> instance's
+     * <code>wsa:Metadata</code> element.
+     *
+     * @param metadataElement The element to be added to the
+     *      <code>wsa:Metadata</code> element.
+     *
+     * @return A <code>W3CEndpointReferenceBuilder</code> instance with
+     *   the <code>metadataElement</code> added to the
+     *    <code>wsa:Metadata</code> element.
+     *
+     * @throws java.lang.IllegalArgumentException if <code>metadataElement</code>
+     * is <code>null</code>.
+     */
+    public W3CEndpointReferenceBuilder metadata(Element metadataElement) {
+        if (metadataElement == null)
+            throw new java.lang.IllegalArgumentException("The metadataElement cannot be null.");
+        metadata.add(metadataElement);
+        return this;
+    }
+
+    /**
+     * Adds an extension element to the
+     * <code>W3CEndpointReference</code> instance's
+     * <code>wsa:EndpointReference</code> element.
+     *
+     * @param element The extension element to be added to the
+     *   <code>W3CEndpointReference</code>
+     * @return A <code>W3CEndpointReferenceBuilder</code> instance with
+     *   the extension <code>element</code> added to the
+     *    <code>W3CEndpointReference</code> instance.
+     * @throws java.lang.IllegalArgumentException if <code>element</code>
+     * is <code>null</code>.
+     *
+     * @since JAX-WS 2.2
+     */
+    public W3CEndpointReferenceBuilder element(Element element) {
+        if (element == null) {
+            throw new IllegalArgumentException("The extension element cannot be null.");
+        }
+        elements.add(element);
+        return this;
+    }
+
+    /**
+     * Adds an extension attribute to the
+     * <code>W3CEndpointReference</code> instance's
+     * <code>wsa:EndpointReference</code> element.
+     *
+     * @param name The name of the extension attribute to be added to the
+     *   <code>W3CEndpointReference</code>
+     * @param value extension attribute value
+     * @return A <code>W3CEndpointReferenceBuilder</code> instance with
+     *   the extension attribute added to the <code>W3CEndpointReference</code>
+     *   instance.
+     * @throws java.lang.IllegalArgumentException if <code>name</code>
+     *   or <code>value</code> is <code>null</code>.
+     *
+     * @since JAX-WS 2.2
+     */
+    public W3CEndpointReferenceBuilder attribute(QName name, String value) {
+        if (name == null || value == null) {
+            throw new IllegalArgumentException("The extension attribute name or value cannot be null.");
+        }
+        attributes.put(name, value);
+        return this;
+    }
+    
+    /**
+     * Builds a <code>W3CEndpointReference</code> from the accumulated
+     * properties set on this <code>W3CEndpointReferenceBuilder</code>
+     * instance.
+     * <p>
+     * This method can be used to create a <code>W3CEndpointReference</code>
+     * for any endpoint by specifying the <code>address</code> property along
+     * with any other desired properties.  This method
+     * can also be used to create a <code>W3CEndpointReference</code> for
+     * an endpoint that is published by the same Java EE application.
+     * This method can automatically determine the <code>address</code> of 
+     * an endpoint published by the same Java EE application that is identified by the 
+     * <code>serviceName</code> and 
+     * <code>endpointName</code> properties.  If the <code>address</code> is 
+     * <code>null</code> and the <code>serviceName</code> and 
+     * <code>endpointName</code> 
+     * do not identify an endpoint published by the same Java EE application, a 
+     * <code>java.lang.IllegalStateException</code> MUST be thrown.
+     * 
+     *
+     * @return <code>W3CEndpointReference</code> from the accumulated
+     * properties set on this <code>W3CEndpointReferenceBuilder</code>
+     * instance. This method never returns <code>null</code>.
+     *
+     * @throws IllegalStateException
+     *     <ul>
+     *        <li>If the <code>address</code>, <code>serviceName</code> and
+     *            <code>endpointName</code> are all <code>null</code>.
+     *        <li>If the <code>serviceName</code> service is <code>null</code> and the
+     *            <code>endpointName</code> is NOT <code>null</code>.
+     *        <li>If the <code>address</code> property is <code>null</code> and
+     *            the <code>serviceName</code> and <code>endpointName</code> do not
+     *            specify a valid endpoint published by the same Java EE
+     *            application.
+     *        <li>If the <code>serviceName</code> is NOT <code>null</code>
+     *             and is not present in the specified WSDL.
+     *        <li>If the <code>endpointName</code> port is not <code>null</code> and it
+     *             is not present in <code>serviceName</code> service in the WSDL.
+     *        <li>If the <code>wsdlDocumentLocation</code> is NOT <code>null</code>
+     *            and does not represent a valid WSDL.
+     *     </ul>
+     * @throws WebServiceException If an error occurs while creating the 
+     *                             <code>W3CEndpointReference</code>.
+     *       
+     */
+    public W3CEndpointReference build() {
+        if (elements.isEmpty() && attributes.isEmpty() && interfaceName == null) {
+            // 2.1 API
+            return Provider.provider().createW3CEndpointReference(address,
+                serviceName, endpointName, metadata, wsdlDocumentLocation,
+                referenceParameters);
+        }
+        return Provider.provider().createW3CEndpointReference(address,
+                interfaceName, serviceName, endpointName, metadata, wsdlDocumentLocation,
+                referenceParameters, elements, attributes);
+    }
+    
+    private String address;
+    private List<Element> referenceParameters;
+    private List<Element> metadata;
+    private QName interfaceName;
+    private QName serviceName;
+    private QName endpointName;
+    private String wsdlDocumentLocation;
+    private Map<QName,String> attributes;
+    private List<Element> elements;
+}

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/package-info.java
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/package-info.java	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/package-info.java	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,9 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+
+ at javax.xml.bind.annotation.XmlSchema(namespace=W3CEndpointReference.NS,
+                                     location="http://www.w3.org/2006/03/addressing/ws-addr.xsd")
+package javax.xml.ws.wsaddressing;

Added: projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/package.html
===================================================================
--- projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/package.html	                        (rev 0)
+++ projects/specs/trunk/jboss-jaxws-api_2.2_spec/src/main/java/javax/xml/ws/wsaddressing/package.html	2010-05-18 01:17:48 UTC (rev 104893)
@@ -0,0 +1,5 @@
+<html>
+<body>
+This package defines APIs related to WS-Addressing.
+</body>
+</html>




More information about the jboss-cvs-commits mailing list