You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by wo...@apache.org on 2009/09/09 17:48:15 UTC

svn commit: r813007 - /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java

Author: woodroy
Date: Wed Sep  9 15:48:15 2009
New Revision: 813007

URL: http://svn.apache.org/viewvc?rev=813007&view=rev
Log:
If we are unable to find the SOAPHeader within the WSDL definition, then look deeper in the imports to find the requested Message.

Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java?rev=813007&r1=813006&r2=813007&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java Wed Sep  9 15:48:15 2009
@@ -2418,6 +2418,11 @@
                             .getMessage());
 
                     if (msg == null) {
+                        msg = getMessage(wsdl4jDefinition, soapHeader
+                            .getMessage(), new HashSet());
+                    }
+                    
+                    if (msg == null) {
                         // TODO i18n this
                         throw new AxisFault("message "
                                             + soapHeader.getMessage()
@@ -2464,6 +2469,12 @@
                     // find the relevant schema part from the messages
                     Message msg = wsdl4jDefinition.getMessage(soapHeader
                             .getMessage());
+                    
+                    if (msg == null) {
+                        msg = getMessage(wsdl4jDefinition, soapHeader
+                            .getMessage(), new HashSet());
+                    }
+
                     if (msg == null) {
                         // todo i18n this
                         throw new AxisFault("message "
@@ -2574,6 +2585,40 @@
             }
         }
     }
+    
+    /**
+     * Look deeper in the imports to find the requested Message. Use a HashSet to make 
+     * sure we don't traverse the same Definition object twice (avoid recursion).
+     * 
+     * @param definition
+     * @param message
+     * @param instances
+     * @return
+     */
+    private Message getMessage(Definition definition, QName message, Set instances) {
+        Message msg = definition.getMessage(message);
+        if (msg != null) {
+            return msg;
+        }
+        Iterator iter = definition.getImports().values().iterator();
+        while (iter.hasNext()) {
+            Vector values = (Vector) iter.next();
+            for (Iterator valuesIter = values.iterator(); valuesIter.hasNext();) {
+                Import wsdlImport = (Import) valuesIter.next();
+                Definition innerDefinition = wsdlImport.getDefinition();
+                msg = innerDefinition.getMessage(message);
+                if (msg != null) {
+                    return msg;
+                } else {
+                    if(!instances.contains(definition)){
+                        instances.add(definition);
+                        return getMessage(definition, message, instances);
+                    }
+                }
+            }
+        }
+        return null;
+    }
 
     private int getPolicyAttachmentPoint(AxisDescription description,
                                          String originOfExtensibilityElements) {