You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2011/01/04 20:42:29 UTC

svn commit: r1055163 - in /cxf/branches/2.3.x-fixes: ./ tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/ tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/ tools/wsdlto/test/src/test/resour...

Author: dkulp
Date: Tue Jan  4 19:42:28 2011
New Revision: 1055163

URL: http://svn.apache.org/viewvc?rev=1055163&view=rev
Log:
Merged revisions 1055154 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1055154 | dkulp | 2011-01-04 14:33:43 -0500 (Tue, 04 Jan 2011) | 2 lines
  
  [CXF-3231] Check the wsa-action if the soap:body would not allow
  distinguishing the operation.
........

Added:
    cxf/branches/2.3.x-fixes/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/hello_world_overload.wsdl
      - copied unchanged from r1055154, cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/hello_world_overload.wsdl
Modified:
    cxf/branches/2.3.x-fixes/   (props changed)
    cxf/branches/2.3.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/UniqueBodyValidator.java
    cxf/branches/2.3.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.3.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/UniqueBodyValidator.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/UniqueBodyValidator.java?rev=1055163&r1=1055162&r2=1055163&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/UniqueBodyValidator.java (original)
+++ cxf/branches/2.3.x-fixes/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/UniqueBodyValidator.java Tue Jan  4 19:42:28 2011
@@ -21,7 +21,9 @@ package org.apache.cxf.tools.wsdlto.fron
 
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 import java.util.logging.Logger;
 import javax.xml.namespace.QName;
 
@@ -31,6 +33,7 @@ import org.apache.cxf.service.model.Bind
 import org.apache.cxf.service.model.BindingInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.service.model.MessageInfo;
 import org.apache.cxf.service.model.MessagePartInfo;
 import org.apache.cxf.service.model.OperationInfo;
 import org.apache.cxf.service.model.ServiceInfo;
@@ -66,6 +69,7 @@ public class UniqueBodyValidator extends
     private boolean isValidEndpoint(EndpointInfo endpoint) {
         BindingInfo binding = endpoint.getBinding();
         Map<QName, QName> uniqueNames = new HashMap<QName, QName>();
+        Map<QName, Set<String>> actions = new HashMap<QName, Set<String>>();
 
         Collection<BindingOperationInfo> bos = binding.getOperations();
         for (BindingOperationInfo bo : bos) {
@@ -77,7 +81,12 @@ public class UniqueBodyValidator extends
                     continue;
                 }
                 QName mName = part.getElementQName();
+                String action = getWSAAction(op.getInput());
                 QName opName = uniqueNames.get(mName);
+                Set<String> opActions = actions.get(mName);
+                if (opName != null && opActions != null && !opActions.contains(action)) {
+                    opName = null;
+                }
                 if (opName != null) {
                     Message msg = new Message("NON_UNIQUE_BODY", LOG, 
                                               endpoint.getName(), op.getName(), opName, mName);
@@ -85,6 +94,13 @@ public class UniqueBodyValidator extends
                     return false;
                 } else {
                     uniqueNames.put(mName, op.getName());
+                    if (action != null) {
+                        if (opActions == null) {
+                            opActions = new HashSet<String>();
+                            actions.put(mName, opActions);
+                        }
+                        opActions.add(action);
+                    }
                 }
             }
             
@@ -100,4 +116,15 @@ public class UniqueBodyValidator extends
         }
         return true;
     }
+
+    private String getWSAAction(MessageInfo input) {
+        if (input.getExtensionAttributes() != null) {
+            for (Map.Entry<QName, Object> ent : input.getExtensionAttributes().entrySet()) {
+                if ("Action".equals(ent.getKey().getLocalPart())) {
+                    return ent.getValue().toString();
+                }
+            }
+        }
+        return null;
+    }
 }

Modified: cxf/branches/2.3.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java?rev=1055163&r1=1055162&r2=1055163&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java (original)
+++ cxf/branches/2.3.x-fixes/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java Tue Jan  4 19:42:28 2011
@@ -1153,4 +1153,14 @@ public class CodeGenBugTest extends Abst
         assertTrue(contents.contains("<Loginresponse> loginResponse"));
     }
 
+    @Test
+    public void testOverloadWithAction() throws Exception {
+        String[] args = new String[] {"-d", output.getCanonicalPath(),
+            getLocation("/wsdl2java_wsdl/hello_world_overload.wsdl")};
+        WSDLToJava.main(args);
+        
+        assertNotNull(output);
+        File f = new File(output, "org/apache/cxf/w2j/hello_world_soap_http/SayHi.java");
+        assertTrue(f.exists());
+    }
 }