[jbossws-commits] JBossWS SVN: r9107 - in stack/native/trunk: modules/core/src/main/java/org/jboss/ws/core and 28 other directories.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Fri Jan 23 10:32:15 EST 2009


Author: alessio.soldano at jboss.com
Date: 2009-01-23 10:32:14 -0500 (Fri, 23 Jan 2009)
New Revision: 9107

Added:
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/EndpointReferenceUtil.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientFeatureProcessor.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Action.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/EndpointReference.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/FaultAction.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/RespectBinding.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/RespectBindingFeature.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/WebServiceFeature.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/Addressing.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/AddressingFeature.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/MTOM.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/MTOMFeature.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/WebServiceFeatureAnnotation.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java
   stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/common/wsdl11/WSDLExtensElemTestCase.java
   stack/native/trunk/modules/testsuite/native-tests/src/test/resources/common/wsdl11/PolicyAttachmentAndUnknownExtElem.wsdl
Removed:
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Action.java
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Binding21.java
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Endpoint21.java
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/EndpointReference.java
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/FaultAction.java
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/RespectBinding.java
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/RespectBindingFeature.java
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Service21.java
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/WebServiceContext21.java
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/WebServiceFeature.java
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/handler/
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/soap/
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/spi/
   stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/wsaddressing/
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java
Modified:
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/FastInfoset.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/JsonEncoding.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/SchemaValidation.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/CommonBindingProvider.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/DynamicWrapperGenerator.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/BindingExt.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/BindingProviderImpl.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/EndpointImpl.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ProviderImpl.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/utils/JavassistUtils.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/addressing/jaxws/WSAddressingClientHandler.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/addressing/jaxws/WSAddressingServerHandler.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/eventing/jaxws/EventingService.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/EndpointFeatureProcessor.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilder.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSWebServiceMetaDataBuilder.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/config/binding/OMFactoryJAXWS.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/umdm/WrappedParameter.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/wsdl/Extendable.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/jaxws/impl/SourceWrapperGenerator.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/jaxws/impl/SunRIConsumerImpl.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Binding.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/BindingProvider.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Endpoint.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Service.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/WebServiceContext.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/handler/MessageContext.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/Provider.java
   stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/ServiceDelegate.java
   stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/endpoint/EndpointServlet.java
   stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/epr/EndpointReferenceTestCase.java
   stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/fastinfoset/FastInfosetTestCase.java
   stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws1172/JBWS1172TestCase.java
   stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/json/JsonTestCase.java
   stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsaddressing/AddressingStatefulTestCase.java
   stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsaddressing/StatefulEndpointImpl.java
   stack/native/trunk/src/main/scripts/assembly-bin-dist.xml
Log:
[JBWS-2441] Merging jaxws21 branch to trunk (svn merge -r 9008:HEAD https://svn.jboss.org/repos/jbossws/stack/native/branches/jaxws21)


Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/FastInfoset.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/FastInfoset.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/FastInfoset.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -26,6 +26,8 @@
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
+
 import org.jboss.ws.feature.FastInfosetFeature;
 
 /**
@@ -37,6 +39,7 @@
 @Retention(value = RetentionPolicy.RUNTIME)
 @Target(value = { ElementType.TYPE })
 @EndpointFeature( id = FastInfosetFeature.ID)
+ at WebServiceFeatureAnnotation(id = FastInfosetFeature.ID, bean = FastInfosetFeature.class)
 public @interface FastInfoset {
    
    /**

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/JsonEncoding.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/JsonEncoding.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/JsonEncoding.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -26,6 +26,8 @@
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
+
 import org.jboss.ws.feature.JsonEncodingFeature;
 
 /**
@@ -37,6 +39,7 @@
 @Retention(value = RetentionPolicy.RUNTIME)
 @Target(value = { ElementType.TYPE })
 @EndpointFeature(id = JsonEncodingFeature.ID)
+ at WebServiceFeatureAnnotation(id = JsonEncodingFeature.ID, bean = JsonEncodingFeature.class)
 public @interface JsonEncoding {
 
    /**

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/SchemaValidation.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/SchemaValidation.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/annotation/SchemaValidation.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -26,6 +26,8 @@
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
+
 import org.jboss.ws.extensions.validation.StrictlyValidErrorHandler;
 import org.jboss.ws.feature.SchemaValidationFeature;
 
@@ -39,6 +41,7 @@
 @Retention(value = RetentionPolicy.RUNTIME)
 @Target(value = { ElementType.TYPE })
 @EndpointFeature( id = SchemaValidationFeature.ID)
+ at WebServiceFeatureAnnotation(id = SchemaValidationFeature.ID, bean = SchemaValidationFeature.class)
 public @interface SchemaValidation 
 {
    /**

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/CommonBindingProvider.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/CommonBindingProvider.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/CommonBindingProvider.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -23,12 +23,16 @@
 
 import java.util.Observable;
 
+import javax.xml.ws.EndpointReference;
 import javax.xml.ws.http.HTTPBinding;
 import javax.xml.ws.soap.SOAPBinding;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
 
 import org.jboss.logging.Logger;
 import org.jboss.ws.core.jaxrpc.SOAP11BindingJAXRPC;
 import org.jboss.ws.core.jaxrpc.SOAP12BindingJAXRPC;
+import org.jboss.ws.core.jaxws.binding.EndpointReferenceUtil;
 import org.jboss.ws.core.jaxws.binding.HTTPBindingJAXWS;
 import org.jboss.ws.core.jaxws.binding.SOAP11BindingJAXWS;
 import org.jboss.ws.core.jaxws.binding.SOAP12BindingJAXWS;
@@ -103,6 +107,42 @@
       return binding;
    }
 
+   public EndpointReference getEndpointReference()
+   {
+      if (binding instanceof HTTPBinding )
+      {
+         throw new UnsupportedOperationException("Cannot get EPR for BindingProvider instances using the XML/HTTP binding");
+      }
+      return getEndpointReference(W3CEndpointReference.class);
+   }
+
+   public <T extends EndpointReference> T getEndpointReference(Class<T> clazz)
+   {
+      // Conformance 4.5 (javax.xml.ws.BindingProvider.getEndpointReference): An implementation
+      // MUST be able to return an javax.xml.ws.EndpointReference for the target endpoint if a SOAP binding
+      // is being used. If the BindingProvider instance has a binding that is either SOAP 1.1/HTTP or
+      // SOAP 1.2/HTTP, then a W3CEndpointReference MUST be returned. If the binding is XML/HTTP an
+      // java.lang.UnsupportedOperationExceptionMUST be thrown.
+
+      if (binding instanceof HTTPBinding )
+      {
+         throw new UnsupportedOperationException("Cannot get epr for BindingProvider instances using the XML/HTTP binding");
+      }
+      W3CEndpointReferenceBuilder builder = new W3CEndpointReferenceBuilder();
+      if (epMetaData != null)
+      {
+         builder.address(epMetaData.getEndpointAddress());
+         builder.serviceName(epMetaData.getServiceMetaData().getServiceName());
+         builder.endpointName(epMetaData.getPortName());
+         builder.wsdlDocumentLocation(epMetaData.getEndpointAddress() + "?wsdl");
+      }
+      else
+      {
+         log.warn("Cannot get endpoint reference info from endpoint metadata!");
+      }
+      return EndpointReferenceUtil.transform(clazz, builder.build());
+   }
+
    public void update(Observable observable, Object object)
    {
       if(log.isDebugEnabled()) log.debug("Update config: " + object);

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/DynamicWrapperGenerator.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/DynamicWrapperGenerator.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/DynamicWrapperGenerator.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -41,10 +41,12 @@
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttachmentRef;
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlList;
 import javax.xml.bind.annotation.XmlMimeType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import javax.xml.namespace.QName;
 
 import org.jboss.logging.Logger;
@@ -122,7 +124,7 @@
                   parameter.getName(), parameter.getVariable(),
                   parameter.getTypeArguments(),
                   new boolean[] {parameter.isSwaRef(), parameter.isXop()},
-                  false
+                  false, parameter.isXmlList(), parameter.getAdapter()
             );
          }
          clazz.stopPruning(!prune);
@@ -159,7 +161,7 @@
             addProperty(
                   clazz, prop.getReturnType().getName(),
                   new QName(prop.getName()), prop.getName(), null,
-                  new boolean[] {false, false}, prop.isTransientAnnotated()
+                  new boolean[] {false, false}, prop.isTransientAnnotated(), false, null
             );
 
          clazz.stopPruning(!prune);
@@ -216,7 +218,7 @@
 
    private void addProperty(CtClass clazz, String typeName,
                             QName name, String variable, String[] typeArguments,
-                            boolean[] attachments, boolean xmlTransient)
+                            boolean[] attachments, boolean xmlTransient, boolean xmlList, String adapter)
          throws CannotCompileException, NotFoundException
    {
       ConstPool constPool = clazz.getClassFile().getConstPool();
@@ -232,6 +234,12 @@
          JavassistUtils.addSignature(field, typeSignature);
       }
 
+      
+      // Conformance 3.14 (use of JAXB annotations): An implementation MUST honor any JAXB annotation that
+      // exists on an SEI method or parameter to assure that the proper XML infoset is used when marshalling/
+      // unmarshalling the the return value or parameters of the method. The set of JAXB annotations that MUST be
+      // supported are: javax.xml.bind.annotation.XmlAttachementRef,javax.xml.bind.annotation.XmlList,
+      // javax.xml.bind.XmlMimeType and javax.xml.bind.annotation.adapters.Xml.JavaTypeAdapter
       JavassistUtils.Annotation annotation;
       // Add @XmlElement
       if (!xmlTransient)
@@ -261,6 +269,19 @@
          annotation = JavassistUtils.createAnnotation(XmlTransient.class, constPool);
          annotation.markField(field);
       }
+      //@XmlList
+      if(xmlList)
+      {
+         annotation = JavassistUtils.createAnnotation(XmlList.class, constPool);
+         annotation.markField(field);
+      }
+      //@XmlJavaTypeAdapter
+      if (adapter != null)
+      {
+         annotation = JavassistUtils.createAnnotation(XmlJavaTypeAdapter.class, constPool);
+         annotation.addClassParameter("value", adapter);
+         annotation.markField(field);
+      }
       clazz.addField(field);
 
       // Add accessor methods

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/BindingExt.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/BindingExt.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/BindingExt.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -23,7 +23,7 @@
 
 import java.util.List;
 
-import javax.xml.ws.Binding21;
+import javax.xml.ws.Binding;
 import javax.xml.ws.handler.Handler;
 
 import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerMetaData.HandlerType;
@@ -34,7 +34,7 @@
  * @author Thomas.Diesler at jboss.com
  * @since 04-Jul-2006
  */
-public interface BindingExt extends Binding21
+public interface BindingExt extends Binding
 {
    /** Get the handler chain for a given type */
    List<Handler> getHandlerChain(HandlerType handlerType);

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/BindingProviderImpl.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/BindingProviderImpl.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/BindingProviderImpl.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -25,13 +25,11 @@
 import java.util.Map;
 
 import javax.xml.ws.Binding;
-import javax.xml.ws.EndpointReference;
+import javax.xml.ws.BindingProvider;
 import javax.xml.ws.WebServiceException;
-import javax.xml.ws.wsaddressing.BindingProvider21;
 import javax.xml.ws.Service.Mode;
 import javax.xml.ws.http.HTTPBinding;
 
-import org.jboss.util.NotImplementedException;
 import org.jboss.ws.core.CommonBindingProvider;
 import org.jboss.ws.metadata.umdm.EndpointMetaData;
 import org.jboss.ws.metadata.umdm.EndpointMetaData.Type;
@@ -43,7 +41,7 @@
  * @author Thomas.Diesler at jboss.com
  * @since 04-Jul-2006
  */
-public class BindingProviderImpl extends CommonBindingProvider implements BindingProvider21
+public class BindingProviderImpl extends CommonBindingProvider implements BindingProvider
 {
    private Map<String, Object> requestContext = new HashMap<String, Object>();
    private Map<String, Object> responseContext = new HashMap<String, Object>();
@@ -94,14 +92,4 @@
    {
       return (Binding)binding;
    }
-
-   public EndpointReference getEndpointReference()
-   {
-      throw new NotImplementedException();
-   }
-
-   public <T extends EndpointReference> T getEndpointReference(Class<T> clazz)
-   {
-      throw new NotImplementedException();
-   }
 }

Copied: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/EndpointReferenceUtil.java (from rev 9105, stack/native/branches/jaxws21/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/EndpointReferenceUtil.java)
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/EndpointReferenceUtil.java	                        (rev 0)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/binding/EndpointReferenceUtil.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,52 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ws.core.jaxws.binding;
+
+import javax.xml.ws.EndpointReference;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+
+/**
+ * Transforms an EPR to an instance of a given EndpointReference class 
+ * 
+ * @since 12-Jan-2009
+ * @author alessio.soldano at jboss.com
+ *
+ */
+public class EndpointReferenceUtil {
+   
+   public static <T extends EndpointReference> T transform(Class<T> clazz, EndpointReference epr) {
+       assert epr != null;
+       if (clazz.isAssignableFrom(W3CEndpointReference.class)) {
+           if (epr instanceof W3CEndpointReference) {
+               return (T) epr;
+           }
+           else
+           {
+              throw new WebServiceException("Unsupported EndpointReference: " + epr);
+           }
+       }
+       //transformations from different types of EndpointReference could be supported in future...
+       
+       throw new WebServiceException("EndpointReference of type " + clazz + " not supported.");
+   }
+}

Copied: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientFeatureProcessor.java (from rev 9105, stack/native/branches/jaxws21/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientFeatureProcessor.java)
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientFeatureProcessor.java	                        (rev 0)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientFeatureProcessor.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,182 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ws.core.jaxws.client;
+
+import java.util.List;
+
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.RespectBindingFeature;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.WebServiceFeature;
+import javax.xml.ws.handler.Handler;
+import javax.xml.ws.soap.AddressingFeature;
+import javax.xml.ws.soap.MTOMFeature;
+import javax.xml.ws.soap.SOAPBinding;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.core.jaxws.binding.BindingExt;
+import org.jboss.ws.extensions.addressing.jaxws.WSAddressingClientHandler;
+import org.jboss.ws.feature.FastInfosetFeature;
+import org.jboss.ws.feature.JsonEncodingFeature;
+import org.jboss.ws.feature.SchemaValidationFeature;
+import org.jboss.ws.metadata.umdm.EndpointMetaData;
+import org.jboss.ws.metadata.umdm.FeatureSet;
+import org.jboss.ws.metadata.umdm.ServiceMetaData;
+import org.jboss.ws.metadata.wsdl.Extendable;
+import org.jboss.ws.metadata.wsdl.WSDLBinding;
+import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
+import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
+import org.jboss.ws.metadata.wsdl.WSDLExtensibilityElement;
+import org.jboss.ws.metadata.wsdl.WSDLService;
+import org.jboss.wsf.common.DOMWriter;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerMetaData.HandlerType;
+
+/**
+ * Process WebServiceFeature provided on client side
+ * 
+ * @author alessio.soldano at jboss.com
+ * @since 14-Jan-2009
+ *
+ */
+public class ClientFeatureProcessor
+{
+   private static Logger log = Logger.getLogger(ClientFeatureProcessor.class);
+   
+   private static FeatureSet supportedFeatures = new FeatureSet();
+   static
+   {
+      supportedFeatures.addFeature(new FastInfosetFeature());
+      supportedFeatures.addFeature(new JsonEncodingFeature());
+      supportedFeatures.addFeature(new SchemaValidationFeature());
+      supportedFeatures.addFeature(new AddressingFeature());
+      supportedFeatures.addFeature(new MTOMFeature());
+      supportedFeatures.addFeature(new RespectBindingFeature());
+   }
+   
+   public static <T> void processFeature(WebServiceFeature feature, EndpointMetaData epMetaData, T stub)
+   {
+      if (!supportedFeatures.hasFeature(feature.getClass()))
+      {
+         throw new IllegalArgumentException("Unsupported feature: " + feature);
+      }
+      processAddressingFeature(feature, epMetaData, stub);
+      processMTOMFeature(feature, epMetaData, stub);
+      processRespectBindingFeature(feature, epMetaData, stub);
+      epMetaData.addFeature(feature);
+   }
+   
+   /**
+    * Returns true or false depending on the provided WebServiceFeature being an AddressingFeature or not.
+    * In the former case, addressing is setup.
+    * 
+    * @param <T>
+    * @param feature
+    * @param epMetaData
+    * @param stub
+    * @return
+    */
+   @SuppressWarnings("unchecked")
+   private static <T> void processAddressingFeature(WebServiceFeature feature, EndpointMetaData epMetaData, T stub)
+   {
+      if (feature instanceof AddressingFeature && feature.isEnabled())
+      {
+         BindingExt bindingExt = (BindingExt)((BindingProvider)stub).getBinding();
+         List<Handler> handlers = bindingExt.getHandlerChain(HandlerType.POST);
+         handlers.add(new WSAddressingClientHandler());
+         bindingExt.setHandlerChain(handlers, HandlerType.POST);
+      }
+   }
+   
+   /**
+    * Returns true or false depending on the provided WebServiceFeature being an MTOMFeature or not.
+    * In the former case, mtom is setup.
+    * 
+    * @param <T>
+    * @param feature
+    * @param epMetaData
+    * @param stub
+    * @return
+    */
+   private static <T> void processMTOMFeature(WebServiceFeature feature, EndpointMetaData epMetaData, T stub)
+   {
+      if (feature instanceof MTOMFeature)
+      {
+         SOAPBinding binding = (SOAPBinding)((BindingProvider)stub).getBinding();
+         binding.setMTOMEnabled(feature.isEnabled());
+      }
+   }
+   
+   /**
+    * Returns true or false depending on the provided WebServiceFeature being an RespectBindingFeature or not.
+    * In the former case, the respect binding checks are performed.
+    * 
+    * @param <T>
+    * @param feature
+    * @param epMetaData
+    * @param stub
+    * @return
+    */
+   private static <T> void processRespectBindingFeature(WebServiceFeature feature, EndpointMetaData epMetaData, T stub)
+   {
+      if (feature instanceof RespectBindingFeature && feature.isEnabled())
+      {
+         ServiceMetaData serviceMetaData = epMetaData.getServiceMetaData();
+         WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
+         
+         WSDLService wsdlService = wsdlDefinitions.getService(serviceMetaData.getServiceName());
+         if (wsdlService != null)
+         {
+            WSDLEndpoint wsdlEndpoint = wsdlService.getEndpoint(epMetaData.getPortName());
+            if (wsdlEndpoint != null)
+            {
+               // Conformance 6.11 (javax.xml.ws.RespectBindingFeature): When the javax.xml.ws.RespectBindingFeature
+               // is enabled, a JAX-WS implementation MUST inspect the wsdl:binding at runtime to determine
+               // result and parameter bindings as well as any wsdl:extensions that have the required=true attribute.
+               // All required wsdl:extensions MUST be supported and honored by a JAX-WS implementation unless a
+               // specific wsdl:extension has be explicitly disabled via a WebServiceFeature.
+               checkNotUnderstoodExtElements(wsdlEndpoint, epMetaData);
+               WSDLBinding wsdlBinding = wsdlDefinitions.getBinding(wsdlEndpoint.getBinding());
+               checkNotUnderstoodExtElements(wsdlBinding, epMetaData);
+            }
+            else
+            {
+               log.warn("Cannot find port " + epMetaData.getPortName());
+            }
+         }
+      }
+   }
+   
+   private static void checkNotUnderstoodExtElements(Extendable extendable, EndpointMetaData epMetaData)
+   {
+      List<WSDLExtensibilityElement> notUnderstoodList = extendable.getNotUnderstoodExtElements();
+      for (WSDLExtensibilityElement el : notUnderstoodList)
+      {
+         boolean disabledByFeature = false; //TODO [JBWS-2459]
+         if (el.isRequired() && !disabledByFeature)
+         {
+            String s = DOMWriter.printNode(el.getElement(), true);
+            throw new WebServiceException("RespectBindingFeature enabled and a required not understood element was found: " + s);
+         }
+      }
+   }
+
+}

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -48,7 +48,6 @@
 import javax.xml.ws.http.HTTPException;
 import javax.xml.ws.soap.SOAPBinding;
 import javax.xml.ws.soap.SOAPFaultException;
-import javax.xml.ws.wsaddressing.BindingProvider21;
 
 import org.jboss.remoting.transport.http.HTTPMetadataConstants;
 import org.jboss.util.NotImplementedException;
@@ -87,7 +86,7 @@
  * @author Thomas.Diesler at jboss.org
  * @since 04-Jul-2006
  */
-public class ClientImpl extends CommonClient implements org.jboss.ws.extensions.wsrm.api.RMProvider, BindingProvider21
+public class ClientImpl extends CommonClient implements org.jboss.ws.extensions.wsrm.api.RMProvider, BindingProvider
 {
 
    // the associated endpoint meta data
@@ -454,12 +453,12 @@
 
    public EndpointReference getEndpointReference()
    {
-      throw new NotImplementedException();
+      return bindingProvider.getEndpointReference();
    }
 
    public <T extends EndpointReference> T getEndpointReference(Class<T> clazz)
    {
-      throw new NotImplementedException();
+      return bindingProvider.getEndpointReference(clazz);
    }
 
    public EndpointConfigMetaData getEndpointConfigMetaData()

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -38,7 +38,6 @@
 import javax.xml.transform.Source;
 import javax.xml.ws.AsyncHandler;
 import javax.xml.ws.Binding;
-import javax.xml.ws.Binding21;
 import javax.xml.ws.BindingProvider;
 import javax.xml.ws.Dispatch;
 import javax.xml.ws.EndpointReference;
@@ -306,7 +305,7 @@
 
    private RemoteConnection getRemotingConnection()
    {
-      String bindingID = ((Binding21)bindingProvider.getBinding()).getBindingID();
+      String bindingID = bindingProvider.getBinding().getBindingID();
       if (EndpointMetaData.SUPPORTED_BINDINGS.contains(bindingID) == false)
          throw new IllegalStateException("Unsupported binding: " + bindingID);
 
@@ -433,7 +432,7 @@
          }
       }
 
-      String bindingID = ((Binding21)bindingProvider.getBinding()).getBindingID();
+      String bindingID = bindingProvider.getBinding().getBindingID();
       if (EndpointMetaData.SUPPORTED_BINDINGS.contains(bindingID) == false)
          throw new IllegalStateException("Unsupported binding: " + bindingID);
 
@@ -455,7 +454,7 @@
 
    private Object getReturnObject(MessageAbstraction resMsg)
    {
-      String bindingID = ((Binding21)bindingProvider.getBinding()).getBindingID();
+      String bindingID = bindingProvider.getBinding().getBindingID();
       if (EndpointMetaData.SUPPORTED_BINDINGS.contains(bindingID) == false)
          throw new IllegalStateException("Unsupported binding: " + bindingID);
 
@@ -535,12 +534,12 @@
 
    public EndpointReference getEndpointReference()
    {
-      throw new NotImplementedException();
+      return bindingProvider.getEndpointReference();
    }
 
    public <T extends EndpointReference> T getEndpointReference(Class<T> clazz)
    {
-      throw new NotImplementedException();
+      return bindingProvider.getEndpointReference(clazz);
    }
 
    public String getConfigFile()

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/EndpointImpl.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/EndpointImpl.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/EndpointImpl.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -21,37 +21,43 @@
  */
 package org.jboss.ws.core.jaxws.spi;
 
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.util.concurrent.Executor;
+
+import javax.xml.transform.Source;
+import javax.xml.ws.Binding;
+import javax.xml.ws.Endpoint;
+import javax.xml.ws.EndpointReference;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.WebServicePermission;
+import javax.xml.ws.http.HTTPBinding;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
+
 import org.jboss.logging.Logger;
-import org.jboss.util.NotImplementedException;
 import org.jboss.ws.core.jaxws.binding.BindingProviderImpl;
+import org.jboss.ws.core.jaxws.binding.EndpointReferenceUtil;
 import org.jboss.wsf.spi.SPIProvider;
 import org.jboss.wsf.spi.SPIProviderResolver;
 import org.jboss.wsf.spi.http.HttpContext;
 import org.jboss.wsf.spi.http.HttpServer;
 import org.jboss.wsf.spi.http.HttpServerFactory;
+import org.jboss.wsf.spi.management.ServerConfig;
+import org.jboss.wsf.spi.management.ServerConfigFactory;
 import org.w3c.dom.Element;
 
-import javax.xml.transform.Source;
-import javax.xml.ws.Binding;
-import javax.xml.ws.BindingProvider;
-import javax.xml.ws.Endpoint21;
-import javax.xml.ws.EndpointReference;
-import javax.xml.ws.WebServicePermission;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.concurrent.Executor;
-
 /**
  * A Web service endpoint implementation.
  *  
  * @author Thomas.Diesler at jboss.com
  * @since 07-Jul-2006
  */
-public class EndpointImpl extends Endpoint21
+public class EndpointImpl extends Endpoint
 {
    // provide logging
    private final Logger log = Logger.getLogger(EndpointImpl.class);
@@ -62,11 +68,12 @@
    private Object implementor;
    private Executor executor;
    private List<Source> metadata;
-   private BindingProvider bindingProvider;
+   private BindingProviderImpl bindingProvider;
    private Map<String, Object> properties = new HashMap<String, Object>();
    private HttpContext serverContext;
    private boolean isPublished;
    private boolean isDestroyed;
+   private URI address;
 
    public EndpointImpl(String bindingId, Object implementor)
    {
@@ -99,18 +106,17 @@
     * @param address specifying the address to use. The address must be compatible with the binding specified at the time the endpoint was created.
     */
    @Override
-   public void publish(String address)
+   public void publish(String addr)
    {
-      log.debug("publish: " + address);
+      log.debug("publish: " + addr);
 
-      URI addrURI;
       try
       {
-         addrURI = new URI(address);
+         this.address = new URI(addr);
       }
       catch (URISyntaxException e)
       {
-         throw new IllegalArgumentException("Invalid address: " + address);
+         throw new IllegalArgumentException("Invalid address: " + addr);
       }
 
       // Check with the security manger
@@ -122,7 +128,7 @@
       httpServer.setProperties(properties);
       httpServer.start();
 
-      String path = addrURI.getPath();
+      String path = address.getPath();
       String contextRoot = "/" + new StringTokenizer(path, "/").nextToken();
       HttpContext context = httpServer.createContext(contextRoot);
 
@@ -168,11 +174,30 @@
       if (context instanceof HttpContext)
       {
          serverContext = (HttpContext)context;
+         address = getAddressFromConfigAndContext(serverContext);
          HttpServer httpServer = serverContext.getHttpServer();
          httpServer.publish(serverContext, this);
          isPublished = true;
       }
    }
+   
+   private static URI getAddressFromConfigAndContext(HttpContext context)
+   {
+      try
+      {
+         SPIProvider provider = SPIProviderResolver.getInstance().getProvider();
+         ServerConfigFactory spi = provider.getSPI(ServerConfigFactory.class);
+         ServerConfig serverConfig = spi.getServerConfig();
+         String host = serverConfig.getWebServiceHost();
+         int port = serverConfig.getWebServicePort();
+         String hostAndPort = host + (port > 0 ? ":" + port : ""); 
+         return new URI("http://" + hostAndPort + context.getContextRoot());
+      }
+      catch (URISyntaxException e)
+      {
+         throw new WebServiceException("Error while getting endpoint address from context!", e);
+      }
+   }
 
    @Override
    public void stop()
@@ -261,12 +286,27 @@
    @Override
    public EndpointReference getEndpointReference(Element... referenceParameters)
    {
-      throw new NotImplementedException();
+      return getEndpointReference(W3CEndpointReference.class, referenceParameters);
    }
 
    @Override
    public <T extends EndpointReference> T getEndpointReference(Class<T> clazz, Element... referenceParameters)
    {
-      throw new NotImplementedException();
+      if (isDestroyed || !isPublished)
+         throw new WebServiceException("Cannot get EPR for an unpubblished or already destroyed endpoint!");
+      if (getBinding() instanceof HTTPBinding )
+      {
+         throw new UnsupportedOperationException("Cannot get epr when using the XML/HTTP binding");
+      }
+      W3CEndpointReferenceBuilder builder = new W3CEndpointReferenceBuilder();
+      builder.address(address.toString());
+      builder.wsdlDocumentLocation(address.toString() +  "?wsdl");
+      //TODO set other parameters in the builder
+      if (referenceParameters != null && W3CEndpointReference.class.getName().equals(clazz.getName()))
+      {
+         for (Element el : referenceParameters)
+            builder.referenceParameter(el);
+      }
+      return EndpointReferenceUtil.transform(clazz, builder.build());
    }
 }

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ProviderImpl.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ProviderImpl.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ProviderImpl.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -30,15 +30,14 @@
 import javax.xml.ws.Endpoint;
 import javax.xml.ws.EndpointReference;
 import javax.xml.ws.Service;
+import javax.xml.ws.WebServiceException;
 import javax.xml.ws.WebServiceFeature;
 import javax.xml.ws.soap.SOAPBinding;
-import javax.xml.ws.spi.Provider21;
+import javax.xml.ws.spi.Provider;
 import javax.xml.ws.spi.ServiceDelegate;
-import javax.xml.ws.spi.ServiceDelegate21;
 import javax.xml.ws.wsaddressing.W3CEndpointReference;
 import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
 
-import org.jboss.util.NotImplementedException;
 import org.jboss.wsf.common.DOMUtils;
 import org.w3c.dom.Element;
 
@@ -48,7 +47,7 @@
  * @author Thomas.Diesler at jboss.com
  * @since 03-May-2006
  */
-public class ProviderImpl extends Provider21
+public class ProviderImpl extends Provider
 {
    // 6.2 Conformance (Concrete javax.xml.ws.spi.Provider required): An implementation MUST provide
    // a concrete class that extends javax.xml.ws.spi.Provider. Such a class MUST have a public constructor
@@ -110,13 +109,6 @@
    }
 
    @Override
-   public <T extends EndpointReference> T createEndpointReference(Class<T> clazz, QName serviceName, QName portName, Source wsdlDocumentLocation,
-         Element... referenceParameters)
-   {
-      throw new NotImplementedException();
-   }
-
-   @Override
    public W3CEndpointReference createW3CEndpointReference(String address, QName serviceName, QName portName, List<Element> metadata, String wsdlDocumentLocation,
          List<Element> referenceParameters)
    {
@@ -140,13 +132,23 @@
          wsdlLocation = w3c.getWsdlLocation();
          serviceName = w3c.getServiceName();
       }
-      ServiceDelegate21 delegate = (ServiceDelegate21)createServiceDelegate(wsdlLocation, serviceName, Service.class);
+      ServiceDelegate delegate = createServiceDelegate(wsdlLocation, serviceName, Service.class);
       return delegate.getPort(epr, sei, features);
    }
 
    @Override
    public EndpointReference readEndpointReference(Source eprInfoset)
    {
-      throw new NotImplementedException();
+      if (eprInfoset == null)
+         throw new NullPointerException("Provided eprInfoset cannot be null");
+      try
+      {
+         //we currently support W3CEndpointReference only
+         return new W3CEndpointReference(eprInfoset);
+      }
+      catch (Exception e)
+      {
+         throw new WebServiceException(e);
+      }
    }
 }

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -49,11 +49,12 @@
 import javax.xml.ws.addressing.JAXWSAConstants;
 import javax.xml.ws.addressing.ReferenceParameters;
 import javax.xml.ws.handler.HandlerResolver;
-import javax.xml.ws.spi.ServiceDelegate21;
+import javax.xml.ws.spi.ServiceDelegate;
 import javax.xml.ws.wsaddressing.W3CEndpointReference;
 
 import org.jboss.logging.Logger;
 import org.jboss.ws.core.StubExt;
+import org.jboss.ws.core.jaxws.client.ClientFeatureProcessor;
 import org.jboss.ws.core.jaxws.client.ClientImpl;
 import org.jboss.ws.core.jaxws.client.ClientProxy;
 import org.jboss.ws.core.jaxws.client.DispatchImpl;
@@ -89,7 +90,7 @@
  * @author Thomas.Diesler at jboss.com
  * @since 03-May-2006
  */
-public class ServiceDelegateImpl extends ServiceDelegate21
+public class ServiceDelegateImpl extends ServiceDelegate
 {
    // provide logging
    private final Logger log = Logger.getLogger(ServiceDelegateImpl.class);
@@ -461,9 +462,6 @@
    @Override
    public <T> Dispatch<T> createDispatch(QName portName, Class<T> type, Mode mode, WebServiceFeature... features)
    {
-      if (features != null)
-         log.warn("WebServiceFeature not implemented");
-
       Dispatch<T> dispatch = createDispatch(portName, type, mode);
       initWebserviceFeatures(dispatch, features);
       return dispatch;
@@ -472,9 +470,6 @@
    @Override
    public <T> Dispatch<T> createDispatch(EndpointReference epr, Class<T> type, Mode mode, WebServiceFeature... features)
    {
-      if (features != null)
-         log.warn("WebServiceFeature not implemented");
-
       QName portName = null;
       if (epr instanceof W3CEndpointReference)
       {
@@ -491,9 +486,6 @@
    @Override
    public Dispatch<Object> createDispatch(QName portName, JAXBContext context, Mode mode, WebServiceFeature... features)
    {
-      if (features != null)
-         log.warn("WebServiceFeature not implemented");
-
       Dispatch<Object> dispatch = createDispatch(portName, context, mode);
       initWebserviceFeatures(dispatch, features);
       return dispatch;
@@ -502,9 +494,6 @@
    @Override
    public Dispatch<Object> createDispatch(EndpointReference epr, JAXBContext context, Mode mode, WebServiceFeature... features)
    {
-      if (features != null)
-         log.warn("WebServiceFeature not implemented");
-
       QName portName = null;
       if (epr instanceof W3CEndpointReference)
       {
@@ -521,9 +510,6 @@
    @Override
    public <T> T getPort(QName portName, Class<T> sei, WebServiceFeature... features)
    {
-      if (features != null)
-         log.warn("WebServiceFeature not implemented");
-
       T port = getPort(portName, sei);
       initWebserviceFeatures(port, features);
       return port;
@@ -532,9 +518,6 @@
    @Override
    public <T> T getPort(EndpointReference epr, Class<T> sei, WebServiceFeature... features)
    {
-      if (features != null)
-         log.warn("WebServiceFeature not implemented");
-
       T port = getPort(sei);
       initAddressingProperties((BindingProvider)port, epr);
       initWebserviceFeatures(port, features);
@@ -544,9 +527,6 @@
    @Override
    public <T> T getPort(Class<T> sei, WebServiceFeature... features)
    {
-      if (features != null)
-         log.warn("WebServiceFeature not implemented");
-
       T port = getPort(sei);
       initWebserviceFeatures(port, features);
       return port;
@@ -559,7 +539,7 @@
          EndpointMetaData epMetaData = ((StubExt)stub).getEndpointMetaData();
          for (WebServiceFeature feature : features)
          {
-            epMetaData.addFeature(feature);
+            ClientFeatureProcessor.processFeature(feature, epMetaData, stub);
          }
       }
    }

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/utils/JavassistUtils.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/utils/JavassistUtils.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/utils/JavassistUtils.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -31,6 +31,7 @@
 import javassist.bytecode.MethodInfo;
 import javassist.bytecode.SignatureAttribute;
 import javassist.bytecode.annotation.ArrayMemberValue;
+import javassist.bytecode.annotation.ClassMemberValue;
 import javassist.bytecode.annotation.EnumMemberValue;
 import javassist.bytecode.annotation.StringMemberValue;
 
@@ -105,6 +106,12 @@
          enumValue.setValue(value.name());
          annotation.addMemberValue(name, enumValue);
       }
+      
+      public void addClassParameter(String name, String value)
+      {
+         ClassMemberValue classValue = new ClassMemberValue(value, constPool);
+         annotation.addMemberValue(name, classValue);
+      }
 
       public void addParameter(String name, String[] values)
       {

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/addressing/jaxws/WSAddressingClientHandler.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/addressing/jaxws/WSAddressingClientHandler.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/addressing/jaxws/WSAddressingClientHandler.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -27,6 +27,7 @@
 import org.jboss.ws.metadata.umdm.OperationMetaData;
 import org.jboss.ws.core.CommonMessageContext;
 import org.jboss.wsf.common.handler.GenericSOAPHandler;
+import org.w3c.dom.Element;
 
 import javax.xml.namespace.QName;
 import javax.xml.soap.SOAPException;
@@ -43,6 +44,8 @@
 import java.net.URISyntaxException;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -131,6 +134,8 @@
             msgContext.setScope(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, Scope.APPLICATION);
             msgContext.put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES_INBOUND, addrProps);
             msgContext.setScope(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES_INBOUND, Scope.APPLICATION);
+            msgContext.put(MessageContext.REFERENCE_PARAMETERS, convertToElementList(addrProps.getReferenceParameters().getElements()));
+            msgContext.setScope(MessageContext.REFERENCE_PARAMETERS, Scope.APPLICATION);
 			}
 		}
 		catch (SOAPException ex)
@@ -140,4 +145,18 @@
 
 		return true;
 	}
+	
+	private static List<Element> convertToElementList(List<Object> objects)
+   {
+      if (objects == null) return null;
+      List<Element> elements = new LinkedList<Element>();
+      for (Object o : objects)
+      {
+         if (o instanceof Element)
+         {
+            elements.add((Element)o);
+         }
+      }
+      return elements;
+   }
 }

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/addressing/jaxws/WSAddressingServerHandler.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/addressing/jaxws/WSAddressingServerHandler.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/addressing/jaxws/WSAddressingServerHandler.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -27,6 +27,7 @@
 import org.jboss.ws.extensions.addressing.metadata.AddressingOpMetaExt;
 import org.jboss.ws.metadata.umdm.OperationMetaData;
 import org.jboss.wsf.common.handler.GenericSOAPHandler;
+import org.w3c.dom.Element;
 
 import javax.xml.namespace.QName;
 import javax.xml.soap.SOAPMessage;
@@ -40,6 +41,8 @@
 import java.net.URISyntaxException;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -82,9 +85,24 @@
 		addrProps.readHeaders(soapMessage);
 		msgContext.put(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_INBOUND, addrProps);
 		msgContext.setScope(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_INBOUND, Scope.APPLICATION);
-
+		msgContext.put(MessageContext.REFERENCE_PARAMETERS, convertToElementList(addrProps.getReferenceParameters().getElements()));
+		msgContext.setScope(MessageContext.REFERENCE_PARAMETERS, Scope.APPLICATION);
 		return true;
 	}
+	
+	private static List<Element> convertToElementList(List<Object> objects)
+	{
+	   if (objects == null) return null;
+	   List<Element> elements = new LinkedList<Element>();
+	   for (Object o : objects)
+	   {
+	      if (o instanceof Element)
+	      {
+	         elements.add((Element)o);
+	      }
+	   }
+	   return elements;
+	}
 
 	protected boolean handleOutbound(MessageContext msgContext)
 	{

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/eventing/jaxws/EventingService.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/eventing/jaxws/EventingService.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/eventing/jaxws/EventingService.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -27,7 +27,7 @@
 import javax.xml.namespace.QName;
 import javax.xml.ws.WebEndpoint;
 import javax.xml.ws.WebServiceClient;
-import javax.xml.ws.Service21;
+import javax.xml.ws.Service;
 
 
 /**
@@ -37,8 +37,7 @@
  * 
  */
 @WebServiceClient(name = "EventingService", targetNamespace = "http://schemas.xmlsoap.org/ws/2004/08/eventing", wsdlLocation = "wind.wsdl")
-public class EventingService
-    extends Service21
+public class EventingService extends Service
 {
 
     private final static URL WSDL_LOCATION;

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/EndpointFeatureProcessor.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/EndpointFeatureProcessor.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/EndpointFeatureProcessor.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -24,17 +24,41 @@
 import java.io.IOException;
 import java.lang.annotation.Annotation;
 import java.net.URL;
+import java.util.List;
 
+import javax.xml.ws.RespectBinding;
+import javax.xml.ws.RespectBindingFeature;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.soap.Addressing;
+import javax.xml.ws.soap.AddressingFeature;
+import javax.xml.ws.soap.MTOM;
+import javax.xml.ws.soap.MTOMFeature;
+import javax.xml.ws.soap.SOAPBinding;
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
+
+import org.jboss.logging.Logger;
 import org.jboss.ws.WSException;
 import org.jboss.ws.annotation.FastInfoset;
 import org.jboss.ws.annotation.JsonEncoding;
 import org.jboss.ws.annotation.SchemaValidation;
+import org.jboss.ws.extensions.addressing.jaxws.WSAddressingServerHandler;
 import org.jboss.ws.feature.FastInfosetFeature;
 import org.jboss.ws.feature.JsonEncodingFeature;
 import org.jboss.ws.feature.SchemaValidationFeature;
+import org.jboss.ws.metadata.umdm.HandlerMetaDataJAXWS;
 import org.jboss.ws.metadata.umdm.ServerEndpointMetaData;
+import org.jboss.ws.metadata.umdm.ServiceMetaData;
+import org.jboss.ws.metadata.wsdl.Extendable;
+import org.jboss.ws.metadata.wsdl.WSDLBinding;
+import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
+import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
+import org.jboss.ws.metadata.wsdl.WSDLExtensibilityElement;
+import org.jboss.ws.metadata.wsdl.WSDLService;
+import org.jboss.wsf.common.DOMUtils;
+import org.jboss.wsf.common.DOMWriter;
 import org.jboss.wsf.spi.deployment.ArchiveDeployment;
 import org.jboss.wsf.spi.deployment.Deployment;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerMetaData.HandlerType;
 import org.xml.sax.ErrorHandler;
 
 /**
@@ -45,28 +69,143 @@
  */
 public class EndpointFeatureProcessor
 {
+   private static final Logger log = Logger.getLogger(EndpointFeatureProcessor.class);
+   
    protected void processEndpointFeatures(Deployment dep, ServerEndpointMetaData sepMetaData, Class<?> sepClass)
    {
       for (Annotation an : sepClass.getAnnotations())
       {
-         if (an.annotationType() == SchemaValidation.class)
+         WebServiceFeatureAnnotation wsfa = an.annotationType().getAnnotation(WebServiceFeatureAnnotation.class);
+         if (wsfa != null)
          {
-            processSchemaValidation(dep, sepMetaData, sepClass);
+            if (an.annotationType() == Addressing.class)
+            {
+               Addressing anFeature = sepClass.getAnnotation(Addressing.class);
+               AddressingFeature feature = new AddressingFeature(anFeature.enabled(), anFeature.required());
+               sepMetaData.addFeature(feature);
+            }
+            else if (an.annotationType() == MTOM.class)
+            {
+               MTOM anFeature = sepClass.getAnnotation(MTOM.class);
+               MTOMFeature feature = new MTOMFeature(anFeature.enabled(), anFeature.threshold());
+               sepMetaData.addFeature(feature);
+            }
+            else if (an.annotationType() == SchemaValidation.class)
+            {
+               processSchemaValidation(dep, sepMetaData, sepClass);
+            }
+            else if (an.annotationType() == FastInfoset.class)
+            {
+               FastInfoset anFeature = sepClass.getAnnotation(FastInfoset.class);
+               FastInfosetFeature feature = new FastInfosetFeature(anFeature.enabled());
+               sepMetaData.addFeature(feature);
+            }
+            else if (an.annotationType() == JsonEncoding.class)
+            {
+               JsonEncoding anFeature = sepClass.getAnnotation(JsonEncoding.class);
+               JsonEncodingFeature feature = new JsonEncodingFeature(anFeature.enabled());
+               sepMetaData.addFeature(feature);
+            }
+            else if (an.annotationType() == RespectBinding.class)
+            {
+               RespectBinding anFeature = sepClass.getAnnotation(RespectBinding.class);
+               RespectBindingFeature feature = new RespectBindingFeature(anFeature.enabled());
+               sepMetaData.addFeature(feature);
+            }
+            else
+            {
+               throw new WebServiceException("Unsupported feature: " + wsfa.bean());
+            }
          }
-         else if (an.annotationType() == FastInfoset.class)
+      }
+   }
+   
+   protected void setupEndpointFeatures(ServerEndpointMetaData sepMetaData)
+   {
+      setupAddressingFeature(sepMetaData);
+      setupMTOMFeature(sepMetaData);
+      setupRespectBindingFeature(sepMetaData); //this need to be processed last
+   }
+   
+   private static void setupAddressingFeature(ServerEndpointMetaData sepMetaData)
+   {
+      AddressingFeature addressingFeature = sepMetaData.getFeature(AddressingFeature.class);
+      if (addressingFeature != null && addressingFeature.isEnabled())
+      {
+         log.debug("AddressingFeature found, installing WS-Addressing post-handler");
+         HandlerMetaDataJAXWS hmd = new HandlerMetaDataJAXWS(HandlerType.POST);
+         hmd.setEndpointMetaData(sepMetaData);
+         hmd.setHandlerClassName(WSAddressingServerHandler.class.getName());
+         hmd.setHandlerName("WSAddressing Handler");
+         hmd.setProtocolBindings("##SOAP11_HTTP ##SOAP12_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP_MTOM");
+         sepMetaData.addHandler(hmd);
+      }
+   }
+   
+   private static void setupMTOMFeature(ServerEndpointMetaData sepMetaData)
+   {
+      MTOMFeature mtomFeature = sepMetaData.getFeature(MTOMFeature.class);
+      if (mtomFeature != null && mtomFeature.isEnabled())
+      {
+         String bindingId = sepMetaData.getBindingId();
+         if (SOAPBinding.SOAP11HTTP_BINDING.equals(bindingId))
          {
-            FastInfoset anFeature = sepClass.getAnnotation(FastInfoset.class);
-            FastInfosetFeature feature = new FastInfosetFeature(anFeature.enabled());
-            sepMetaData.addFeature(feature);
+            log.debug("MTOMFeature found, setting binding to " + SOAPBinding.SOAP11HTTP_MTOM_BINDING);
+            sepMetaData.setBindingId(SOAPBinding.SOAP11HTTP_MTOM_BINDING);
          }
-         else if (an.annotationType() == JsonEncoding.class)
+         else if (SOAPBinding.SOAP12HTTP_BINDING.equals(bindingId))
          {
-            JsonEncoding anFeature = sepClass.getAnnotation(JsonEncoding.class);
-            JsonEncodingFeature feature = new JsonEncodingFeature(anFeature.enabled());
-            sepMetaData.addFeature(feature);
+            log.debug("MTOMFeature found, setting binding to " + SOAPBinding.SOAP12HTTP_MTOM_BINDING);
+            sepMetaData.setBindingId(SOAPBinding.SOAP12HTTP_MTOM_BINDING);
          }
       }
    }
+   
+   private static void setupRespectBindingFeature(ServerEndpointMetaData sepMetaData)
+   {
+      RespectBindingFeature respectBindingFeature = sepMetaData.getFeature(RespectBindingFeature.class);
+      if (respectBindingFeature != null && respectBindingFeature.isEnabled())
+      {
+         log.debug("RespectBindingFeature found, looking for required not understood extensibility elements...");
+         ServiceMetaData serviceMetaData = sepMetaData.getServiceMetaData();
+         WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
+         
+         WSDLService wsdlService = wsdlDefinitions.getService(serviceMetaData.getServiceName());
+         if (wsdlService != null)
+         {
+            WSDLEndpoint wsdlEndpoint = wsdlService.getEndpoint(sepMetaData.getPortName());
+            if (wsdlEndpoint != null)
+            {
+               // Conformance 6.11 (javax.xml.ws.RespectBindingFeature): When the javax.xml.ws.RespectBindingFeature
+               // is enabled, a JAX-WS implementation MUST inspect the wsdl:binding at runtime to determine
+               // result and parameter bindings as well as any wsdl:extensions that have the required=true attribute.
+               // All required wsdl:extensions MUST be supported and honored by a JAX-WS implementation unless a
+               // specific wsdl:extension has be explicitly disabled via a WebServiceFeature.
+               checkNotUnderstoodExtElements(wsdlEndpoint, sepMetaData);
+               WSDLBinding wsdlBinding = wsdlDefinitions.getBinding(wsdlEndpoint.getBinding());
+               checkNotUnderstoodExtElements(wsdlBinding, sepMetaData);
+            }
+            else
+            {
+               log.warn("Cannot find port " + sepMetaData.getPortName());
+            }
+         }
+      }
+   }
+   
+   private static void checkNotUnderstoodExtElements(Extendable extendable, ServerEndpointMetaData sepMetaData)
+   {
+      List<WSDLExtensibilityElement> notUnderstoodList = extendable.getNotUnderstoodExtElements();
+      for (WSDLExtensibilityElement el : notUnderstoodList)
+      {
+         boolean disabledByFeature = false; //TODO [JBWS-2459]
+         if (el.isRequired() && !disabledByFeature)
+         {
+            String s = DOMWriter.printNode(el.getElement(), true);
+            throw new WebServiceException("RespectBindingFeature enabled and a required not understood element was found: " + s);
+         }
+      }
+   }
 
    private void processSchemaValidation(Deployment dep, ServerEndpointMetaData sepMetaData, Class<?> sepClass)
    {

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilder.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilder.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilder.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -43,7 +43,9 @@
 import javax.jws.soap.SOAPBinding;
 import javax.jws.soap.SOAPMessageHandlers;
 import javax.jws.soap.SOAPBinding.ParameterStyle;
+import javax.xml.bind.annotation.XmlList;
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import javax.xml.namespace.QName;
 import javax.xml.rpc.ParameterMode;
 import javax.xml.ws.BindingType;
@@ -447,12 +449,16 @@
       return HolderUtils.isHolderType(javaType) ? ParameterMode.INOUT : ParameterMode.IN;
    }
 
-   private WebParam getWebParamAnnotation(Method method, int pos)
+   @SuppressWarnings("unchecked")
+   private <T extends Annotation> T getAnnotation(Class<T> annotation, Method method, int pos)
    {
-      for (Annotation annotation : method.getParameterAnnotations()[pos])
-         if (annotation instanceof WebParam)
-            return (WebParam)annotation;
-
+      for (Annotation an : method.getParameterAnnotations()[pos])
+      {
+         if (annotation.isAssignableFrom(an.annotationType()))
+         {
+            return (T)an;
+         }
+      }
       return null;
    }
 
@@ -637,7 +643,7 @@
          Class<?> javaType = parameterTypes[i];
          Type genericType = genericTypes[i];
          String javaTypeName = javaType.getName();
-         WebParam anWebParam = getWebParamAnnotation(method, i);
+         WebParam anWebParam = getAnnotation(WebParam.class, method, i);
          boolean isHeader = anWebParam != null && anWebParam.header();
          boolean isWrapped = opMetaData.isDocumentWrapped() && !isHeader;
          ParameterMode mode = getParameterMode(anWebParam, javaType);
@@ -660,6 +666,13 @@
 
             WrappedParameter wrappedParameter = new WrappedParameter(wrappedElementName, javaTypeName, variable, i);
             wrappedParameter.setTypeArguments(convertTypeArguments(javaType, genericType));
+            wrappedParameter.setXmlList(getAnnotation(XmlList.class, method, i) != null);
+            XmlJavaTypeAdapter xmlJavaTypeAdapter = getAnnotation(XmlJavaTypeAdapter.class, method, i);
+            if (xmlJavaTypeAdapter != null)
+            {
+               //XmlJavaTypeAdapter.type() is for package only
+               wrappedParameter.setAdapter(xmlJavaTypeAdapter.value().getName());
+            }
 
             if (mode != ParameterMode.OUT)
                wrappedParameters.add(wrappedParameter);
@@ -727,6 +740,13 @@
          {
             WrappedParameter wrapped = new WrappedParameter(xmlName, returnTypeName, convertToVariable(xmlName.getLocalPart()), -1);
             wrapped.setTypeArguments(convertTypeArguments(returnType, genericReturnType));
+            wrapped.setXmlList(method.getAnnotation(XmlList.class) != null);
+            XmlJavaTypeAdapter xmlJavaTypeAdapter = method.getAnnotation(XmlJavaTypeAdapter.class);
+            if (xmlJavaTypeAdapter != null)
+            {
+               //XmlJavaTypeAdapter.type() is for package only
+               wrapped.setAdapter(xmlJavaTypeAdapter.value().getName());
+            }
 
             // insert at the beginning just for prettiness
             wrappedOutputParameters.add(0, wrapped);
@@ -795,8 +815,15 @@
 
       // Add faults
       for (Class<?> exClass : method.getExceptionTypes())
-         if (!RemoteException.class.isAssignableFrom(exClass))
+      {
+         // Conformance 3.25 (java.lang.RuntimeExceptions and java.rmi.RemoteExceptions):
+         // java.lang.RuntimeException and java.rmi.RemoteException and their subclasses
+         // MUST NOT be treated as service specific exceptions and MUST NOT be mapped to WSDL.
+         if (!RemoteException.class.isAssignableFrom(exClass) && !RuntimeException.class.isAssignableFrom(exClass))
+         {
             addFault(opMetaData, exClass);
+         }
+      }
 
       // process operation meta data extension
       processMetaExtensions(method, epMetaData, opMetaData);

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSWebServiceMetaDataBuilder.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSWebServiceMetaDataBuilder.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSWebServiceMetaDataBuilder.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -186,6 +186,9 @@
             processHandlerChain(sepMetaData, sepClass);
          else if (seiClass.isAnnotationPresent(HandlerChain.class))
             processHandlerChain(sepMetaData, seiClass);
+         
+         //setup web service feature contributions
+         epFeatureProcessor.setupEndpointFeatures(sepMetaData);
 
          // process webservices.xml contributions
          processWSDDContribution(sepMetaData);

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/config/binding/OMFactoryJAXWS.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/config/binding/OMFactoryJAXWS.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/config/binding/OMFactoryJAXWS.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -41,7 +41,7 @@
 import org.jboss.ws.extensions.wsrm.config.RMPortConfig;
 
 /**
- * ObjectModelFactory for JAXRPC configurations.
+ * ObjectModelFactory for JAXWS configurations.
  *
  * @author Thomas.Diesler at jboss.org
  * @author Heiko.Braun at jboss.org

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/umdm/WrappedParameter.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/umdm/WrappedParameter.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/umdm/WrappedParameter.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -43,6 +43,8 @@
    private Accessor accessor;
    private boolean swaRef;
    private boolean xop;
+   private boolean xmlList;
+   private String adapter = null;
 
    public WrappedParameter(WrappedParameter wrapped)
    {
@@ -153,6 +155,26 @@
       this.xop = xop;
    }
 
+   public boolean isXmlList()
+   {
+      return xmlList;
+   }
+
+   public void setXmlList(boolean xmlList)
+   {
+      this.xmlList = xmlList;
+   }
+
+   public String getAdapter()
+   {
+      return adapter;
+   }
+
+   public void setAdapter(String adapter)
+   {
+      this.adapter = adapter;
+   }
+
    public String toString()
    {
       return "[name = " + getName() + ", type = " + getType() + ", typeArgs = " + JavaUtils.printArray(getTypeArguments()) + ", variable = " + getVariable()

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/wsdl/Extendable.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/wsdl/Extendable.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/metadata/wsdl/Extendable.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -44,6 +44,7 @@
    private Map features = new LinkedHashMap();
    private Map properties = new LinkedHashMap();
    private Map<String,List<WSDLExtensibilityElement>> extElements = new LinkedHashMap<String,List<WSDLExtensibilityElement>>();
+   private List<WSDLExtensibilityElement> notUnderstoodExtElements = new LinkedList<WSDLExtensibilityElement>();
 
    public WSDLFeature[] getFeatures()
    {
@@ -113,4 +114,19 @@
       }
       return list;
    }
+
+   public List<WSDLExtensibilityElement> getNotUnderstoodExtElements()
+   {
+      return notUnderstoodExtElements;
+   }
+
+   public void setNotUnderstoodExtElements(List<WSDLExtensibilityElement> notUnderstoodExtElement)
+   {
+      this.notUnderstoodExtElements = notUnderstoodExtElement;
+   }
+   
+   public void addNotUnderstoodExtElement(WSDLExtensibilityElement element)
+   {
+      notUnderstoodExtElements.add(element);
+   }
 }

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/jaxws/impl/SourceWrapperGenerator.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/jaxws/impl/SourceWrapperGenerator.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/jaxws/impl/SourceWrapperGenerator.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -21,14 +21,23 @@
  */
 package org.jboss.ws.tools.jaxws.impl;
 
-import com.sun.codemodel.JAnnotationUse;
-import com.sun.codemodel.JAnnotationArrayMember;
-import com.sun.codemodel.JCodeModel;
-import com.sun.codemodel.JDefinedClass;
-import com.sun.codemodel.JExpr;
-import com.sun.codemodel.JFieldVar;
-import com.sun.codemodel.JMethod;
-import com.sun.codemodel.JMod;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.SortedMap;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlList;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.namespace.QName;
+
 import org.jboss.logging.Logger;
 import org.jboss.ws.WSException;
 import org.jboss.ws.core.jaxws.AbstractWrapperGenerator;
@@ -37,19 +46,17 @@
 import org.jboss.ws.metadata.umdm.ParameterMetaData;
 import org.jboss.ws.metadata.umdm.WrappedParameter;
 import org.jboss.wsf.common.JavaUtils;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlTransient;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.namespace.QName;
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.List;
-import java.util.SortedMap;
 
+import com.sun.codemodel.JAnnotationArrayMember;
+import com.sun.codemodel.JAnnotationUse;
+import com.sun.codemodel.JClass;
+import com.sun.codemodel.JCodeModel;
+import com.sun.codemodel.JDefinedClass;
+import com.sun.codemodel.JExpr;
+import com.sun.codemodel.JFieldVar;
+import com.sun.codemodel.JMethod;
+import com.sun.codemodel.JMod;
+
 /**
  * Generates source for wrapper beans
  *
@@ -105,7 +112,7 @@
          addClassAnnotations(clazz, parameterMD.getXmlName(), parameterMD.getXmlType(), null);
          for (WrappedParameter wrapped : wrappedParameters)
          {
-            addProperty(clazz, wrapped.getType(), wrapped.getName(), wrapped.getVariable(), false, loader);
+            addProperty(clazz, wrapped.getType(), wrapped.getName(), wrapped.getVariable(), wrapped.getTypeArguments(), false, wrapped.isXmlList(), wrapped.getAdapter(), loader);
          }
       }
       catch (Exception e)
@@ -130,7 +137,7 @@
          for (String property : propertyOrder)
          {
             ExceptionProperty p = properties.get(property);
-            addProperty(clazz, p.getReturnType().getName(), new QName(property), property, p.isTransientAnnotated(), loader);
+            addProperty(clazz, p.getReturnType().getName(), new QName(property), property, null, p.isTransientAnnotated(), false, null, loader);
          }
       }
       catch (Exception e)
@@ -143,15 +150,39 @@
    {
       return (Boolean.TYPE == type || Boolean.class == type) ? "is" : "get";
    }
+   
+   private void addProperty(JDefinedClass clazz, String typeName, QName name, String variable, String[] typeArguments, boolean xmlTransient, boolean xmlList, String adapter, ClassLoader loader)
+   throws Exception
+   {
+      // define variable
+      Class<?> javaType = JavaUtils.loadJavaType(typeName, loader);
+      if (JavaUtils.isPrimitive(javaType))
+      {
+         addPrimitiveProperty(clazz, javaType, name, variable, xmlTransient);
+      }
+      else
+      {
+         addProperty(clazz, javaType, name, variable, typeArguments, xmlTransient, xmlList, adapter, codeModel);
+      }
+   }
 
-   private static void addProperty(JDefinedClass clazz, String typeName, QName name, String variable, boolean xmlTransient, ClassLoader loader)
-   throws ClassNotFoundException
+   private static void addProperty(JDefinedClass clazz, Class<?> javaType, QName name, String variable, String[] typeArguments, boolean xmlTransient, boolean xmlList,
+         String adapter, JCodeModel codeModel) throws Exception
    {
       // be careful about reserved keywords when generating variable names
       String realVariableName = JavaUtils.isReservedKeyword(variable) ? "_" + variable : variable; 
       
-      // define variable
-      Class<?> type = JavaUtils.loadJavaType(typeName, loader);
+      //use narrow() for generics: http://forums.java.net/jive/thread.jspa?messageID=209333&#209333
+      JClass type = codeModel.ref(javaType);
+      if (typeArguments != null)
+      {
+         LinkedList<JClass> jclasses = new LinkedList<JClass>();
+         for (String tp : typeArguments)
+         {
+            jclasses.add(codeModel.ref(tp));
+         }
+         type = type.narrow(jclasses);
+      }
       JFieldVar field = clazz.field(JMod.PRIVATE, type, realVariableName);
       
       if (xmlTransient == false)
@@ -169,16 +200,59 @@
          //XmlTransient
          field.annotate(XmlTransient.class);
       }
+      
+      if (xmlList)
+      {
+         field.annotate(XmlList.class);
+      }
+      
+      if (adapter != null)
+      {
+         JAnnotationUse xmlJavaTypeAdapter = field.annotate(XmlJavaTypeAdapter.class);
+         xmlJavaTypeAdapter.param("value", codeModel.ref(adapter));
+      }
 
       // generate acessor get method for variable
-      JMethod method = clazz.method(JMod.PUBLIC, type, getterPrefix(type) + JavaUtils.capitalize(variable));
+      JMethod method = clazz.method(JMod.PUBLIC, type, getterPrefix(javaType) + JavaUtils.capitalize(variable));
       method.body()._return(JExpr._this().ref(realVariableName));
       
       // generate acessor set method for variable
       method = clazz.method(JMod.PUBLIC, void.class, "set" + JavaUtils.capitalize(variable));
       method.body().assign(JExpr._this().ref(realVariableName), method.param(type, realVariableName));
    }
+   
+   private static void addPrimitiveProperty(JDefinedClass clazz, Class<?> javaType, QName name, String variable, boolean xmlTransient)
+   {
+      // be careful about reserved keywords when generating variable names
+      String realVariableName = JavaUtils.isReservedKeyword(variable) ? "_" + variable : variable; 
+      
+      JFieldVar field = clazz.field(JMod.PRIVATE, javaType, realVariableName);
+      
+      if (xmlTransient == false)
+      {
+         // define XmlElement annotation for variable
+         JAnnotationUse annotation = field.annotate(XmlElement.class);
+         annotation.param("name", name.getLocalPart());
+         if (name.getNamespaceURI() != null)
+         {
+            annotation.param("namespace", name.getNamespaceURI());
+         }
+      }
+      else
+      {
+         //XmlTransient
+         field.annotate(XmlTransient.class);
+      }
 
+      // generate acessor get method for variable
+      JMethod method = clazz.method(JMod.PUBLIC, javaType, getterPrefix(javaType) + JavaUtils.capitalize(variable));
+      method.body()._return(JExpr._this().ref(realVariableName));
+      
+      // generate acessor set method for variable
+      method = clazz.method(JMod.PUBLIC, void.class, "set" + JavaUtils.capitalize(variable));
+      method.body().assign(JExpr._this().ref(realVariableName), method.param(javaType, realVariableName));
+   }
+
    private static void addClassAnnotations(JDefinedClass clazz, QName xmlName, QName xmlType, String[] propertyOrder)
    {
       // define XmlRootElement class annotation

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/jaxws/impl/SunRIConsumerImpl.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/jaxws/impl/SunRIConsumerImpl.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/jaxws/impl/SunRIConsumerImpl.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -198,8 +198,8 @@
       args.add(outputDir.getAbsolutePath());
 
       // Always set the target
-       if(!target.equals("2.0"))
-         throw new IllegalArgumentException("WSConsume (native) only supports JAX-WS 2.0");
+       if(!target.equals("2.0") && !target.equals("2.1"))
+         throw new IllegalArgumentException("WSConsume (native) only supports JAX-WS 2.0 and 2.1");
       
       args.add("-target");
       args.add(target);

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -313,33 +313,78 @@
       for (int i = 0; i < extElements.size(); i++)
       {
          ExtensibilityElement extElement = (ExtensibilityElement)extElements.get(i);
-         processPolicyElements(extElement, dest);
-         //add processing of further extensibility element types below
+         if (extElement instanceof UnknownExtensibilityElement)
+         {
+            UnknownExtensibilityElement uee = (UnknownExtensibilityElement)extElement;
+            boolean understood = false;
+            understood = understood || processPolicyElements(uee, dest);
+            understood = understood || processUseAddressing(uee, dest);
+            //add processing of further extensibility element types below
+            
+            if (!understood)
+            {
+               processNotUnderstoodExtesibilityElement(uee, dest);
+            }
+         }
       }
    }
 
-   private void processPolicyElements(ExtensibilityElement extElement, Extendable dest)
+   /**
+    * Process the provided extensibility element looking for policies or policy references.
+    * Returns true if the provided element is policy related, false otherwise.
+    * 
+    * @param extElement
+    * @param dest
+    * @return
+    */
+   private boolean processPolicyElements(UnknownExtensibilityElement extElement, Extendable dest)
    {
-      if (extElement instanceof UnknownExtensibilityElement)
+      boolean result = false;
+      Element srcElement = extElement.getElement();
+      if (Constants.URI_WS_POLICY.equals(srcElement.getNamespaceURI()))
       {
-         Element srcElement = ((UnknownExtensibilityElement)extElement).getElement();
-         if (Constants.URI_WS_POLICY.equals(srcElement.getNamespaceURI()))
+         //copy missing namespaces from the source element to our element
+         Element element = (Element)srcElement.cloneNode(true);
+         copyMissingNamespaceDeclarations(element, srcElement);
+         if (element.getLocalName().equals("Policy"))
          {
-            //copy missing namespaces from the source element to our element
-            Element element = (Element)srcElement.cloneNode(true);
-            copyMissingNamespaceDeclarations(element, srcElement);
-            if (element.getLocalName().equals("Policy"))
-            {
-               dest.addExtensibilityElement(new WSDLExtensibilityElement(Constants.WSDL_ELEMENT_POLICY, element));
-            }
-            else if (element.getLocalName().equals("PolicyReference"))
-            {
-               dest.addExtensibilityElement(new WSDLExtensibilityElement(Constants.WSDL_ELEMENT_POLICYREFERENCE, element));
-            }
-
+            WSDLExtensibilityElement el = new WSDLExtensibilityElement(Constants.WSDL_ELEMENT_POLICY, element);
+            el.setRequired("true".equalsIgnoreCase(element.getAttribute("required")));
+            dest.addExtensibilityElement(el);
+            result = true;
          }
+         else if (element.getLocalName().equals("PolicyReference"))
+         {
+            WSDLExtensibilityElement el = new WSDLExtensibilityElement(Constants.WSDL_ELEMENT_POLICYREFERENCE, element);
+            el.setRequired("true".equalsIgnoreCase(element.getAttribute("required")));
+            dest.addExtensibilityElement(el);
+            result = true;
+         }
       }
+      return result;
    }
+   
+   /**
+    * Process the provided extensibility element looking for UsingAddressing.
+    * Returns true if the provided element is UsingAddressing, false otherwise.
+    * 
+    * @param extElement
+    * @param dest
+    * @return
+    */
+   private boolean processUseAddressing(UnknownExtensibilityElement extElement, Extendable dest)
+   {
+      log.warn("UsingAddressing extensibility element not supported yet.");
+      return false;
+   }
+   
+   private void processNotUnderstoodExtesibilityElement(UnknownExtensibilityElement extElement, Extendable dest)
+   {
+      Element element = (Element)extElement.getElement().cloneNode(true);
+      WSDLExtensibilityElement notUnderstoodElement = new WSDLExtensibilityElement("notUnderstoodExtensibilityElement", element);
+      notUnderstoodElement.setRequired("true".equalsIgnoreCase(element.getAttributeNS(Constants.NS_WSDL11, "required")));
+      dest.addNotUnderstoodExtElement(notUnderstoodElement);
+   }
 
    private void processTypes(Definition srcWsdl, URL wsdlLoc) throws IOException, WSDLException
    {

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Action.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/Action.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Action.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Action.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,142 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+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 <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 
+ * contains explicit <code>wsaw:Action</code> attribute on the WSDL <code>input</code>, 
+ * <code>output</code> and <code>fault</code> messages of the WSDL <code>operation</code> 
+ * based upon which attributes of the <code>Action</code> annotation have been specified.
+ * <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;javax.jws.WebService
+ * public class AddNumbersImpl {
+ *     &#64;javax.xml.ws.Action(
+ *         input="http://example.com/inputAction",
+ *         output="http://example.com/outputAction")
+ *     public int addNumbers(int number1, int number2) {
+ *         return number1 + number2;
+ *     }
+ * }
+ * </pre>
+ * 
+ * The generated WSDL looks like:
+ * <pre>
+ *   &lt;definitions targetNamespace=&quot;http://example.com/numbers&quot; ...&gt;
+ *   ...
+ *     &lt;portType name=&quot;AddNumbersPortType&quot;&gt;
+ *       &lt;operation name=&quot;AddNumbers&quot;&gt;
+ *         &lt;input message=&quot;tns:AddNumbersInput&quot; name=&quot;Parameters&quot;
+ *           wsaw:Action=&quot;http://example.com/inputAction&quot;/&gt;
+ *        &lt;output message=&quot;tns:AddNumbersOutput&quot; name=&quot;Result&quot;
+ *           wsaw:Action=&quot;http://example.com/outputAction&quot;/&gt;
+ *       &lt;/operation&gt;
+ *     &lt;portType&gt;
+ *   ...
+ *   &lt;definitions&gt;
+ * </pre>
+ * 
+ * <p>
+ * <b>Example 2</b>: Specify explicit value for <code>Action</code> message addressing property
+ * for only the <code>input</code> message. The default values are used for the 
+ * <code>output</code> message.
+ * 
+ * <pre>
+ * &#64;javax.jws.WebService
+ * public class AddNumbersImpl {
+ *     &#64;javax.xml.ws.Action(input=&quot;http://example.com/inputAction&quot;)
+ *     public int addNumbers(int number1, int number2) {
+ *         return number1 + number2;
+ *     }
+ * }
+ * </pre>
+ * 
+ * The generated WSDL looks like:
+ * 
+ * <pre>
+ *   &lt;definitions targetNamespace=&quot;http://example.com/numbers&quot; ...&gt;
+ *   ...
+ *     &lt;portType name=&quot;AddNumbersPortType&quot;&gt;
+ *       &lt;operation name=&quot;AddNumbers&quot;&gt;
+ *         &lt;input message=&quot;tns:AddNumbersInput&quot; name=&quot;Parameters&quot;
+ *           wsaw:Action=&quot;http://example.com/inputAction&quot;/&gt;
+ *        &lt;output message=&quot;tns:AddNumbersOutput&quot; name=&quot;Result&quot;/&gt;
+ *       &lt;/operation&gt;
+ *     &lt;portType&gt;
+ *   ...
+ *   &lt;definitions&gt;
+ * </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, a default value of <code>wsaw:Action</code> is used 
+ * for the <code>input</code> message.
+ * 
+ * <p>
+ * <b>Example 3</b>: See <a href="FaultAction.html">FaultAction</a> 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 <code>Action</code> message addressing property for the <code>input</code>
+    * message of the operation. If the value is "", then no <code>wsaw:Action</code>
+    * is generated.
+    */
+   String input() default "";
+
+   /**
+    * Explicit value of <code>Action</code> message addressing property for the <code>output</code>
+    * message of the operation. If the value is "", then no <code>wsaw:Action</code>
+    * is generated.
+    */
+   String output() default "";
+
+   /**
+    * Explicit value of <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 explicit
+    * <code>Action</code> message addressing property, need to be specified as a value in this property 
+    * using <a href="FaultAction.html">FaultAction</a> annotation.
+    */
+   FaultAction[] fault() default {};
+}

Modified: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Binding.java
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Binding.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Binding.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -28,7 +28,6 @@
  **/
 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>
@@ -50,4 +49,14 @@
     *          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();
 }

Modified: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/BindingProvider.java
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/BindingProvider.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/BindingProvider.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -23,6 +23,8 @@
 
 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.
@@ -104,4 +106,69 @@
     * @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.
+    * If the returned <code>EndpointReference</code> is a
+    * <code>W3CEndpointReference</code> it MUST contain
+    * the <code>wsaw:ServiceName</code> element and the
+    * <code>wsaw:EndpointName</code> attribute on the
+    * <code>wsaw:ServiceName</code>. It SHOULD contain
+    * the embedded WSDL in the <code>wsa:Metadata</code> element
+    * if there is an associated WSDL. The
+    * <code>wsaw:InterfaceName</code> MAY also be present.
+    * <br>
+    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">
+    * WS-Addressing - WSDL 1.0</a>.
+    *
+    * @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>.
+    * <p>
+    * If the returned <code>EndpointReference</code> is a
+    * <code>W3CEndpointReference</code> it MUST contain
+    * the <code>wsaw:ServiceName</code> element and the
+    * <code>wsaw:EndpointName</code> attribute on the
+    * <code>wsaw:ServiceName</code>. It SHOULD contain
+    * the embedded WSDL in the <code>wsa:Metadata</code> element
+    * if there is an associated WSDL. The
+    * <code>wsaw:InterfaceName</code> MAY also be present.
+    * <br>
+    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">
+    * WS-Addressing - WSDL 1.0</a>.
+    *
+    * @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 javax.xml.ws.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);
+   
 }

Modified: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Endpoint.java
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Endpoint.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Endpoint.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -23,6 +23,9 @@
 
 import javax.xml.ws.soap.SOAPBinding;
 import javax.xml.ws.spi.Provider;
+
+import org.w3c.dom.Element;
+
 import java.util.List;
 import java.util.Map;
 
@@ -291,5 +294,79 @@
     *        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.
+    * If the returned <code>EndpointReference</code> is a
+    * <code>W3CEndpointReference</code> it MUST contain
+    * the <code>wsaw:ServiceName</code> element and the
+    * <code>wsaw:EndpointName</code> attribute on the
+    * <code>wsaw:ServiceName</code>. It SHOULD contain
+    * the embedded WSDL in the <code>wsa:Metadata</code> element
+    * if there is an associated WSDL. The
+    * <code>wsaw:InterfaceName</code> MAY also be present.
+    * <br>
+    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">
+    * WS-Addressing - WSDL 1.0</a>.
+    *
+    * @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 javax.xml.ws.wsaddressing.W3CEndpointReference
+    *
+    * @since JAX-WS 2.1
+    **/
+   public abstract EndpointReference getEndpointReference(Element... referenceParameters);
+
+   /**
+    * Returns the <code>EndpointReference</code> associated with
+    * this <code>Endpoint</code> instance.
+    * <p>
+    * If the returned <code>EndpointReference</code> is a
+    * <code>W3CEndpointReference</code> it MUST contain
+    * the <code>wsaw:ServiceName</code> element and the
+    * <code>wsaw:EndpointName</code> attribute on the
+    * <code>wsaw:ServiceName</code>. It SHOULD contain
+    * the embedded WSDL in the <code>wsa:Metadata</code> element
+    * if there is an associated WSDL. The
+    * <code>wsaw:InterfaceName</code> MAY also be present.
+    * <br>
+    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">
+    * WS-Addressing - WSDL 1.0</a>.
+    *
+    * @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);
+
 }

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/EndpointReference.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/EndpointReference.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/EndpointReference.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/EndpointReference.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,186 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package javax.xml.ws;
+
+import java.io.StringWriter;
+
+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;
+
+/**
+ * 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/">
+ * WS-Addressing</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 WS-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 createEndpointReference
+ * vendor specific <code>EndpointReferences</code> that that
+ * vendor can use to flag a different version of
+ * addressing.
+ * <p>
+ * Web service developers that wish to pass or return 
+ * <code>EndpointReferences</code> in Java methods in an
+ * SEI should use
+ * concrete instances of an <code>EndpointReference</code> such
+ * as the <code>W3CEndpointReferendce</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
+ */
+//@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 null <code>eprInfoset</tt> value is given.
+    */
+   public static EndpointReference readFrom(Source eprInfoset)
+   {
+      return Provider.provider().readEndpointReference(eprInfoset);
+   }
+
+   /**
+    * write this EndpointReference to the specified infoset format
+    * @throws WebServiceException
+    *   if there is an error writing the
+    *   EndpointReference to the specified <code>result</code>.
+    *
+    * @throws java.lang.IllegalArgumentException
+    *      If the null <code>result</tt> value is given.
+    */
+   public abstract void writeTo(Result result);
+
+   /**
+    * The getPort 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>.  
+    * <p>
+    * Because this port is not created from a Service object, handlers 
+    * will not automatically be configured, and the HandlerResolver 
+    * and Executor 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 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 invalid
+    *                  <LI>If an illegal
+    *                      <code>serviceEndpointInterface</code>
+    *                      is specified
+    *                  <LI>If 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();
+   }
+}

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/FaultAction.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/FaultAction.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/FaultAction.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/FaultAction.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,57 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+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 <a href="Action.html">
+ * Action</a> annotation to allow an explicit association of <code>Action</code> message
+ * addressing property with the <code>fault</code> messages of the WSDL operation mapped from
+ * the exception class.
+ * <p>
+ * In this version of JAX-WS there is no standard way to specify Action values in a WSDL and
+ * there is no standard default value. It is intended that, after the W3C WG on WS-Addressing
+ * has defined these items in a recommendation, a future version of JAX-WS will require the
+ * new standards.
+ * 
+ * @since JAX-WS 2.1
+ */
+
+ at Documented
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface FaultAction {
+   /**
+    * Name of the exception class
+    */
+   Class className();
+
+   /**
+    * Value of <code>Action</code> message addressing property for the exception
+    */
+   String value() default "";
+}

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/RespectBinding.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/RespectBinding.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/RespectBinding.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/RespectBinding.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,105 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+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 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 are either understood
+ * and used by the runtime, or explicitly disabled by the web service
+ *  application.  A web service application can disable a particular
+ *  extension that has a know <code>WebServiceFeature</code> using
+ *  either the {@link BindingType#features} element on the server
+ *  or one of the following methods on the client:
+ *    <ul>
+ *      <li>{@link Service#getPort(QName,Class,WebServiceFeature...)}
+ *      <li>{@link Service#getPort(Class,WebServiceFeature...)}
+ *      <li>{@link Service#getPort(EndpointReference,Class,WebServiceFeature...)}
+ *      <li>{@link Service#createDispatch(QName,Class,
+ *           Service.Mode mode,WebServiceFeature...)}
+ *      <li>{@link Service21#createDispatch(EndpointReference,
+ *           Class,Service.Mode,
+ *           WebServiceFeature...)}
+ *      <li>{@link Service#createDispatch(QName,
+ *           JAXBContext, Service.Mode, WebServiceFeature...)}
+ *      <li>{@link Service#createDispatch(EndpointReference,
+ *           JAXBContext, Service.Mode, WebServiceFeature...)}
+ *      <li>{@link EndpointReference#getPort(Class,WebServiceFeature...)}
+ *      <li>One of the <code>getXXXPort(WebServiceFeatures...)</code> methods on a
+ *          generated <code>Service</code>.
+ *    </ul>
+ *  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: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
+ *  <code>WebServiceException</code> no sooner than when one of the methods
+ *  above is invoked but no later than the first invocation of an endpoint
+ *  operation.
+ *    <li>throw a WebServiceException and the endpoint MUST fail to start
+ *  </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 javax.xml.ws.RespectBindingFeature
+ *
+ * @since JAX-WS 2.1
+ */
+ at Target(ElementType.TYPE)
+ 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;
+}

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/RespectBindingFeature.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/RespectBindingFeature.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/RespectBindingFeature.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/RespectBindingFeature.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,126 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package javax.xml.ws;
+
+import javax.xml.ws.WebServiceFeature;
+
+/**
+ * This feature clarifies the use of the <code>wsdl:binding</code>
+ * in a JAX-WS runtime.
+ * <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 are either understood
+ and used by the runtime, or explicitly disabled by the web service
+ *  application.  A web service application can disable a particular
+ *  extension that has a know <code>WebServiceFeature</code> using
+ *  either the {@link BindingType#features} element on the server
+ *  or one of the following methods on the client:
+ *    <ul>
+ *      <li>{@link Service#getPort(QName,Class,WebServiceFeature...)}
+ *      <li>{@link Service#getPort(Class,WebServiceFeature...)}
+ *      <li>{@link Service#getPort(EndpointReference,Class,WebServiceFeature...)}
+ *      <li>{@link Service#createDispatch(QName,Class, 
+ *           Service.Mode mode,WebServiceFeature...)}
+ *      <li>{@link Service21#createDispatch(EndpointReference,
+ *           Class,Service.Mode, 
+ *           WebServiceFeature...)}
+ *      <li>{@link Service#createDispatch(QName,
+ *           JAXBContext, Service.Mode, WebServiceFeature...)}
+ *      <li>{@link Service#createDispatch(EndpointReference,
+ *           JAXBContext, Service.Mode, WebServiceFeature...)}
+ *      <li>{@link EndpointReference#getPort(Class,WebServiceFeature...)}
+ *      <li>One of the <code>getXXXPort(WebServiceFeatures...)</code> methods on a
+ *          generated <code>Service</code>.
+ *    </ul>
+ *  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: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 
+ *  <code>WebServiceException</code> no sooner than when one of the methods
+ *  above is invoked but no later than the first invocation of an endpoint
+ *  operation. 
+ *    <li>throw a WebServiceException and the endpoint MUST fail to start
+ *  </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 javax.xml.ws.soap.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.InspectBindingFeature";
+
+   /**
+    * Create an <code>RespectBindingFeature</code>.
+    * The instance created will be enabled.
+    */
+   public RespectBindingFeature()
+   {
+      this.enabled = true;
+   }
+
+   /**
+    * Create 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;
+   }
+}

Modified: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Service.java
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Service.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/Service.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -342,4 +342,395 @@
    {
       delegate.setExecutor(executor);
    }
+   
+   
+   
+   
+   
+   /**
+    * Creates a <code>Dispatch</code> instance for use with objects of
+    * the users 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 WSDL Metadata from the <code>endpointReference</code>.
+    * If this <code>Service</code> instance has a WSDL and
+    * the <code>endpointReference</code>
+    * also has a WSDL, then the WSDL from this instance will 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> will be used.
+    * <p>
+    * This method behaves the same as calling
+    * <pre>
+    * dispatch = service.createDispatch(portName, type, mode, features);
+    * </pre>
+    * where the <code>portName</code> is retrieved from the
+    * <code>wsaw:EndpointName</code> attribute of the <code>wsaw:ServiceName</code>
+    * element in the
+    * metadata of the <code>endpointReference</code>.
+    * <br>
+    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">WS-Addressing - WSDL 1.0
+    * </a>.
+    *
+    * @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
+    * javax.xml.transform.Source and javax.xml.soap.SOAPMessage.
+    * @param mode Controls whether the created dispatch instance is message
+    * or payload oriented, i.e. whether the user will work with complete
+    * protocol messages or message payloads. E.g. when using the SOAP
+    * protocol, this parameter controls whether the user will work with
+    * SOAP messages or the contents of a SOAP body. Mode MUST be MESSAGE
+    * when type is SOAPMessage.
+    * @param features  An array of WebServiceFeatures 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>wsaw:ServiceName</code> element
+    *                    or the <code>wsaw:EndpointName</code> attribute
+    *                    is missing in the metdata of the
+    *                    <code>endpointReference</code>.
+    *                    <li>If the <code>wsaw:ServiceName</code> does not
+    *                    match the <code>serviceName</code> of this instance.
+    *                    <li>If the <code>wsaw:EndpointName</code> does not
+    *                    match a valid wsdl:Port in the WSDL 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 ((ServiceDelegate)delegate).createDispatch(endpointReference, type, 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 WSDL Metadata from the <code>endpointReference</code>.
+   * If this <code>Service</code> instance has a WSDL and
+   * the <code>endpointReference</code>
+   * also has a WSDL, then the WSDL from this instance will 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> will be used.
+   * <p>
+   * This method behavies the same as calling
+   * <pre>
+   * dispatch = service.createDispatch(portName, context, mode, features);
+   * </pre>
+   * where the <code>portName</code> is retrieved from the
+   * <code>wsaw:EndpointName</code> attribute of the <code>wsaw:ServiceName</code>
+   * element in the
+   * metadata of the <code>endpointReference</code>.
+   * <br>
+   * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">WS-Addressing - WSDL 1.0
+   * </a>.
+   *
+   * @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 WebServiceFeatures to configure on the
+   *                proxy.  Supported features not in the <code>features
+   *                </code> parameter will have their default values.
+   *
+   * @return Dispatch instance
+   * @throws WebServiceException
+   * @throws WebServiceException
+   *                  <UL>
+   *                    <li>If there is any missing WSDL metadata
+   *                      as required by this method.
+   *                    <li>If the <code>wsaw:ServiceName</code> element
+   *                    or the <code>wsaw:EndpointName</code> attribute
+   *                    is missing in the metdata of the
+   *                    <code>endpointReference</code>.
+   *                    <li>If the <code>wsaw:ServiceName</code> does not
+   *                    match the <code>serviceName</code> of this instance.
+   *                    <li>If the <code>wsaw:EndpointName</code> does not
+   *                    match a valid wsdl:Port in the WSDL 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 ((ServiceDelegate)delegate).createDispatch(endpointReference, context, mode, features);
+   }
+
+   /**
+    * Creates a <code>Dispatch</code> instance for use with objects of
+    * the users choosing.
+    *
+    * @param portName  Qualified name for the target service endpoint
+    * @param type The class of object used for messages or message
+    * payloads. Implementations are required to support
+    * javax.xml.transform.Source and javax.xml.soap.SOAPMessage.
+    * @param mode Controls whether the created dispatch instance is message
+    * or payload oriented, i.e. whether the user will work with complete
+    * protocol messages or message payloads. E.g. when using the SOAP
+    * protocol, this parameter controls whether the user will work with
+    * SOAP messages or the contents of a SOAP body. Mode MUST be MESSAGE
+    * when type is SOAPMessage.
+    * @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 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 ((ServiceDelegate)delegate).createDispatch(portName, 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 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 WebServiceFeatures 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 ((ServiceDelegate)delegate).createDispatch(portName, context, mode, features);
+   }
+
+   /**
+    * The getPort 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 ((ServiceDelegate)delegate).getPort(serviceEndpointInterface, features);
+   }
+
+   /**
+    * The getPort 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 WSDL Metadata from the <code>endpointReference</code>.
+    * If this <code>Service</code> instance has a WSDL and
+    * the <code>endpointReference</code>
+    * also has a WSDL, then the WSDL from this instance will 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> will 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>
+    * port = service.getPort(portName, serviceEndpointInterface);
+    * </pre>
+    * where the <code>portName</code> is retrieved from the
+    * <code>wsaw:EndpontName</code> attribute of the
+    * <code>wsaw:ServiceName</code> element in the
+    * metadata of the <code>endpointReference</code> or from the
+    * <code>serviceEndpointInterface</code> and the WSDL
+    * associated with this <code>Service</code> instance.
+    * <br>
+    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">WS-Addressing - WSDL 1.0
+    * </a>.
+    *
+    * @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  An array 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 the <code>wsaw:EndpointName</code> is
+    *                      missing from the <code>endpointReference</code>
+    *                      or does not match a wsdl:Port
+    *                      in the WSDL metadata.
+    *                  <LI>If the <code>wsaw:ServiceName</code> in the
+    *                      <code>endpointReference</code> metadata does not
+    *                      match the <code>serviceName</code> of this
+    *                      <code>Service</code> instance.
+    *                  <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 ((ServiceDelegate)delegate).getPort(endpointReference, serviceEndpointInterface, features);
+   }
+
+   /**
+    * The getPort 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 ((ServiceDelegate)delegate).getPort(portName, serviceEndpointInterface, features);
+   }
+   
 }

Modified: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/WebServiceContext.java
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/WebServiceContext.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/WebServiceContext.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -22,6 +22,9 @@
 package javax.xml.ws;
 
 import javax.xml.ws.handler.MessageContext;
+
+import org.w3c.dom.Element;
+
 import java.security.Principal;
 
 /**
@@ -91,5 +94,52 @@
     *         being serviced.
     **/
    public boolean isUserInRole(String role);
+   
+   /**
+    * Returns the <code>WEndpointReference</code> for this
+    * endpoint.
+    *
+    * @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 javax.xml.ws.wsaddressing.W3CEndpointReference
+    *
+    * @since JAX-WS 2.1
+    */
+   public EndpointReference getEndpointReference(Element... referenceParameters);
 
+   /**
+    * Returns the <code>EndpointReference</code> associated with
+    * this endpoint.
+    * <p>
+    *
+    * @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 abstract <T extends EndpointReference> T getEndpointReference(Class<T> clazz, Element... referenceParameters);
+
 }

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/WebServiceFeature.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/WebServiceFeature.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/WebServiceFeature.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/WebServiceFeature.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,77 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+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;
+   }
+}

Modified: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/handler/MessageContext.java
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/handler/MessageContext.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/handler/MessageContext.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -144,6 +144,16 @@
    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

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/Addressing.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/soap/Addressing.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/Addressing.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/Addressing.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,88 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package javax.xml.ws.soap;
+
+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;
+
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
+
+/**
+ * This feature 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 NOT required.
+ * <p>
+ * Enabling this feature will result in the
+ * <code>wsaw:UsingAddressing</code> element being added to the
+ * <code>wsdl:Binding</code> for
+ * the endpoint and in the runtime being capable of responding to
+ * WS-Addressing headers.
+ * <p>
+ * The following describes the affects of this feature with respect
+ * to be enabled or disabled:
+ * <ul>
+ *  <li> ENABLED: In this Mode, Addressing will be enabled.
+ *       If there is not a WSDL associated with the Endpoint and
+ *       a WSDL is to be generated, it MUST be generated with the
+ *       wsaw:UsingAddressing element. At runtime, Addressing headers
+ *       MUST be consumed by the receiver and generated by the
+ *       sender even if the WSDL declares otherwise. The
+ *       mustUnderstand="0" attribute MUST be used on the Addressing
+ *       headers.
+ *  <li> DISABLED: In this Mode, Addressing will be disabled
+ *       even if an associated WSDL specifies otherwise. At runtime,
+ *       Addressing headers MUST NOT be used.
+ * </ul>
+ * <p>
+ * The {@link #required} property can be used to
+ * specify if the <code>required</code> attribute on the
+ * <code>wsaw:UsingAddressing</code> element should
+ * be <code>true</code> or <code>false</code>.  By default the
+ * <code>wsdl:required</code> parameter is <code>false</code>.
+ *
+ * See <a href="http://www.w3.org/TR/2006/REC-ws-addr-core-20060509/">WS-Addressing</a>
+ * for more information on WS-Addressing.
+ * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">WS-Addressing - WSDL 1.0
+ * </a> for more information on <code>wsaw:UsingAddressing</code>.
+ *
+ * @since JAX-WS 2.1
+ */
+ at Target(ElementType.TYPE)
+ 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.
+     */
+    boolean enabled() default true;
+    
+    /**
+     * Property to determine the value of the
+     * <code>wsdl:required</code> attribute on
+     * <code>wsaw:UsingAddressing</code> element in the WSDL.
+     */
+    boolean required() default false;
+}

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/AddressingFeature.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/soap/AddressingFeature.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/AddressingFeature.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/AddressingFeature.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,141 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package javax.xml.ws.soap;
+
+import javax.xml.ws.WebServiceFeature;
+
+/**
+ * This feature 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 NOT required.
+ * <p>
+ * Enabling this feature on the server will result in the
+ * <code>wsaw:UsingAddressing</code> element being added to the 
+ * <code>wsdl:Binding</code> for 
+ * the endpoint and in the runtime being capable of responding to
+ * WS-Addressing headers.
+ * <p>
+ * Enabling this feature on the client will cause the JAX-WS runtime
+ * to include WS-Addressing headers in SOAP messages.
+ * <p>
+ * If the web service developer has not explicitly enabled this feature,
+ * it may be automatically enabled if the associated WSDL enables
+ * WS-Addressing via the <code>wsaw:UsingAddressing</code> element with
+ * the <code>wsdl:required</code> attribute set to <code>true</code>.
+ * <br>
+ * See {@link javax.xml.ws.RespectBindingFeature} for more information 
+ * on required WSDL extensions.
+ * <p>
+ * The following describes the affects of this feature with respect
+ * to be enabled or disabled:
+ * <ul>
+ *  <li> ENABLED: In this Mode, Addressing will be enabled. 
+ *       If there is not a WSDL associated with the Endpoint and
+ *       a WSDL is to be generated, it MUST be generated with the 
+ *       wsaw:UsingAddressing element. At runtime, Addressing headers
+ *       MUST be consumed by the receiver and generated by the
+ *       sender even if the WSDL declares otherwise. The
+ *       mustUnderstand="0" attribute MUST be used on the Addressing
+ *       headers.
+ *  <li> DISABLED: In this Mode, Addressing will be disabled
+ *       even if an associated WSDL specifies otherwise. At runtime, 
+ *       Addressing headers MUST NOT be used.
+ * </ul>
+ * <p>
+ * The {@link #required} property can be used to 
+ * specify if the <code>required</code> attribute on the 
+ * <code>wsaw:UsingAddressing</code> element should
+ * be <code>true</code> or <code>false</code>.  By default the
+ * <code>wsdl:required</code> parameter is <code>false</code>.
+ *
+ * See <a href="http://www.w3.org/TR/2006/REC-ws-addr-core-20060509/">WS-Addressing</a>
+ * for more information on WS-Addressing.
+ * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">WS-Addressing - WSDL 1.0
+ * </a> for more information on <code>wsaw:UsingAddressing</code>.
+ *
+ * @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";
+  
+    /**
+     * Property for <code>required</code> feature parameter. When Addressing 
+     * is enabled, the value of this property will be set to the 
+     * <code>wsdl:required</code> attribute on 
+     * <code>wsaw:UsingAddressing</code> element in the WSDL.
+     */
+    protected boolean required = false;
+    
+    /**
+     * Create an <code>AddressingFeature</code>.
+     * The instance created will be enabled.
+     */
+    public AddressingFeature() {
+        this.enabled = true;
+    }
+    
+    /** 
+     * Create an <code>AddressingFeature</code>
+     * 
+     * @param enabled specifies whether this feature should
+     * be enabled or not.
+     */
+    public AddressingFeature(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    /** 
+     * Create an <code>AddressingFeature</code>
+     * 
+     * @param enabled specifies whether this feature should
+     * be enabled or not.
+     * @param required specifies the value that will be used  
+     * for the <code>wsdl:required</code> attribute on the
+     * <code>wsaw:UsingAddressing</code> element.
+     */
+    public AddressingFeature(boolean enabled, boolean required) {
+        this.enabled = enabled;
+        this.required = required;
+    }    
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getID() {
+        return ID;
+    }
+    
+    /**
+     * Gets the boolean value used to set the
+     * <code>wsdl:required</code> attribute on 
+     * <code>wsaw:UsingAddressing</code> element 
+     * in the WSDL.
+     *
+     * @return the current required value
+     */
+    public boolean isRequired() {
+        return required;
+    }    
+}

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/MTOM.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/soap/MTOM.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/MTOM.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/MTOM.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,65 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package javax.xml.ws.soap;
+
+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;
+
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
+
+/**
+ * This feature represents the use of MTOM with a 
+ * web service.
+ *
+ * <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.
+ *  <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
+ */   
+ at Target(ElementType.TYPE)
+ 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;
+}

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/MTOMFeature.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/soap/MTOMFeature.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/MTOMFeature.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/soap/MTOMFeature.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,126 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package javax.xml.ws.soap;
+
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.WebServiceFeature;
+
+/**
+ * This feature represents the use of MTOM with a 
+ * web service.
+ *
+ * <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.
+ *  <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;
+    }
+}

Modified: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/Provider.java
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/Provider.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/Provider.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -21,10 +21,17 @@
  */
 package javax.xml.ws.spi;
 
+import java.util.List;
+
 import javax.xml.namespace.QName;
 import javax.xml.ws.Endpoint;
+import javax.xml.ws.EndpointReference;
 import javax.xml.ws.WebServiceException;
+import javax.xml.ws.WebServiceFeature;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
 
+import org.w3c.dom.Element;
+
 /**
  * Service provider for ServiceDelegate and Endpoint objects.
  *  
@@ -132,4 +139,128 @@
     */
    public abstract Endpoint createAndPublishEndpoint(String address, Object implementor);
 
+   /**
+    * 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 from the <code>EndpointReference</code>.
+    *
+    *
+    * @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 javax.xml.ws.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 feature is enabled that is not compatible with
+    *                      this port or is unsupported.
+    *                   </UL>
+    *
+    * @see javax.xml.ws.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.IllegalArgumentException</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 javax.lang.IllegalArgumentException
+    *     <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 javax.xml.ws.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);
+
+    /**
+    * read an EndpointReference from the infoset contained in
+    * <code>eprInfoset</code>.
+    *
+    * @returns the <code>EndpointReference</code> unmarshalled from
+    * <code>eprInfoset</code>.  This method never returns <code>null</code>.
+    *
+    * @throws javax.xml.ws.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);
 }

Modified: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/ServiceDelegate.java
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/ServiceDelegate.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/ServiceDelegate.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -26,8 +26,10 @@
 import javax.xml.bind.JAXBContext;
 import javax.xml.namespace.QName;
 import javax.xml.ws.Dispatch;
+import javax.xml.ws.EndpointReference;
 import javax.xml.ws.Service;
 import javax.xml.ws.WebServiceException;
+import javax.xml.ws.WebServiceFeature;
 import javax.xml.ws.handler.HandlerResolver;
 
 /**
@@ -105,6 +107,163 @@
    public abstract <T> T getPort(Class<T> serviceEndpointInterface);
 
    /**
+    * The getPort 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 javax.xml.ws.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 javax.xml.ws.WebServiceFeature
+    *
+    * @since JAX-WS 2.1
+    **/
+   public abstract <T> T getPort(QName portName,
+                                 Class<T> serviceEndpointInterface, WebServiceFeature... features);
+
+   /**
+    * The getPort 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 WSDL Metadata from the <code>endpointReference</code>.
+    * If this <code>Service</code> instance has a WSDL and
+    * the <code>endpointReference</code>
+    * also has a WSDL, then the WSDL from this instance will 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> will 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>
+    * port = service.getPort(portName, serviceEndpointInterface);
+    * </pre>
+    * where the <code>portName</code> is retrieved from the
+    * <code>wsaw:EndpontName</code> attribute of the
+    * <code>wsaw:ServiceName</code> element in the
+    * metadata of the <code>endpointReference</code> or from the
+    * <code>serviceEndpointInterface</code> and the WSDL
+    * associated with this <code>Service</code> instance.
+    * <br>
+    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">WS-Addressing - WSDL 1.0
+    * </a>.
+    *
+    * @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 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 javax.xml.ws.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>wsaw:EndpointName</code> is
+    *                      missing from the <code>endpointReference</code>
+    *                      or does not match a wsdl:Port
+    *                      in the WSDL metadata.
+    *                  <LI>If the <code>wsaw:ServiceName</code> in the
+    *                      <code>endpointReference</code> metadata does not
+    *                      match the <code>serviceName</code> of this
+    *                      <code>Service</code> instance.
+    *                  <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 getPort 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 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 javax.xml.ws.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.
@@ -166,6 +325,223 @@
    public abstract Dispatch<Object> createDispatch(QName portName, JAXBContext context, Service.Mode mode);
 
    /**
+    * Creates a <code>Dispatch</code> instance for use with objects of
+    * the users choosing.
+    *
+    * @param portName  Qualified name for the target service endpoint
+    * @param type The class of object used for messages or message
+    * payloads. Implementations are required to support
+    * javax.xml.transform.Source and javax.xml.soap.SOAPMessage.
+    * @param mode Controls whether the created dispatch instance is message
+    * or payload oriented, i.e. whether the user will work with complete
+    * protocol messages or message payloads. E.g. when using the SOAP
+    * protocol, this parameter controls whether the user will work with
+    * SOAP messages or the contents of a SOAP body. Mode MUST be MESSAGE
+    * when type is SOAPMessage.
+    * @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 Dispatch instance
+    * @throws javax.xml.ws.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 users 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 WSDL Metadata from the <code>endpointReference</code>.
+    * If this <code>Service</code> instance has a WSDL and
+    * the <code>endpointReference</code>
+    * also has a WSDL, then the WSDL from this instance will 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> will be used.
+    * <p>
+    * This method behaves the same as calling
+    * <pre>
+    * dispatch = service.createDispatch(portName, type, mode, features);
+    * </pre>
+    * where the <code>portName</code> is retrieved from the
+    * <code>wsaw:EndpointName</code> attribute of the <code>wsaw:ServiceName</code>
+    * element in the
+    * metadata of the <code>endpointReference</code>.
+    * <br>
+    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">WS-Addressing - WSDL 1.0
+    * </a>.
+    *
+    * @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
+    * javax.xml.transform.Source and javax.xml.soap.SOAPMessage.
+    * @param mode Controls whether the created dispatch instance is message
+    * or payload oriented, i.e. whether the user will work with complete
+    * protocol messages or message payloads. E.g. when using the SOAP
+    * protocol, this parameter controls whether the user will work with
+    * SOAP messages or the contents of a SOAP body. Mode MUST be MESSAGE
+    * when type is SOAPMessage.
+    * @param features  An array of WebServiceFeatures to configure on the
+    *                proxy.  Supported features not in the <code>features
+    *                </code> parameter will have their default values.
+    *
+    * @return Dispatch instance
+    * @throws javax.xml.ws.WebServiceException
+    *                  <UL>
+    *                    <LI>If there is any missing WSDL metadata
+    *                      as required by this method.
+    *                    <li>If the <code>wsaw:ServiceName</code> element
+    *                    or the <code>wsaw:EndpointName</code> attribute
+    *                    is missing in the metdata of the
+    *                    <code>endpointReference</code>.
+    *                    <li>If the <code>wsaw:ServiceName</code> does not
+    *                    match the <code>serviceName</code> of this instance.
+    *                    <li>If the <code>wsaw:EndpointName</code> does not
+    *                    match a valid wsdl:Port in the WSDL 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.
+    * @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 Dispatch instance
+    * @throws javax.xml.ws.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 WSDL Metadata from the <code>endpointReference</code>.
+    * If this <code>Service</code> instance has a WSDL and
+    * the <code>endpointReference</code>
+    * also has a WSDL, then the WSDL from this instance will 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> will be used.
+    * <p>
+    * This method behavies the same as calling
+    * <pre>
+    * dispatch = service.createDispatch(portName, context, mode, features);
+    * </pre>
+    * where the <code>portName</code> is retrieved from the
+    * <code>wsaw:EndpointName</code> attribute of the <code>wsaw:ServiceName</code>
+    * element in the
+    * metadata of the <code>endpointReference</code>.
+    * <br>
+    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">WS-Addressing - WSDL 1.0
+    * </a>.
+    *
+    * @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 WebServiceFeatures to configure on the
+    *                proxy.  Supported features not in the <code>features
+    *                </code> parameter will have their default values.
+    *
+    * @return Dispatch instance
+    * @throws javax.xml.ws.WebServiceException
+    * @throws javax.xml.ws.WebServiceException
+    *                  <UL>
+    *                    <li>If there is any missing WSDL metadata
+    *                      as required by this method.
+    *                    <li>If the <code>wsaw:ServiceName</code> element
+    *                    or the <code>wsaw:EndpointName</code> attribute
+    *                    is missing in the metdata of the
+    *                    <code>endpointReference</code>.
+    *                    <li>If the <code>wsaw:ServiceName</code> does not
+    *                    match the <code>serviceName</code> of this instance.
+    *                    <li>If the <code>wsaw:EndpointName</code> does not
+    *                    match a valid wsdl:Port in the WSDL 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
     **/

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/WebServiceFeatureAnnotation.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/spi/WebServiceFeatureAnnotation.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/WebServiceFeatureAnnotation.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/spi/WebServiceFeatureAnnotation.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,69 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package javax.xml.ws.spi;
+
+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;
+
+import javax.xml.ws.WebServiceFeature;
+
+/**
+ * Annotation used to identify other annotations
+ * as a <code>WebServiceFeature</code>.
+ *
+ * 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>. 
+ * JAX-WS defines the following
+ * <code>WebServiceFeature</code> annotations, however, an implementation
+ * may define vendors specific annotations for other features.
+ * If a JAX-WS implementation encounters an annotation annotated
+ * with the <code>WebServiceFeatureAnnotation</code> that is does not
+ * recognize/support an error MUST be given.
+ *
+ * @see javax.xml.ws.soap.WSAddressing
+ * @see javax.xml.ws.soap.MTOM
+ * @see javax.xml.ws.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();
+}

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing)

Deleted: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java
===================================================================
--- stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java	2009-01-23 10:52:49 UTC (rev 9105)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,306 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package javax.xml.ws.wsaddressing;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-import java.util.Map;
-
-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.XmlTransient;
-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 org.w3c.dom.Element;
-
-/**
- * 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
-{
-   protected static final String NS = "http://www.w3.org/2005/08/addressing";
-   
-   private final static JAXBContext w3cjc = getW3CJaxbContext();
-   
-   // 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;
-   @XmlAnyAttribute
-   Map<QName, String> attributes;
-   @XmlAnyElement
-   List<Element> elements;
-
-   // not marshalled
-   private QName serviceName;
-   private QName endpointName;
-   private URL wsdlLocation;
-   
-   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;
-      }
-      catch (JAXBException e)
-      {
-         throw new WebServiceException("Error unmarshalling W3CEndpointReference ", e);
-      }
-      catch (ClassCastException e)
-      {
-         throw new WebServiceException("Source did not contain W3CEndpointReference", e);
-      }
-   }
-
-   @XmlTransient
-   public String getAddress()
-   {
-      return address != null ? address.getUri() : null;
-   }
-
-   void setAddress(String address)
-   {
-      this.address = new Address(address);
-   }
-   
-   @XmlTransient
-   public QName getServiceName()
-   {
-      return serviceName;
-   }
-
-   public void setServiceName(QName serviceName)
-   {
-      this.serviceName = serviceName;
-   }
-
-   @XmlTransient
-   public QName getEndpointName()
-   {
-      return endpointName;
-   }
-
-   public void setEndpointName(QName endpointName)
-   {
-      this.endpointName = endpointName;
-   }
-
-   @XmlTransient
-   public List<Element> getMetadata()
-   {
-      return metadata != null ? metadata.getElements() : null;
-   }
-
-   public void setMetadata(List<Element> metadata)
-   {
-      this.metadata = new Elements(metadata);
-   }
-
-   @XmlTransient
-   public URL getWsdlLocation()
-   {
-      return wsdlLocation;
-   }
-
-   public void setWsdlLocation(String wsdlLocation)
-   {
-      try
-      {
-         this.wsdlLocation = wsdlLocation != null ? new URL(wsdlLocation) : null;
-      }
-      catch (MalformedURLException e)
-      {
-         throw new IllegalArgumentException("Invalid URL: " + wsdlLocation);
-      }
-   }
-
-   @XmlTransient
-   public List<Element> getReferenceParameters()
-   {
-      return referenceParameters != null ? referenceParameters.getElements() : null;
-   }
-
-   public void setReferenceParameters(List<Element> metadata)
-   {
-      this.referenceParameters = new Elements(metadata);
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   public void writeTo(Result result)
-   {
-      try
-      {
-         Marshaller marshaller = w3cjc.createMarshaller();
-         marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
-         marshaller.marshal(this, result);
-      }
-      catch (JAXBException e)
-      {
-         throw new WebServiceException("Error marshalling W3CEndpointReference. ", e);
-      }
-   }
-
-   private static JAXBContext getW3CJaxbContext()
-   {
-      try
-      {
-         return JAXBContext.newInstance(new Class[] { W3CEndpointReference.class });
-      }
-      catch (JAXBException ex)
-      {
-         throw new WebServiceException("Cannot obtain JAXB context", ex);
-      }
-   }
-
-   private static class Address
-   {
-      @XmlValue
-      String uri;
-      @XmlAnyAttribute
-      Map<QName, String> attributes;
-      
-      protected Address()
-      {
-      }
-
-      public Address(String uri)
-      {
-         this.uri = uri;
-      }
-
-      @XmlTransient
-      public String getUri()
-      {
-         return uri;
-      }
-
-      public void setUri(String uri)
-      {
-         this.uri = uri;
-      }
-
-      @XmlTransient
-      public Map<QName, String> getAttributes()
-      {
-         return attributes;
-      }
-
-      public void setAttributes(Map<QName, String> attributes)
-      {
-         this.attributes = attributes;
-      }
-   }
-
-   private static class Elements
-   {
-      @XmlAnyElement
-      List<Element> elements;
-      @XmlAnyAttribute
-      Map<QName, String> attributes;
-      
-      protected Elements()
-      {
-      }
-
-      public Elements(List<Element> elements)
-      {
-         this.elements = elements;
-      }
-
-      @XmlTransient
-      public List<Element> getElements()
-      {
-         return elements;
-      }
-
-      public void setElements(List<Element> elements)
-      {
-         this.elements = elements;
-      }
-
-      @XmlTransient
-      public Map<QName, String> getAttributes()
-      {
-         return attributes;
-      }
-
-      public void setAttributes(Map<QName, String> attributes)
-      {
-         this.attributes = attributes;
-      }
-   }
-}

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReference.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,306 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package javax.xml.ws.wsaddressing;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+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.XmlTransient;
+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 org.w3c.dom.Element;
+
+/**
+ * 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
+{
+   protected static final String NS = "http://www.w3.org/2005/08/addressing";
+   
+   private final static JAXBContext w3cjc = getW3CJaxbContext();
+   
+   // 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;
+   @XmlAnyAttribute
+   Map<QName, String> attributes;
+   @XmlAnyElement
+   List<Element> elements;
+
+   // not marshalled
+   private QName serviceName;
+   private QName endpointName;
+   private URL wsdlLocation;
+   
+   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;
+      }
+      catch (JAXBException e)
+      {
+         throw new WebServiceException("Error unmarshalling W3CEndpointReference ", e);
+      }
+      catch (ClassCastException e)
+      {
+         throw new WebServiceException("Source did not contain W3CEndpointReference", e);
+      }
+   }
+
+   @XmlTransient
+   public String getAddress()
+   {
+      return address != null ? address.getUri() : null;
+   }
+
+   void setAddress(String address)
+   {
+      this.address = new Address(address);
+   }
+   
+   @XmlTransient
+   public QName getServiceName()
+   {
+      return serviceName;
+   }
+
+   public void setServiceName(QName serviceName)
+   {
+      this.serviceName = serviceName;
+   }
+
+   @XmlTransient
+   public QName getEndpointName()
+   {
+      return endpointName;
+   }
+
+   public void setEndpointName(QName endpointName)
+   {
+      this.endpointName = endpointName;
+   }
+
+   @XmlTransient
+   public List<Element> getMetadata()
+   {
+      return metadata != null ? metadata.getElements() : null;
+   }
+
+   public void setMetadata(List<Element> metadata)
+   {
+      this.metadata = new Elements(metadata);
+   }
+
+   @XmlTransient
+   public URL getWsdlLocation()
+   {
+      return wsdlLocation;
+   }
+
+   public void setWsdlLocation(String wsdlLocation)
+   {
+      try
+      {
+         this.wsdlLocation = wsdlLocation != null ? new URL(wsdlLocation) : null;
+      }
+      catch (MalformedURLException e)
+      {
+         throw new IllegalArgumentException("Invalid URL: " + wsdlLocation);
+      }
+   }
+
+   @XmlTransient
+   public List<Element> getReferenceParameters()
+   {
+      return referenceParameters != null ? referenceParameters.getElements() : null;
+   }
+
+   public void setReferenceParameters(List<Element> metadata)
+   {
+      this.referenceParameters = new Elements(metadata);
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void writeTo(Result result)
+   {
+      try
+      {
+         Marshaller marshaller = w3cjc.createMarshaller();
+         marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
+         marshaller.marshal(this, result);
+      }
+      catch (JAXBException e)
+      {
+         throw new WebServiceException("Error marshalling W3CEndpointReference. ", e);
+      }
+   }
+
+   private static JAXBContext getW3CJaxbContext()
+   {
+      try
+      {
+         return JAXBContext.newInstance(new Class[] { W3CEndpointReference.class });
+      }
+      catch (JAXBException ex)
+      {
+         throw new WebServiceException("Cannot obtain JAXB context", ex);
+      }
+   }
+
+   private static class Address
+   {
+      @XmlValue
+      String uri;
+      @XmlAnyAttribute
+      Map<QName, String> attributes;
+      
+      protected Address()
+      {
+      }
+
+      public Address(String uri)
+      {
+         this.uri = uri;
+      }
+
+      @XmlTransient
+      public String getUri()
+      {
+         return uri;
+      }
+
+      public void setUri(String uri)
+      {
+         this.uri = uri;
+      }
+
+      @XmlTransient
+      public Map<QName, String> getAttributes()
+      {
+         return attributes;
+      }
+
+      public void setAttributes(Map<QName, String> attributes)
+      {
+         this.attributes = attributes;
+      }
+   }
+
+   private static class Elements
+   {
+      @XmlAnyElement
+      List<Element> elements;
+      @XmlAnyAttribute
+      Map<QName, String> attributes;
+      
+      protected Elements()
+      {
+      }
+
+      public Elements(List<Element> elements)
+      {
+         this.elements = elements;
+      }
+
+      @XmlTransient
+      public List<Element> getElements()
+      {
+         return elements;
+      }
+
+      public void setElements(List<Element> elements)
+      {
+         this.elements = elements;
+      }
+
+      @XmlTransient
+      public Map<QName, String> getAttributes()
+      {
+         return attributes;
+      }
+
+      public void setAttributes(Map<QName, String> attributes)
+      {
+         this.attributes = attributes;
+      }
+   }
+}

Deleted: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java
===================================================================
--- stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java	2009-01-23 10:52:49 UTC (rev 9105)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,272 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package javax.xml.ws.wsaddressing;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.namespace.QName;
-import javax.xml.ws.WebServiceException;
-
-import org.w3c.dom.Element;
-
-/**
- * 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
-{
-
-   private String address;
-   private List<Element> parameters;
-   private List<Element> metadata;
-   private QName serviceName;
-   private QName endpointName;
-   private String wsdlLocation;
-
-   public W3CEndpointReferenceBuilder()
-   {
-      parameters = new ArrayList<Element>();
-      metadata = 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>serviceName</code> as the
-    * <code>wsaw:ServiceName</code> element in the
-    * <code>wsa:Metadata</code> element.
-    *
-    * @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> 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 and attribute on
-    * <code>wsaw:ServiceName</code> element in the
-    * <code>wsa:Metadata</code> element. This method can only
-    * be called after the {@link #serviceName} method has been called.
-    *
-    * @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> atrribute added to the
-    *  <code>wsaw:ServiceName</code> element in the
-    *  <code>wsa:Metadata</code> element.
-    *
-    * @throws javax.lang.IllegalStateException If the <code>serviceName</code> has not
-    *  been set.
-    */
-   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 inlined
-    * in the <code>W3CEndpointReferenc</code> instance's
-    * <code>wsa:Metadata</code>.
-    *
-    * @param wsdlDocumentLocation The location of the WSDL document to
-    *      be inlined 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 inlined.
-    *
-    */
-   public W3CEndpointReferenceBuilder wsdlDocumentLocation(String wsdlDocumentLocation)
-   {
-      this.wsdlLocation = 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.");
-      parameters.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;
-   }
-
-   /**
-    * 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>javax.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 javax.lang.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>   Pr
-    *            and does not represent a valid WSDL.
-    *     </ul>
-    * @throws WebServiceException If an error occurs while creating the 
-    *                             <code>W3CEndpointReference</code>.
-    *       
-    */
-   public W3CEndpointReference build()
-   {
-      W3CEndpointReference epr = new W3CEndpointReference();
-      epr.setAddress(address);
-      epr.setServiceName(serviceName);
-      epr.setEndpointName(endpointName);
-      epr.setMetadata(metadata);
-      epr.setWsdlLocation(wsdlLocation);
-      epr.setReferenceParameters(parameters);
-      return epr;
-   }
-}

Copied: stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java (from rev 9105, stack/native/branches/jaxws21/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java)
===================================================================
--- stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java	                        (rev 0)
+++ stack/native/trunk/modules/jaxws/src/main/java/javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,272 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package javax.xml.ws.wsaddressing;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.WebServiceException;
+
+import org.w3c.dom.Element;
+
+/**
+ * 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
+{
+
+   private String address;
+   private List<Element> parameters;
+   private List<Element> metadata;
+   private QName serviceName;
+   private QName endpointName;
+   private String wsdlLocation;
+
+   public W3CEndpointReferenceBuilder()
+   {
+      parameters = new ArrayList<Element>();
+      metadata = 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>serviceName</code> as the
+    * <code>wsaw:ServiceName</code> element in the
+    * <code>wsa:Metadata</code> element.
+    *
+    * @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> 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 and attribute on
+    * <code>wsaw:ServiceName</code> element in the
+    * <code>wsa:Metadata</code> element. This method can only
+    * be called after the {@link #serviceName} method has been called.
+    *
+    * @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> atrribute added to the
+    *  <code>wsaw:ServiceName</code> element in the
+    *  <code>wsa:Metadata</code> element.
+    *
+    * @throws javax.lang.IllegalStateException If the <code>serviceName</code> has not
+    *  been set.
+    */
+   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 inlined
+    * in the <code>W3CEndpointReferenc</code> instance's
+    * <code>wsa:Metadata</code>.
+    *
+    * @param wsdlDocumentLocation The location of the WSDL document to
+    *      be inlined 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 inlined.
+    *
+    */
+   public W3CEndpointReferenceBuilder wsdlDocumentLocation(String wsdlDocumentLocation)
+   {
+      this.wsdlLocation = 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.");
+      parameters.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;
+   }
+
+   /**
+    * 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>javax.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 javax.lang.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>   Pr
+    *            and does not represent a valid WSDL.
+    *     </ul>
+    * @throws WebServiceException If an error occurs while creating the 
+    *                             <code>W3CEndpointReference</code>.
+    *       
+    */
+   public W3CEndpointReference build()
+   {
+      W3CEndpointReference epr = new W3CEndpointReference();
+      epr.setAddress(address);
+      epr.setServiceName(serviceName);
+      epr.setEndpointName(endpointName);
+      epr.setMetadata(metadata);
+      epr.setWsdlLocation(wsdlLocation);
+      epr.setReferenceParameters(parameters);
+      return epr;
+   }
+}

Deleted: stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Action.java
===================================================================
--- stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Action.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Action.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,142 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-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 <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 
- * contains explicit <code>wsaw:Action</code> attribute on the WSDL <code>input</code>, 
- * <code>output</code> and <code>fault</code> messages of the WSDL <code>operation</code> 
- * based upon which attributes of the <code>Action</code> annotation have been specified.
- * <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;javax.jws.WebService
- * public class AddNumbersImpl {
- *     &#64;javax.xml.ws.Action(
- *         input="http://example.com/inputAction",
- *         output="http://example.com/outputAction")
- *     public int addNumbers(int number1, int number2) {
- *         return number1 + number2;
- *     }
- * }
- * </pre>
- * 
- * The generated WSDL looks like:
- * <pre>
- *   &lt;definitions targetNamespace=&quot;http://example.com/numbers&quot; ...&gt;
- *   ...
- *     &lt;portType name=&quot;AddNumbersPortType&quot;&gt;
- *       &lt;operation name=&quot;AddNumbers&quot;&gt;
- *         &lt;input message=&quot;tns:AddNumbersInput&quot; name=&quot;Parameters&quot;
- *           wsaw:Action=&quot;http://example.com/inputAction&quot;/&gt;
- *        &lt;output message=&quot;tns:AddNumbersOutput&quot; name=&quot;Result&quot;
- *           wsaw:Action=&quot;http://example.com/outputAction&quot;/&gt;
- *       &lt;/operation&gt;
- *     &lt;portType&gt;
- *   ...
- *   &lt;definitions&gt;
- * </pre>
- * 
- * <p>
- * <b>Example 2</b>: Specify explicit value for <code>Action</code> message addressing property
- * for only the <code>input</code> message. The default values are used for the 
- * <code>output</code> message.
- * 
- * <pre>
- * &#64;javax.jws.WebService
- * public class AddNumbersImpl {
- *     &#64;javax.xml.ws.Action(input=&quot;http://example.com/inputAction&quot;)
- *     public int addNumbers(int number1, int number2) {
- *         return number1 + number2;
- *     }
- * }
- * </pre>
- * 
- * The generated WSDL looks like:
- * 
- * <pre>
- *   &lt;definitions targetNamespace=&quot;http://example.com/numbers&quot; ...&gt;
- *   ...
- *     &lt;portType name=&quot;AddNumbersPortType&quot;&gt;
- *       &lt;operation name=&quot;AddNumbers&quot;&gt;
- *         &lt;input message=&quot;tns:AddNumbersInput&quot; name=&quot;Parameters&quot;
- *           wsaw:Action=&quot;http://example.com/inputAction&quot;/&gt;
- *        &lt;output message=&quot;tns:AddNumbersOutput&quot; name=&quot;Result&quot;/&gt;
- *       &lt;/operation&gt;
- *     &lt;portType&gt;
- *   ...
- *   &lt;definitions&gt;
- * </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, a default value of <code>wsaw:Action</code> is used 
- * for the <code>input</code> message.
- * 
- * <p>
- * <b>Example 3</b>: See <a href="FaultAction.html">FaultAction</a> 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 <code>Action</code> message addressing property for the <code>input</code>
-    * message of the operation. If the value is "", then no <code>wsaw:Action</code>
-    * is generated.
-    */
-   String input() default "";
-
-   /**
-    * Explicit value of <code>Action</code> message addressing property for the <code>output</code>
-    * message of the operation. If the value is "", then no <code>wsaw:Action</code>
-    * is generated.
-    */
-   String output() default "";
-
-   /**
-    * Explicit value of <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 explicit
-    * <code>Action</code> message addressing property, need to be specified as a value in this property 
-    * using <a href="FaultAction.html">FaultAction</a> annotation.
-    */
-   FaultAction[] fault() default {};
-}

Deleted: stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Binding21.java
===================================================================
--- stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Binding21.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Binding21.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,38 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package javax.xml.ws;
-
-/**
- * @author Heiko.Braun at jboss.com
- */
-public interface Binding21 extends Binding
-{
-   /**
-    * 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();
-}

Deleted: stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Endpoint21.java
===================================================================
--- stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Endpoint21.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Endpoint21.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,104 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package javax.xml.ws;
-
-import org.w3c.dom.Element;
-
-/**
- * @author Heiko.Braun at jboss.com
- */
-public abstract class Endpoint21 extends Endpoint
-{
-   /**
-    * 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.
-    * If the returned <code>EndpointReference</code> is a
-    * <code>W3CEndpointReference</code> it MUST contain
-    * the <code>wsaw:ServiceName</code> element and the
-    * <code>wsaw:EndpointName</code> attribute on the
-    * <code>wsaw:ServiceName</code>. It SHOULD contain
-    * the embedded WSDL in the <code>wsa:Metadata</code> element
-    * if there is an associated WSDL. The
-    * <code>wsaw:InterfaceName</code> MAY also be present.
-    * <br>
-    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">
-    * WS-Addressing - WSDL 1.0</a>.
-    *
-    * @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 javax.xml.ws.wsaddressing.W3CEndpointReference
-    *
-    * @since JAX-WS 2.1
-    **/
-   public abstract EndpointReference getEndpointReference(Element... referenceParameters);
-
-   /**
-    * Returns the <code>EndpointReference</code> associated with
-    * this <code>Endpoint</code> instance.
-    * <p>
-    * If the returned <code>EndpointReference</code> is a
-    * <code>W3CEndpointReference</code> it MUST contain
-    * the <code>wsaw:ServiceName</code> element and the
-    * <code>wsaw:EndpointName</code> attribute on the
-    * <code>wsaw:ServiceName</code>. It SHOULD contain
-    * the embedded WSDL in the <code>wsa:Metadata</code> element
-    * if there is an associated WSDL. The
-    * <code>wsaw:InterfaceName</code> MAY also be present.
-    * <br>
-    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">
-    * WS-Addressing - WSDL 1.0</a>.
-    *
-    * @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);
-}

Deleted: stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/EndpointReference.java
===================================================================
--- stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/EndpointReference.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/EndpointReference.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,187 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package javax.xml.ws;
-
-import java.io.StringWriter;
-
-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.spi.Provider21;
-import javax.xml.ws.wsaddressing.W3CEndpointReference;
-
-/**
- * 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/">
- * WS-Addressing</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 WS-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 createEndpointReference
- * vendor specific <code>EndpointReferences</code> that that
- * vendor can use to flag a different version of
- * addressing.
- * <p>
- * Web service developers that wish to pass or return 
- * <code>EndpointReferences</code> in Java methods in an
- * SEI should use
- * concrete instances of an <code>EndpointReference</code> such
- * as the <code>W3CEndpointReferendce</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
- */
-//@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 null <code>eprInfoset</tt> value is given.
-    */
-   public static EndpointReference readFrom(Source eprInfoset)
-   {
-      return ((Provider21)Provider.provider()).readEndpointReference(eprInfoset);
-   }
-
-   /**
-    * write this EndpointReference to the specified infoset format
-    * @throws WebServiceException
-    *   if there is an error writing the
-    *   EndpointReference to the specified <code>result</code>.
-    *
-    * @throws java.lang.IllegalArgumentException
-    *      If the null <code>result</tt> value is given.
-    */
-   public abstract void writeTo(Result result);
-
-   /**
-    * The getPort 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>.  
-    * <p>
-    * Because this port is not created from a Service object, handlers 
-    * will not automatically be configured, and the HandlerResolver 
-    * and Executor 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 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 invalid
-    *                  <LI>If an illegal
-    *                      <code>serviceEndpointInterface</code>
-    *                      is specified
-    *                  <LI>If 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 ((Provider21)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();
-   }
-}

Deleted: stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/FaultAction.java
===================================================================
--- stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/FaultAction.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/FaultAction.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,169 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-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 <a href="Action.html">
- * Action</a> annotation to allow an explicit association of <code>Action</code> message
- * addressing property with the <code>fault</code> messages of the WSDL operation mapped from
- * the exception class.
- * <p>
- * The <code>fault</code> message in the generated WSDL operation mapped for <code>className</code> 
- * class contains explicit <code>wsaw:Action</code> attribute.
- *
- * <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;javax.jws.WebService
- * public class AddNumbersImpl {
- *     &#64;javax.xml.ws.Action(
- *         input=&quot;http://example.com/inputAction&quot;,
- *         output=&quot;http://example.com/outputAction&quot;,
- *         fault = {
- *             &#64;javax.xml.ws.FaultAction(className=AddNumbersException.class, value=&quot;http://example.com/faultAction&quot;)
- *         })
- *     public int addNumbers(int number1, int number2) 
- *         throws AddNumbersException {
- *         return number1 + number2;
- *     }
- * }
- * </pre>
- * 
- * The generated WSDL looks like:
- * 
- * <pre>
- *   &lt;definitions targetNamespace=&quot;http://example.com/numbers&quot; ...&gt;
- *   ...
- *     &lt;portType name=&quot;AddNumbersPortType&quot;&gt;
- *       &lt;operation name=&quot;AddNumbers&quot;&gt;
- *         &lt;input message=&quot;tns:AddNumbersInput&quot; name=&quot;Parameters&quot;
- *           wsaw:Action=&quot;http://example.com/inputAction&quot;/&gt;
- *        &lt;output message=&quot;tns:AddNumbersOutput&quot; name=&quot;Result&quot;
- *          wsaw:Action=&quot;http://example.com/outputAction&quot;/&gt;
- *        &lt;fault message=&quot;tns:AddNumbersException&quot; name=&quot;AddNumbersException&quot;
- *          wsaw:Action=&quot;http://example.com/faultAction&quot;/&gt;
- *       &lt;/operation&gt;
- *     &lt;portType&gt;
- *   ...
- *   &lt;definitions&gt;
- * </pre>
- *
- * <p>
- * Example 2: Here is an example that shows how to specify explicit values for <code>Action</code> 
- * message addressing property if the Java method throws only one service specific exception, 
- * without specifying the values for <code>input</code> and <code>output</code> messages.
- * 
- * <pre>
- * &#64;javax.jws.WebService
- * public class AddNumbersImpl {
- *     &#64;javax.xml.ws.Action(
- *         fault = {
- *             &#64;javax.xml.ws.FaultAction(className=AddNumbersException.class, value=&quot;http://example.com/faultAction&quot;)
- *         })
- *     public int addNumbers(int number1, int number2) 
- *         throws AddNumbersException {
- *         return number1 + number2;
- *     }
- * }
- * </pre>
- * 
- * The generated WSDL looks like:
- * 
- * <pre>
- *   &lt;definitions targetNamespace=&quot;http://example.com/numbers&quot; ...&gt;
- *   ...
- *     &lt;portType name=&quot;AddNumbersPortType&quot;&gt;
- *       &lt;operation name=&quot;AddNumbers&quot;&gt;
- *         &lt;input message=&quot;tns:AddNumbersInput&quot; name=&quot;Parameters&quot;/&gt;
- *         &lt;output message=&quot;tns:AddNumbersOutput&quot; name=&quot;Result&quot;/&gt;
- *         &lt;fault message=&quot;tns:addNumbersFault&quot; name=&quot;InvalidNumbers&quot;
- *           wsa:Action=&quot;http://example.com/addnumbers/fault&quot;/&gt;
- *       &lt;/operation&gt;
- *     &lt;portType&gt;
- *   ...
- *   &lt;definitions&gt;
- * </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;javax.jws.WebService
- * public class AddNumbersImpl {
- *     &#64;javax.xml.ws.Action(
- *         fault = {
- *             &#64;javax.xml.ws.FaultAction(className=AddNumbersException.class, value=&quot;http://example.com/addFaultAction&quot;)
- *             &#64;javax.xml.ws.FaultAction(className=TooBigNumbersException.class, value=&quot;http://example.com/toobigFaultAction&quot;)
- *         })
- *     public int addNumbers(int number1, int number2) 
- *         throws AddNumbersException, TooBigNumbersException {
- *         return number1 + number2;
- *     }
- * }
- * </pre>
- * 
- * The generated WSDL looks like:
- * 
- * <pre>
- *   &lt;definitions targetNamespace=&quot;http://example.com/numbers&quot; ...&gt;
- *   ...
- *     &lt;portType name=&quot;AddNumbersPortType&quot;&gt;
- *       &lt;operation name=&quot;AddNumbers&quot;&gt;
- *         &lt;input message=&quot;tns:AddNumbersInput&quot; name=&quot;Parameters&quot;/&gt;
- *         &lt;output message=&quot;tns:AddNumbersOutput&quot; name=&quot;Result&quot;/&gt;
- *         &lt;fault message=&quot;tns:addNumbersFault&quot; name=&quot;AddNumbersException&quot;
- *           wsa:Action=&quot;http://example.com/addnumbers/fault&quot;/&gt;
- *         &lt;fault message=&quot;tns:tooBigNumbersFault&quot; name=&quot;TooBigNumbersException&quot;
- *           wsa:Action=&quot;http://example.com/toobigFaultAction&quot;/&gt;
- *       &lt;/operation&gt;
- *     &lt;portType&gt;
- *   ...
- *   &lt;definitions&gt;
- * </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 className();
-
-   /**
-    * Value of <code>Action</code> message addressing property for the exception
-    */
-   String value() default "";
-}

Deleted: stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/RespectBinding.java
===================================================================
--- stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/RespectBinding.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/RespectBinding.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,105 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-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 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 are either understood
- * and used by the runtime, or explicitly disabled by the web service
- *  application.  A web service application can disable a particular
- *  extension that has a know <code>WebServiceFeature</code> using
- *  either the {@link BindingType#features} element on the server
- *  or one of the following methods on the client:
- *    <ul>
- *      <li>{@link Service#getPort(QName,Class,WebServiceFeature...)}
- *      <li>{@link Service#getPort(Class,WebServiceFeature...)}
- *      <li>{@link Service#getPort(EndpointReference,Class,WebServiceFeature...)}
- *      <li>{@link Service#createDispatch(QName,Class,
- *           Service.Mode mode,WebServiceFeature...)}
- *      <li>{@link Service21#createDispatch(EndpointReference,
- *           Class,Service.Mode,
- *           WebServiceFeature...)}
- *      <li>{@link Service#createDispatch(QName,
- *           JAXBContext, Service.Mode, WebServiceFeature...)}
- *      <li>{@link Service#createDispatch(EndpointReference,
- *           JAXBContext, Service.Mode, WebServiceFeature...)}
- *      <li>{@link EndpointReference#getPort(Class,WebServiceFeature...)}
- *      <li>One of the <code>getXXXPort(WebServiceFeatures...)</code> methods on a
- *          generated <code>Service</code>.
- *    </ul>
- *  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: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
- *  <code>WebServiceException</code> no sooner than when one of the methods
- *  above is invoked but no later than the first invocation of an endpoint
- *  operation.
- *    <li>throw a WebServiceException and the endpoint MUST fail to start
- *  </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 javax.xml.ws.RespectBindingFeature
- *
- * @since JAX-WS 2.1
- */
- at Target(ElementType.TYPE)
- 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;
-}

Deleted: stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/RespectBindingFeature.java
===================================================================
--- stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/RespectBindingFeature.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/RespectBindingFeature.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,126 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package javax.xml.ws;
-
-import javax.xml.ws.WebServiceFeature;
-
-/**
- * This feature clarifies the use of the <code>wsdl:binding</code>
- * in a JAX-WS runtime.
- * <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 are either understood
- and used by the runtime, or explicitly disabled by the web service
- *  application.  A web service application can disable a particular
- *  extension that has a know <code>WebServiceFeature</code> using
- *  either the {@link BindingType#features} element on the server
- *  or one of the following methods on the client:
- *    <ul>
- *      <li>{@link Service#getPort(QName,Class,WebServiceFeature...)}
- *      <li>{@link Service#getPort(Class,WebServiceFeature...)}
- *      <li>{@link Service#getPort(EndpointReference,Class,WebServiceFeature...)}
- *      <li>{@link Service#createDispatch(QName,Class, 
- *           Service.Mode mode,WebServiceFeature...)}
- *      <li>{@link Service21#createDispatch(EndpointReference,
- *           Class,Service.Mode, 
- *           WebServiceFeature...)}
- *      <li>{@link Service#createDispatch(QName,
- *           JAXBContext, Service.Mode, WebServiceFeature...)}
- *      <li>{@link Service#createDispatch(EndpointReference,
- *           JAXBContext, Service.Mode, WebServiceFeature...)}
- *      <li>{@link EndpointReference#getPort(Class,WebServiceFeature...)}
- *      <li>One of the <code>getXXXPort(WebServiceFeatures...)</code> methods on a
- *          generated <code>Service</code>.
- *    </ul>
- *  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: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 
- *  <code>WebServiceException</code> no sooner than when one of the methods
- *  above is invoked but no later than the first invocation of an endpoint
- *  operation. 
- *    <li>throw a WebServiceException and the endpoint MUST fail to start
- *  </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 javax.xml.ws.soap.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.InspectBindingFeature";
-
-   /**
-    * Create an <code>RespectBindingFeature</code>.
-    * The instance created will be enabled.
-    */
-   public RespectBindingFeature()
-   {
-      this.enabled = true;
-   }
-
-   /**
-    * Create 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;
-   }
-}

Deleted: stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Service21.java
===================================================================
--- stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Service21.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/Service21.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,455 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package javax.xml.ws;
-
-import javax.xml.namespace.QName;
-import javax.xml.ws.spi.ServiceDelegate21;
-import javax.xml.bind.JAXBContext;
-import java.net.URL;
-
-/**
- * @author Heiko.Braun at jboss.com
- */
-public class Service21 extends Service
-{
-   
-   protected Service21(URL wsdlDocumentLocation, QName serviceName)
-   {
-      super(wsdlDocumentLocation, serviceName);
-   }
-
-   /**
-    * Create a <code>Service</code> instance.
-    *
-    * The specified WSDL document location and service qualified name MUST
-    * uniquely identify a <code>wsdl:service</code> element.
-    *
-    * @param wsdlLocation URL for the WSDL document location
-    *                             for the service
-    * @param serviceName QName for the service
-    * @throws WebServiceException If any error in creation of the
-    *                    specified service.
-    **/
-   public static Service21 create(URL wsdlLocation, QName serviceName)
-   {
-      return new Service21(wsdlLocation, serviceName);
-   }
-
-   /**
-    * Create a <code>Service</code> instance.
-    *
-    * @param serviceName QName for the service
-    * @throws WebServiceException If any error in creation of the
-    *                    specified service
-    */
-   public static Service21 create(QName serviceName)
-   {
-      return create(null, serviceName);
-   }
-   
-   /**
-       * Creates a <code>Dispatch</code> instance for use with objects of
-       * the users 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 WSDL Metadata from the <code>endpointReference</code>.
-       * If this <code>Service</code> instance has a WSDL and
-       * the <code>endpointReference</code>
-       * also has a WSDL, then the WSDL from this instance will 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> will be used.
-       * <p>
-       * This method behaves the same as calling
-       * <pre>
-       * dispatch = service.createDispatch(portName, type, mode, features);
-       * </pre>
-       * where the <code>portName</code> is retrieved from the
-       * <code>wsaw:EndpointName</code> attribute of the <code>wsaw:ServiceName</code>
-       * element in the
-       * metadata of the <code>endpointReference</code>.
-       * <br>
-       * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">WS-Addressing - WSDL 1.0
-       * </a>.
-       *
-       * @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
-       * javax.xml.transform.Source and javax.xml.soap.SOAPMessage.
-       * @param mode Controls whether the created dispatch instance is message
-       * or payload oriented, i.e. whether the user will work with complete
-       * protocol messages or message payloads. E.g. when using the SOAP
-       * protocol, this parameter controls whether the user will work with
-       * SOAP messages or the contents of a SOAP body. Mode MUST be MESSAGE
-       * when type is SOAPMessage.
-       * @param features  An array of WebServiceFeatures 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>wsaw:ServiceName</code> element
-       *                    or the <code>wsaw:EndpointName</code> attribute
-       *                    is missing in the metdata of the
-       *                    <code>endpointReference</code>.
-       *                    <li>If the <code>wsaw:ServiceName</code> does not
-       *                    match the <code>serviceName</code> of this instance.
-       *                    <li>If the <code>wsaw:EndpointName</code> does not
-       *                    match a valid wsdl:Port in the WSDL 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 ((ServiceDelegate21)delegate).createDispatch(endpointReference, type, 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 WSDL Metadata from the <code>endpointReference</code>.
-    * If this <code>Service</code> instance has a WSDL and
-    * the <code>endpointReference</code>
-    * also has a WSDL, then the WSDL from this instance will 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> will be used.
-    * <p>
-    * This method behavies the same as calling
-    * <pre>
-    * dispatch = service.createDispatch(portName, context, mode, features);
-    * </pre>
-    * where the <code>portName</code> is retrieved from the
-    * <code>wsaw:EndpointName</code> attribute of the <code>wsaw:ServiceName</code>
-    * element in the
-    * metadata of the <code>endpointReference</code>.
-    * <br>
-    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">WS-Addressing - WSDL 1.0
-    * </a>.
-    *
-    * @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 WebServiceFeatures to configure on the
-    *                proxy.  Supported features not in the <code>features
-    *                </code> parameter will have their default values.
-    *
-    * @return Dispatch instance
-    * @throws WebServiceException
-    * @throws WebServiceException
-    *                  <UL>
-    *                    <li>If there is any missing WSDL metadata
-    *                      as required by this method.
-    *                    <li>If the <code>wsaw:ServiceName</code> element
-    *                    or the <code>wsaw:EndpointName</code> attribute
-    *                    is missing in the metdata of the
-    *                    <code>endpointReference</code>.
-    *                    <li>If the <code>wsaw:ServiceName</code> does not
-    *                    match the <code>serviceName</code> of this instance.
-    *                    <li>If the <code>wsaw:EndpointName</code> does not
-    *                    match a valid wsdl:Port in the WSDL 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 ((ServiceDelegate21)delegate).createDispatch(endpointReference, context, mode, features);
-   }
-
-   /**
-    * Creates a <code>Dispatch</code> instance for use with objects of
-    * the users choosing.
-    *
-    * @param portName  Qualified name for the target service endpoint
-    * @param type The class of object used for messages or message
-    * payloads. Implementations are required to support
-    * javax.xml.transform.Source and javax.xml.soap.SOAPMessage.
-    * @param mode Controls whether the created dispatch instance is message
-    * or payload oriented, i.e. whether the user will work with complete
-    * protocol messages or message payloads. E.g. when using the SOAP
-    * protocol, this parameter controls whether the user will work with
-    * SOAP messages or the contents of a SOAP body. Mode MUST be MESSAGE
-    * when type is SOAPMessage.
-    * @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 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 ((ServiceDelegate21)delegate).createDispatch(portName, 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 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 WebServiceFeatures 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 ((ServiceDelegate21)delegate).createDispatch(portName, context, mode, features);
-   }
-
-
-   /**
-    * The getPort 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 ((ServiceDelegate21)delegate).getPort(serviceEndpointInterface, features);
-   }
-
-   /**
-    * The getPort 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 WSDL Metadata from the <code>endpointReference</code>.
-    * If this <code>Service</code> instance has a WSDL and
-    * the <code>endpointReference</code>
-    * also has a WSDL, then the WSDL from this instance will 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> will 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>
-    * port = service.getPort(portName, serviceEndpointInterface);
-    * </pre>
-    * where the <code>portName</code> is retrieved from the
-    * <code>wsaw:EndpontName</code> attribute of the
-    * <code>wsaw:ServiceName</code> element in the
-    * metadata of the <code>endpointReference</code> or from the
-    * <code>serviceEndpointInterface</code> and the WSDL
-    * associated with this <code>Service</code> instance.
-    * <br>
-    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">WS-Addressing - WSDL 1.0
-    * </a>.
-    *
-    * @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  An array 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 the <code>wsaw:EndpointName</code> is
-    *                      missing from the <code>endpointReference</code>
-    *                      or does not match a wsdl:Port
-    *                      in the WSDL metadata.
-    *                  <LI>If the <code>wsaw:ServiceName</code> in the
-    *                      <code>endpointReference</code> metadata does not
-    *                      match the <code>serviceName</code> of this
-    *                      <code>Service</code> instance.
-    *                  <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 ((ServiceDelegate21)delegate).getPort(endpointReference, serviceEndpointInterface, features);
-   }
-
-   /**
-    * The getPort 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 ((ServiceDelegate21)delegate).getPort(portName, serviceEndpointInterface, features);
-   }
-}

Deleted: stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/WebServiceContext21.java
===================================================================
--- stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/WebServiceContext21.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/WebServiceContext21.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,103 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package javax.xml.ws;
-
-import org.w3c.dom.Element;
-
-/**
- * @author Heiko.Braun at jboss.com
- */
-public interface WebServiceContext21 extends WebServiceContext
-{
-   /**
-    * Returns the <code>WEndpointReference</code> for this
-    * endpoint.
-    * <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.
-    * If the returned <code>EndpointReference</code> is a
-    * <code>W3CEndpointReference</code> it MUST contain
-    * the <code>wsaw:ServiceName</code> element and the
-    * <code>wsaw:EndpointName</code> attribute on the
-    * <code>wsaw:ServiceName</code>. It SHOULD contain
-    * the embedded WSDL in the <code>wsa:Metadata</code> element
-    * if there is an associated WSDL. The
-    * <code>wsaw:InterfaceName</code> MAY also be present.
-    * <br>
-    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">
-    * WS-Addressing - WSDL 1.0</a>.
-    *
-    * @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 javax.xml.ws.wsaddressing.W3CEndpointReference
-    *
-    * @since JAX-WS 2.1
-    */
-   public EndpointReference getEndpointReference(Element... referenceParameters);
-
-   /**
-    * Returns the <code>EndpointReference</code> associated with
-    * this endpoint.
-    * <p>
-    * If the returned <code>EndpointReference</code> is a
-    * <code>W3CEndpointReference</code> it MUST contain
-    * the <code>wsaw:ServiceName</code> element and the
-    * <code>wsaw:EndpointName</code> attribute on the
-    * <code>wsaw:ServiceName</code>. It SHOULD contain
-    * the embedded WSDL in the <code>wsa:Metadata</code> element
-    * if there is an associated WSDL. The
-    * <code>wsaw:InterfaceName</code> MAY also be present.
-    * <br>
-    * See <a href="http://www.w3.org/TR/2006/CR-ws-addr-wsdl-20060529/">
-    * WS-Addressing - WSDL 1.0</a>.
-    *
-    * @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 abstract <T extends EndpointReference> T getEndpointReference(Class<T> clazz, Element... referenceParameters);
-}

Deleted: stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/WebServiceFeature.java
===================================================================
--- stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/WebServiceFeature.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/jaxws-ext/src/main/java/javax/xml/ws/WebServiceFeature.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -1,77 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-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;
-   }
-}

Copied: stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/common/wsdl11/WSDLExtensElemTestCase.java (from rev 9105, stack/native/branches/jaxws21/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/common/wsdl11/WSDLExtensElemTestCase.java)
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/common/wsdl11/WSDLExtensElemTestCase.java	                        (rev 0)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/common/wsdl11/WSDLExtensElemTestCase.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,129 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.ws.common.wsdl11;
+
+import java.io.File;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.jboss.ws.Constants;
+import org.jboss.ws.metadata.wsdl.WSDLBinding;
+import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
+import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
+import org.jboss.ws.metadata.wsdl.WSDLExtensibilityElement;
+import org.jboss.ws.metadata.wsdl.WSDLService;
+import org.jboss.ws.tools.wsdl.WSDLDefinitionsFactory;
+import org.jboss.wsf.test.JBossWSTest;
+import org.w3c.dom.Element;
+
+/**
+ * Test the unmarshalling of wsdl-1.1 into the unified wsdl structure
+ * using known and unknown wsdl extensibility elements.
+ *
+ * @author alessio.soldano at jboss.com
+ * @since 15-Jan-2009
+ */
+public class WSDLExtensElemTestCase extends JBossWSTest
+{
+   public void testPolicyEndpointExtensibilityElements() throws Exception
+   {
+      File wsdlFile = getResourceFile("common/wsdl11/PolicyAttachment.wsdl");
+      assertTrue(wsdlFile.exists());
+      
+      WSDLDefinitionsFactory factory = WSDLDefinitionsFactory.newInstance();
+      WSDLDefinitions wsdlDefinitions = factory.parse(wsdlFile.toURL());
+      WSDLService wsdlService = wsdlDefinitions.getServices()[0];
+      WSDLEndpoint wsdlEndpoint = wsdlService.getEndpoints()[0];
+      
+      List<WSDLExtensibilityElement> extPortList = wsdlEndpoint.getExtensibilityElements(
+            Constants.WSDL_ELEMENT_POLICYREFERENCE);
+      assertNotNull(extPortList);
+      assertEquals(extPortList.size(),1);
+      assertPolicyRef(extPortList.get(0),"uselessPortPolicy");
+      List<WSDLExtensibilityElement> portNotUnderstoodList = wsdlEndpoint.getNotUnderstoodExtElements();
+      assertNotNull(portNotUnderstoodList);
+      assertEquals(0, portNotUnderstoodList.size());
+      
+      WSDLBinding wsdlBinding = wsdlDefinitions.getBinding(wsdlEndpoint.getBinding());
+      List<WSDLExtensibilityElement> extBinding = wsdlBinding.getExtensibilityElements(
+            Constants.WSDL_ELEMENT_POLICYREFERENCE);
+      assertNotNull(extBinding);
+      assertEquals(extBinding.size(),2);
+      assertPolicyRef(extBinding.get(0),"RmPolicy");
+      assertPolicyRef(extBinding.get(1),"X509EndpointPolicy");
+      List<WSDLExtensibilityElement> bindingNotUnderstoodList = wsdlBinding.getNotUnderstoodExtElements();
+      assertNotNull(bindingNotUnderstoodList);
+      assertEquals(0, bindingNotUnderstoodList.size());
+   }
+   
+   public void testPolicyAndUnkwnownEndpointExtensibilityElements() throws Exception
+   {
+      File wsdlFile = getResourceFile("common/wsdl11/PolicyAttachmentAndUnknownExtElem.wsdl");
+      assertTrue(wsdlFile.exists());
+      
+      WSDLDefinitionsFactory factory = WSDLDefinitionsFactory.newInstance();
+      WSDLDefinitions wsdlDefinitions = factory.parse(wsdlFile.toURL());
+      WSDLService wsdlService = wsdlDefinitions.getServices()[0];
+      WSDLEndpoint wsdlEndpoint = wsdlService.getEndpoints()[0];
+      
+      List<WSDLExtensibilityElement> extPortList = wsdlEndpoint.getExtensibilityElements(
+            Constants.WSDL_ELEMENT_POLICYREFERENCE);
+      assertNotNull(extPortList);
+      assertEquals(extPortList.size(),1);
+      assertPolicyRef(extPortList.get(0),"uselessPortPolicy");
+      List<WSDLExtensibilityElement> portNotUnderstoodList = wsdlEndpoint.getNotUnderstoodExtElements();
+      assertNotNull(portNotUnderstoodList);
+      assertEquals(1, portNotUnderstoodList.size());
+      assertUnknownExtElem(portNotUnderstoodList.get(0), "foo1", "http://foo.org/foo1", "bar", true);
+      
+      WSDLBinding wsdlBinding = wsdlDefinitions.getBinding(wsdlEndpoint.getBinding());
+      List<WSDLExtensibilityElement> extBinding = wsdlBinding.getExtensibilityElements(
+            Constants.WSDL_ELEMENT_POLICYREFERENCE);
+      assertNotNull(extBinding);
+      assertEquals(extBinding.size(),2);
+      assertPolicyRef(extBinding.get(0),"RmPolicy");
+      assertPolicyRef(extBinding.get(1),"X509EndpointPolicy");
+      List<WSDLExtensibilityElement> bindingNotUnderstoodList = wsdlBinding.getNotUnderstoodExtElements();
+      assertNotNull(bindingNotUnderstoodList);
+      assertEquals(2, bindingNotUnderstoodList.size());
+      assertUnknownExtElem(bindingNotUnderstoodList.get(0), "foo1", "http://foo.org/foo1", "bar", false);
+      assertUnknownExtElem(bindingNotUnderstoodList.get(1), "foo2", "http://foo.org/foo2", "bar", false);
+   }
+   
+   private static void assertPolicyRef(WSDLExtensibilityElement extEl, String policyURI)
+   {
+      Element el = extEl.getElement();
+      QName qName = new QName(el.getNamespaceURI(),el.getLocalName(),el.getPrefix());
+      assertEquals(qName,new QName("http://schemas.xmlsoap.org/ws/2004/09/policy","PolicyReference","wsp"));
+      assertEquals(el.getAttributeNode("URI").getValue(),"#"+policyURI);
+   }
+   
+   private static void assertUnknownExtElem(WSDLExtensibilityElement extEl, String prefix, String namespaceURI, String localName, boolean required)
+   {
+      Element el = extEl.getElement();
+      QName qName = new QName(el.getNamespaceURI(),el.getLocalName(),el.getPrefix());
+      assertEquals(qName, new QName(namespaceURI, localName, prefix));
+      assertEquals(required, "true".equals(el.getAttributeNS(Constants.NS_WSDL11, "required")));
+      assertEquals(required, extEl.isRequired());
+   }
+}

Modified: stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/endpoint/EndpointServlet.java
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/endpoint/EndpointServlet.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/endpoint/EndpointServlet.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -32,14 +32,20 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.xml.namespace.QName;
 import javax.xml.ws.Endpoint;
+import javax.xml.ws.EndpointReference;
 import javax.xml.ws.Service;
 import javax.xml.ws.soap.SOAPBinding;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
 
+import org.jboss.logging.Logger;
+import org.jboss.wsf.common.DOMUtils;
 import org.jboss.wsf.spi.SPIProvider;
 import org.jboss.wsf.spi.SPIProviderResolver;
 import org.jboss.wsf.spi.http.HttpContext;
 import org.jboss.wsf.spi.http.HttpServer;
 import org.jboss.wsf.spi.http.HttpServerFactory;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 /**
  * Test Endpoint deployment
@@ -50,6 +56,7 @@
 public class EndpointServlet extends HttpServlet
 {
    private Endpoint endpoint;
+   private static final String TEST_ELEMENT = "<fabrikam:CustomerKey xmlns:fabrikam='http://example.com/fabrikam'>123456789</fabrikam:CustomerKey>";
    
    @Override
    public void init(ServletConfig config) throws ServletException
@@ -90,9 +97,32 @@
       // Invoke the endpoint
       String param = req.getParameter("param");
       String retStr = port.echo(param);
+      
+      //Test epr
+      assertEndpointReference(endpoint.getEndpointReference(DOMUtils.parse(TEST_ELEMENT)), TEST_ELEMENT);
+      assertEndpointReference(endpoint.getEndpointReference(W3CEndpointReference.class, (Element[])null), null);
 
       // Return the result
       PrintWriter pw = new PrintWriter(res.getWriter());
       pw.print(retStr);
    }
+   
+
+   
+   private void assertEndpointReference(EndpointReference epr, String refPar) throws IOException
+   {
+      Logger.getLogger(this.getClass()).info("epr: "+epr);
+      assert(W3CEndpointReference.class.getName().equals(epr.getClass().getName()));
+      Element endpointReference = DOMUtils.parse(epr.toString());
+      assert("EndpointReference".equals(endpointReference.getNodeName()));
+      assert("http://www.w3.org/2005/08/addressing".equals(endpointReference.getAttribute("xmlns")));
+      NodeList addresses = endpointReference.getElementsByTagName("Address");
+      assert(addresses.getLength() == 1);
+      assert("http://127.0.0.1:8080/jaxws-endpoint".equals(addresses.item(0).getFirstChild().getNodeValue()));
+      if (refPar != null)
+      {
+         //TODO enhance this check
+         assert(epr.toString().contains(refPar));
+      }
+   }
 }

Modified: stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/epr/EndpointReferenceTestCase.java
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/epr/EndpointReferenceTestCase.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/epr/EndpointReferenceTestCase.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -24,8 +24,10 @@
 import java.net.URL;
 
 import javax.xml.namespace.QName;
+import javax.xml.transform.Source;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.ws.EndpointReference;
 import javax.xml.ws.Service;
-import javax.xml.ws.Service21;
 import javax.xml.ws.wsaddressing.W3CEndpointReference;
 import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
 
@@ -75,10 +77,35 @@
       builder.referenceParameter(DOMUtils.parse("<fabrikam:ShoppingCart xmlns:fabrikam='http://example.com/fabrikam'>ABCDEFG</fabrikam:ShoppingCart>"));
       W3CEndpointReference epr = builder.build();
 
-      Service21 service = Service21.create(wsdlURL, serviceName);
+      Service service = Service.create(wsdlURL, serviceName);
       TestEndpoint port = service.getPort(epr, TestEndpoint.class);
       ((StubExt)port).setConfigName("Standard WSAddressing Client");
       String retStr = port.echo("hello");
       assertEquals("hello|123456789|ABCDEFG", retStr);
    }
+   
+   public void testEndpointReferenceFromSource() throws Exception
+   {
+      String address = "http://" + getServerHost() + ":8080/jaxws-epr/TestEndpointImpl";
+      URL wsdlURL = new URL(address + "?wsdl");
+      QName serviceName = new QName("http://org.jboss.ws/epr", "TestEndpointService");
+
+      StringBuilder sb = new StringBuilder();
+      sb.append("<EndpointReference xmlns=\"http://www.w3.org/2005/08/addressing\">");
+      sb.append("<Address>").append(address).append("</Address>");
+      sb.append("<ServiceName>").append(serviceName).append("</ServiceName>");
+      sb.append("<ReferenceParameters>");
+      sb.append("<fabrikam:CustomerKey xmlns:fabrikam='http://example.com/fabrikam'>123456789</fabrikam:CustomerKey>");
+      sb.append("<fabrikam:ShoppingCart xmlns:fabrikam='http://example.com/fabrikam'>ABCDEFG</fabrikam:ShoppingCart>");
+      sb.append("</ReferenceParameters>");
+      sb.append("</EndpointReference>");
+      Source eprInfoset = new StreamSource(new java.io.StringReader(sb.toString()));
+      EndpointReference epr = EndpointReference.readFrom(eprInfoset);
+
+      Service service = Service.create(wsdlURL, serviceName);
+      TestEndpoint port = service.getPort(epr, TestEndpoint.class);
+      ((StubExt)port).setConfigName("Standard WSAddressing Client");
+      String retStr = port.echo("hello");
+      assertEquals("hello|123456789|ABCDEFG", retStr);
+   }
 }

Modified: stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/fastinfoset/FastInfosetTestCase.java
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/fastinfoset/FastInfosetTestCase.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/fastinfoset/FastInfosetTestCase.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -28,7 +28,7 @@
 import java.net.URLConnection;
 
 import javax.xml.namespace.QName;
-import javax.xml.ws.Service21;
+import javax.xml.ws.Service;
 
 import junit.framework.Test;
 
@@ -85,7 +85,7 @@
    {
       URL wsdlURL = new URL("http://" + getServerHost() + ":8080/jaxws-fastinfoset?wsdl");
       QName serviceName = new QName("http://org.jboss.ws/fastinfoset", "FastInfosetEndpointService");
-      Service21 service = Service21.create(wsdlURL, serviceName);
+      Service service = Service.create(wsdlURL, serviceName);
 
       FastInfosetFeature feature = new FastInfosetFeature();
       FastInfoset port = service.getPort(FastInfoset.class, feature);

Modified: stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws1172/JBWS1172TestCase.java
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws1172/JBWS1172TestCase.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws1172/JBWS1172TestCase.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -21,14 +21,12 @@
  */
 package org.jboss.test.ws.jaxws.jbws1172;
 
-import java.io.File;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.net.URL;
 
 import javax.xml.namespace.QName;
 import javax.xml.ws.Service;
-import javax.xml.ws.Service21;
 
 import junit.framework.Test;
 
@@ -96,7 +94,7 @@
       URL wsdlURL = getResourceURL("jaxws/jbws1172/WEB-INF/wsdl/TestService.wsdl");
       URL xsdURL = new SchemaExtractor().getSchemaUrl(wsdlURL);
       
-      Service21 service = Service21.create(wsdlURL, SERVICE_NAME);
+      Service service = Service.create(wsdlURL, SERVICE_NAME);
       SchemaValidationFeature feature = new SchemaValidationFeature(xsdURL.toString());
       MyTest port = service.getPort(MyTest.class, feature);
       try
@@ -117,7 +115,7 @@
       URL wsdlURL = getResourceURL("jaxws/jbws1172/WEB-INF/wsdl/TestService.wsdl");
       URL xsdURL = new SchemaExtractor().getSchemaUrl(wsdlURL);
       
-      Service21 service = Service21.create(wsdlURL, SERVICE_NAME);
+      Service service = Service.create(wsdlURL, SERVICE_NAME);
       SchemaValidationFeature feature = new SchemaValidationFeature(xsdURL.toString());
       
       TestErrorHandler errorHandler = new TestErrorHandler();

Modified: stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/json/JsonTestCase.java
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/json/JsonTestCase.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/json/JsonTestCase.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -24,7 +24,7 @@
 import java.net.URL;
 
 import javax.xml.namespace.QName;
-import javax.xml.ws.Service21;
+import javax.xml.ws.Service;
 
 import junit.framework.Test;
 
@@ -49,7 +49,7 @@
    {
       URL wsdlURL = new URL("http://" + getServerHost() + ":8080/jaxws-json?wsdl");
       QName serviceName = new QName("http://org.jboss.ws/json", "JsonEndpointService");
-      Service21 service = Service21.create(wsdlURL, serviceName);
+      Service service = Service.create(wsdlURL, serviceName);
 
       JsonEncodingFeature feature = new JsonEncodingFeature();
       JsonPort port = service.getPort(JsonPort.class, feature);

Modified: stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsaddressing/AddressingStatefulTestCase.java
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsaddressing/AddressingStatefulTestCase.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsaddressing/AddressingStatefulTestCase.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -29,6 +29,7 @@
 import javax.xml.ws.BindingProvider;
 import javax.xml.ws.Service;
 import javax.xml.ws.handler.Handler;
+import javax.xml.ws.soap.AddressingFeature;
 
 import junit.framework.Test;
 
@@ -71,11 +72,10 @@
          bindingProvider.getBinding().setHandlerChain(customHandlerChain);
 
          Service service2 = Service.create(wsdlURL, serviceName);
-         port2 = (StatefulEndpoint)service2.getPort(StatefulEndpoint.class);
+         port2 = (StatefulEndpoint)service2.getPort(StatefulEndpoint.class, new AddressingFeature(true, true));
          bindingProvider = (BindingProvider)port2;
          List<Handler> customHandlerChain2 = new ArrayList<Handler>();
          customHandlerChain2.add(new ClientHandler());
-         customHandlerChain2.add(new WSAddressingClientHandler());
          bindingProvider.getBinding().setHandlerChain(customHandlerChain2);
 
       }

Modified: stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsaddressing/StatefulEndpointImpl.java
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsaddressing/StatefulEndpointImpl.java	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsaddressing/StatefulEndpointImpl.java	2009-01-23 15:32:14 UTC (rev 9107)
@@ -34,9 +34,9 @@
 import javax.xml.namespace.QName;
 import javax.xml.ws.WebServiceContext;
 import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.soap.Addressing;
 
 import org.jboss.logging.Logger;
-import org.jboss.ws.annotation.EndpointConfig;
 
 /**
  * WS-Addressing stateful service endpoint
@@ -45,7 +45,7 @@
  * @since 24-Nov-2005
  */
 @WebService(name = "StatefulEndpoint", targetNamespace = "http://org.jboss.ws/samples/wsaddressing", serviceName = "TestService")
- at EndpointConfig(configName = "Standard WSAddressing Endpoint")
+ at Addressing
 @HandlerChain(file = "jaxws-handlers.xml")
 @SOAPBinding(style = SOAPBinding.Style.RPC)
 public class StatefulEndpointImpl implements StatefulEndpoint

Copied: stack/native/trunk/modules/testsuite/native-tests/src/test/resources/common/wsdl11/PolicyAttachmentAndUnknownExtElem.wsdl (from rev 9105, stack/native/branches/jaxws21/modules/testsuite/native-tests/src/test/resources/common/wsdl11/PolicyAttachmentAndUnknownExtElem.wsdl)
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/resources/common/wsdl11/PolicyAttachmentAndUnknownExtElem.wsdl	                        (rev 0)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/resources/common/wsdl11/PolicyAttachmentAndUnknownExtElem.wsdl	2009-01-23 15:32:14 UTC (rev 9107)
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<definitions name="TestService" targetNamespace="http://org.jboss.ws/jaxrpc"
+	     xmlns:tns="http://org.jboss.ws/jaxrpc" 
+	     xmlns="http://schemas.xmlsoap.org/wsdl/" 
+	     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+	     xmlns:ns2="http://org.jboss.ws/jaxrpc/types" 
+	     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+	     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
+	     xmlns:fab="http://www.fabrikam123.example.com/stock" 
+	     xmlns:rmp="http://schemas.xmlsoap.org/ws/2005/02/rm/policy" 
+	     xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy" 
+	     xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
+	     xmlns:foo1="http://foo.org/foo1"  
+	     xmlns:foo2="http://foo.org/foo2"  
+	     xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" >
+  <wsp:Policy wsu:Id="RmPolicy" >
+    <rmp:RMAssertion>
+      <rmp:InactivityTimeout Milliseconds="600000" />
+      <rmp:BaseRetransmissionInterval Milliseconds="3000" />
+      <rmp:ExponentialBackoff />
+      <rmp:AcknowledgementInterval Milliseconds="200" />
+    </rmp:RMAssertion>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="uselessServicePolicy" >
+    <fab:useless>nothing</fab:useless>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="uselessPortPolicy" >
+    <fab:useless>nothing again</fab:useless>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="X509EndpointPolicy" >
+    <sp:AsymmetricBinding>
+      <wsp:Policy>
+        <!-- Details omitted for readability -->
+        <sp:IncludeTimestamp />
+        <sp:OnlySignEntireHeadersAndBody />
+      </wsp:Policy>
+    </sp:AsymmetricBinding>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SecureMessagePolicy" >
+    <sp:SignedParts>
+      <sp:Body />
+    </sp:SignedParts>
+    <sp:EncryptedParts>
+      <sp:Body />
+    </sp:EncryptedParts>
+  </wsp:Policy>
+  <types>
+    <schema targetNamespace="http://org.jboss.ws/jaxrpc/types" xmlns:tns="http://org.jboss.ws/jaxrpc/types" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://www.w3.org/2001/XMLSchema">
+      <complexType name="echoSimpleUserType">
+        <sequence>
+          <element name="String_1" type="string" nillable="true"/>
+          <element name="SimpleUserType_2" type="tns:SimpleUserType" nillable="true"/>
+        </sequence>
+      </complexType>
+      <complexType name="SimpleUserType">
+        <sequence>
+          <element name="a" type="int"/>
+          <element name="b" type="int"/>
+        </sequence>
+      </complexType>
+      <complexType name="echoSimpleUserTypeResponse">
+        <sequence>
+          <element name="result" type="tns:SimpleUserType" nillable="true"/>
+        </sequence>
+      </complexType>
+      <complexType name="echoString">
+        <sequence>
+          <element name="String_1" type="string" nillable="true"/>
+          <element name="String_2" type="string" nillable="true"/>
+        </sequence>
+      </complexType>
+      <complexType name="echoStringResponse">
+        <sequence>
+          <element name="result" type="string" nillable="true"/>
+        </sequence>
+      </complexType>
+      <element name="echoSimpleUserType" type="tns:echoSimpleUserType"/>
+      <element name="echoSimpleUserTypeResponse" type="tns:echoSimpleUserTypeResponse"/>
+      <element name="echoString" type="tns:echoString"/>
+      <element name="echoStringResponse" type="tns:echoStringResponse"/>
+    </schema>
+  </types>
+  <message name="JaxRpcTestService_echoSimpleUserType">
+    <part name="parameters" element="ns2:echoSimpleUserType"/>
+  </message>
+  <message name="JaxRpcTestService_echoSimpleUserTypeResponse">
+    <part name="result" element="ns2:echoSimpleUserTypeResponse"/>
+  </message>
+  <message name="JaxRpcTestService_echoString">
+    <part name="parameters" element="ns2:echoString"/>
+  </message>
+  <message name="JaxRpcTestService_echoStringResponse">
+    <part name="result" element="ns2:echoStringResponse"/>
+  </message>
+  <portType name="JaxRpcTestService" wsp:PolicyURIs="#RmPolicy">
+    <operation name="echoSimpleUserType">
+      <input message="tns:JaxRpcTestService_echoSimpleUserType"/>
+      <output message="tns:JaxRpcTestService_echoSimpleUserTypeResponse"/>
+    </operation>
+    <operation name="echoString">
+      <input message="tns:JaxRpcTestService_echoString"/>
+      <output message="tns:JaxRpcTestService_echoStringResponse"/>
+    </operation>
+  </portType>
+  <binding name="JaxRpcTestServiceBinding" type="tns:JaxRpcTestService">
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+    <wsp:PolicyReference URI="#RmPolicy" wsdl:required="true" />
+    <wsp:PolicyReference URI="#X509EndpointPolicy" wsdl:required="true" />
+	<foo1:bar wsdl:required="false"/>
+    <foo2:bar/>
+    <operation name="echoSimpleUserType">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    <operation name="echoString">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+  </binding>
+  <service name="TestService">
+    <wsp:PolicyReference URI="#uselessServicePolicy" wsdl:required="true" />
+    <port name="JaxRpcTestServicePort" binding="tns:JaxRpcTestServiceBinding">
+      <wsp:PolicyReference URI="#uselessPortPolicy" wsdl:required="true" />
+      <foo1:bar wsdl:required="true"/>
+      <soap:address location="REPLACE_WITH_ACTUAL_URL"/>
+    </port>
+  </service>
+</definitions>

Modified: stack/native/trunk/src/main/scripts/assembly-bin-dist.xml
===================================================================
--- stack/native/trunk/src/main/scripts/assembly-bin-dist.xml	2009-01-23 15:18:55 UTC (rev 9106)
+++ stack/native/trunk/src/main/scripts/assembly-bin-dist.xml	2009-01-23 15:32:14 UTC (rev 9107)
@@ -99,10 +99,12 @@
                 <include>ant-import/**</include>
                 <include>java/org/jboss/test/ws/console/**</include>
                 <include>java/org/jboss/test/ws/jaxws/samples/**</include>
+                <include>java/org/jboss/test/ws/jaxws/smoke/**</include>
                 <include>java/org/jboss/test/ws/management/**</include>
                 <include>java/org/jboss/test/ws/projectGenerator/**</include>
                 <include>resources/console/**</include>
                 <include>resources/jaxws/samples/**</include>
+                <include>resources/jaxws/smoke/**</include>
                 <include>resources/management/**</include>
                 <include>resources/projectGenerator/**</include>
               </includes>




More information about the jbossws-commits mailing list