Author: barrettj
Date: Thu Apr 22 21:24:25 2010
New Revision: 937071

URL: http://svn.apache.org/viewvc?rev=937071&view=rev
Log:
Add support for JAXWS 2.2 Addressing.responses annotation attribute.  Add 
associated TDD tests.  Modify pom.xml to pickup annotations from JAXWS 2.2 jar 
instead of the JAXWS 2.1 classes in the JDK.

Modified:
    axis/axis2/java/core/trunk/modules/jaxws-integration/pom.xml
    axis/axis2/java/core/trunk/modules/metadata/pom.xml
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/server/config/AddressingConfigurator.java
    
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/feature/AddressingFeatureTests.java

Modified: axis/axis2/java/core/trunk/modules/jaxws-integration/pom.xml
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws-integration/pom.xml?rev=937071&r1=937070&r2=937071&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws-integration/pom.xml (original)
+++ axis/axis2/java/core/trunk/modules/jaxws-integration/pom.xml Thu Apr 22 
21:24:25 2010
@@ -34,6 +34,10 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-jaxws_2.2_spec</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
             <artifactId>geronimo-annotation_1.0_spec</artifactId>
         </dependency>
         <dependency>
@@ -114,6 +118,28 @@
         </testResources>
         <plugins>
             <plugin>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <artifactItems>
+                                <artifactItem>
+                                    
<groupId>org.apache.geronimo.specs</groupId>
+                                    
<artifactId>geronimo-jaxws_2.2_spec</artifactId>
+                                    <type>jar</type>
+                                    <overWrite>true</overWrite>
+                                    
<outputDirectory>target/endorsed</outputDirectory>
+                                 </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <inherited>true</inherited>
                 <configuration>
@@ -1360,7 +1386,7 @@
                 <inherited>true</inherited>
                 <configuration>
                     <forkMode>pertest</forkMode>
-                    <argLine>-Xms256m -Xmx512m</argLine>
+                    <argLine>-Xms256m -Xmx512m 
-Xbootclasspath/p:${basedir}/target/endorsed/geronimo-jaxws_2.2_spec-1.0-SNAPSHOT.jar</argLine>
                     <!-- Enable the next 2 lines if you want to attach a 
debugger
                     <argLine>-Xdebug -Xnoagent -Djava.compiler=NONE 
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006</argLine>-->
                     <includes>

Modified: axis/axis2/java/core/trunk/modules/metadata/pom.xml
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/pom.xml?rev=937071&r1=937070&r2=937071&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/metadata/pom.xml (original)
+++ axis/axis2/java/core/trunk/modules/metadata/pom.xml Thu Apr 22 21:24:25 2010
@@ -143,15 +143,15 @@
                             <goal>copy</goal>
                         </goals>
                         <configuration>
-                         <artifactItems>
-                           <artifactItem>
-                             <groupId>org.apache.geronimo.specs</groupId>
-                             <artifactId>geronimo-jaxws_2.2_spec</artifactId>
-                             <type>jar</type>
-                             <overWrite>true</overWrite>
-                             <outputDirectory>target/endorsed</outputDirectory>
-                           </artifactItem>
-                         </artifactItems>
+                            <artifactItems>
+                                <artifactItem>
+                                    
<groupId>org.apache.geronimo.specs</groupId>
+                                    
<artifactId>geronimo-jaxws_2.2_spec</artifactId>
+                                    <type>jar</type>
+                                    <overWrite>true</overWrite>
+                                    
<outputDirectory>target/endorsed</outputDirectory>
+                                 </artifactItem>
+                            </artifactItems>
                         </configuration>
                     </execution>
                 </executions>
@@ -257,6 +257,9 @@
                 <artifactId>maven-surefire-plugin</artifactId>
                 <inherited>true</inherited>
                 <configuration>
+                    <argLine>
+                        
-Xbootclasspath/p:${basedir}/target/endorsed/geronimo-jaxws_2.2_spec-1.0-SNAPSHOT.jar
   
+                    </argLine>
                     <includes>
                         <include>**/*Tests.java</include>
                     </includes>

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/server/config/AddressingConfigurator.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/server/config/AddressingConfigurator.java?rev=937071&r1=937070&r2=937071&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/server/config/AddressingConfigurator.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/server/config/AddressingConfigurator.java
 Thu Apr 22 21:24:25 2010
@@ -38,6 +38,7 @@ import org.apache.axis2.util.Utils;
 
 import javax.xml.ws.soap.Addressing;
 import javax.xml.ws.soap.AddressingFeature;
+import javax.xml.ws.soap.AddressingFeature.Responses;
 
 /**
  * This class will enable/disable WS-Addressing for a JAX-WS 2.1 web service
@@ -62,6 +63,7 @@ public class AddressingConfigurator impl
        Parameter namespace = new 
Parameter(AddressingConstants.WS_ADDRESSING_VERSION, null);
        Parameter disabled = new 
Parameter(AddressingConstants.DISABLE_ADDRESSING_FOR_IN_MESSAGES, "false");
        Parameter required = new 
Parameter(AddressingConstants.ADDRESSING_REQUIREMENT_PARAMETER, 
AddressingConstants.ADDRESSING_UNSPECIFIED);
+       Parameter responses = null;
        
        if (addressing != null && submissionAddressing != null) {
             //Both annotations must have been specified.
@@ -127,11 +129,21 @@ public class AddressingConfigurator impl
                  Messages.getMessage("NoWSAddressingFeatures"));
        }
        
+       // If the Addressing annotation was used, then get the responses value 
from it and map it to the 
+       // value the addressing handler expects
+       if (addressing != null) {
+           responses = new 
Parameter(AddressingConstants.WSAM_INVOCATION_PATTERN_PARAMETER_NAME, 
+                   mapResponseAttributeToAddressing(addressing.responses()));
+       }
+       
        try {
             AxisService service = endpointDescription.getAxisService();
                service.addParameter(namespace);
                service.addParameter(disabled);
                service.addParameter(required);
+               if (responses != null) {
+                service.addParameter(responses);
+               }
             
             String value = Utils.getParameterValue(disabled);
                if (JavaUtils.isFalseExplicitly(value)) {
@@ -147,6 +159,29 @@ public class AddressingConfigurator impl
        }
     }
 
+    /**
+     * Given a value for the Addressing.responses annotation attribute, map it 
to the corresponding
+     * Addressing constant to be set on the AxisSservice
+     * 
+     * @param responses Enum value from the Addressing.responses annotation 
attribute
+     * @return String from AddressingContstants corresponding to the responses 
value.
+     */
+    static private String mapResponseAttributeToAddressing(Responses 
responses) {
+        String addressingType = null;
+        switch (responses) {
+            case ALL:
+                addressingType = 
AddressingConstants.WSAM_INVOCATION_PATTERN_BOTH;
+                break;
+            case ANONYMOUS:
+                addressingType = 
AddressingConstants.WSAM_INVOCATION_PATTERN_SYNCHRONOUS;
+                break;
+            case NON_ANONYMOUS:
+                addressingType = 
AddressingConstants.WSAM_INVOCATION_PATTERN_ASYNCHRONOUS;
+                break;
+        }
+        return addressingType;
+    }
+
     /*
      *  (non-Javadoc)
      * @see 
org.apache.axis2.jaxws.feature.ServerConfigurator#supports(java.lang.String)

Modified: 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/feature/AddressingFeatureTests.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/feature/AddressingFeatureTests.java?rev=937071&r1=937070&r2=937071&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/feature/AddressingFeatureTests.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/feature/AddressingFeatureTests.java
 Thu Apr 22 21:24:25 2010
@@ -21,6 +21,7 @@ package org.apache.axis2.jaxws.descripti
 
 import junit.framework.TestCase;
 import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.jaxws.addressing.SubmissionAddressing;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.jaxws.description.DescriptionFactory;
@@ -31,6 +32,7 @@ import org.apache.axis2.util.Utils;
 import javax.jws.WebService;
 import javax.xml.namespace.QName;
 import javax.xml.ws.soap.Addressing;
+import javax.xml.ws.soap.AddressingFeature.Responses;
 
 public class AddressingFeatureTests extends TestCase {
     
@@ -40,6 +42,10 @@ public class AddressingFeatureTests exte
     private static final String plainServicePortName = "PlainServicePort";
     private static final String disabledServicePortName = 
"DisabledServicePort";
     private static final String requiredServicePortName = 
"RequiredServicePort";
+    private static final String responsesALLServicePortName = 
"ResponsesALLServicePort";
+    private static final String responsesANONServicePortName = 
"ResponsesANONServicePort";
+    private static final String responsesNONANONServicePortName = 
"ResponsesNONANONServicePort";
+    private static final String responsesNoAddressingServicePortName = 
"ResponsesNoAddressingServicePort";
     
     public void testNoAnnotation() {
         ServiceDescription sd  = 
DescriptionFactory.createServiceDescription(DefaultService.class);
@@ -113,6 +119,84 @@ public class AddressingFeatureTests exte
         assertEquals(AddressingConstants.ADDRESSING_REQUIRED, required);
     }
     
+    /**
+     * Validate that annotation value Addressing.responses=ALL is set 
correctly on the AxisService
+     */
+    public void testResponsesALL() {
+        ServiceDescription sd  = 
DescriptionFactory.createServiceDescription(ResponsesALLService.class);
+        EndpointDescription ed = sd.getEndpointDescription(new QName(ns, 
responsesALLServicePortName));
+        assertNotNull(ed);
+
+        AxisService axisService = ed.getAxisService();
+        Parameter responsesParam = 
axisService.getParameter(AddressingConstants.WSAM_INVOCATION_PATTERN_PARAMETER_NAME);
+        assertNotNull("Responses parameter not set", responsesParam);
+        
+        String responsesType = Utils.getParameterValue(responsesParam);
+        assertEquals("Wrong type of responses returned", 
AddressingConstants.WSAM_INVOCATION_PATTERN_BOTH, responsesType);
+    }
+
+    /**
+     * Validate that annotation value Addressing.responses=ANONYMOUS is set 
correctly on the AxisService
+     */
+    public void testResponsesANON() {
+        ServiceDescription sd  = 
DescriptionFactory.createServiceDescription(ResponsesANONService.class);
+        EndpointDescription ed = sd.getEndpointDescription(new QName(ns, 
responsesANONServicePortName));
+        assertNotNull(ed);
+
+        AxisService axisService = ed.getAxisService();
+        Parameter responsesParam = 
axisService.getParameter(AddressingConstants.WSAM_INVOCATION_PATTERN_PARAMETER_NAME);
+        assertNotNull("Responses parameter not set", responsesParam);
+        
+        String responsesType = Utils.getParameterValue(responsesParam);
+        assertEquals("Wrong type of responses returned", 
AddressingConstants.WSAM_INVOCATION_PATTERN_SYNCHRONOUS, responsesType);
+    }
+
+    /**
+     * Validate that annotation value Addressing.responses=NON_ANONYMOUS is 
set correctly on the AxisService
+     */
+    public void testResponsesNONANON() {
+        ServiceDescription sd  = 
DescriptionFactory.createServiceDescription(ResponsesNONANONService.class);
+        EndpointDescription ed = sd.getEndpointDescription(new QName(ns, 
responsesNONANONServicePortName));
+        assertNotNull(ed);
+
+        AxisService axisService = ed.getAxisService();
+        Parameter responsesParam = 
axisService.getParameter(AddressingConstants.WSAM_INVOCATION_PATTERN_PARAMETER_NAME);
+        assertNotNull("Responses parameter not set", responsesParam);
+        
+        String responsesType = Utils.getParameterValue(responsesParam);
+        assertEquals("Wrong type of responses returned", 
AddressingConstants.WSAM_INVOCATION_PATTERN_ASYNCHRONOUS, responsesType);
+    }
+    
+    /**
+     * Validate that no annotation for Addressing does not set the associated 
addressing parameter on the AxisService
+     */
+    public void testResponsesNoAddressing() {
+        ServiceDescription sd  = 
DescriptionFactory.createServiceDescription(ResponsesNoAddressingService.class);
+        EndpointDescription ed = sd.getEndpointDescription(new QName(ns, 
responsesNoAddressingServicePortName));
+        assertNotNull(ed);
+
+        AxisService axisService = ed.getAxisService();
+        Parameter responsesParam = 
axisService.getParameter(AddressingConstants.WSAM_INVOCATION_PATTERN_PARAMETER_NAME);
+        assertNull("Responses parameter was set", responsesParam);
+        
+    }
+    
+    /**
+     * Validate that annotation Addressing with no responses attribute 
explicitly set gets the correct default on the AxisService
+     */
+    public void testResponsesDefault() {
+        ServiceDescription sd  = 
DescriptionFactory.createServiceDescription(PlainService.class);
+        EndpointDescription ed = sd.getEndpointDescription(new QName(ns, 
plainServicePortName));
+        assertNotNull(ed);
+        
+        AxisService axisService = ed.getAxisService();
+        Parameter responsesParam = 
axisService.getParameter(AddressingConstants.WSAM_INVOCATION_PATTERN_PARAMETER_NAME);
+        assertNotNull("Responses parameter not set", responsesParam);
+        
+        String responsesType = Utils.getParameterValue(responsesParam);
+        assertEquals("Wrong type of responses returned", 
AddressingConstants.WSAM_INVOCATION_PATTERN_BOTH, responsesType);
+    }
+    
     @WebService(targetNamespace=ns, portName=defaultServicePortName)
     class DefaultService {
         public double getQuote(String symbol) {
@@ -143,4 +227,36 @@ public class AddressingFeatureTests exte
             return 101.01;
         }
     }
+
+    @WebService(targetNamespace=ns, portName=responsesALLServicePortName)
+    @Addressing(required=true, responses=Responses.ALL)
+    class ResponsesALLService {
+        public double getQuote(String symbol) {
+            return 101.01;
+        }
+    }
+    
+    @WebService(targetNamespace=ns, portName=responsesANONServicePortName)
+    @Addressing(required=true, responses=Responses.ANONYMOUS)
+    class ResponsesANONService {
+        public double getQuote(String symbol) {
+            return 101.01;
+        }
+    }
+
+    @WebService(targetNamespace=ns, portName=responsesNONANONServicePortName)
+    @Addressing(required=true, responses=Responses.NON_ANONYMOUS)
+    class ResponsesNONANONService {
+        public double getQuote(String symbol) {
+            return 101.01;
+        }
+    }
+
+    @WebService(targetNamespace=ns, 
portName=responsesNoAddressingServicePortName)
+    @SubmissionAddressing(required=true)
+    class ResponsesNoAddressingService {
+        public double getQuote(String symbol) {
+            return 101.01;
+        }
+    }
 }


Reply via email to