Author: dkulp
Date: Fri Apr  2 11:28:30 2010
New Revision: 930246

URL: http://svn.apache.org/viewvc?rev=930246&view=rev
Log:
[CXF-2744] Support re-write of schema redefine elements

Modified:
    
cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryHandler.java

Modified: 
cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryHandler.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryHandler.java?rev=930246&r1=930245&r2=930246&view=diff
==============================================================================
--- 
cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryHandler.java
 (original)
+++ 
cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryHandler.java
 Fri Apr  2 11:28:30 2010
@@ -256,7 +256,15 @@ public class WSDLQueryHandler implements
                 el.setAttribute("schemaLocation", base + "?xsd=" + sl);
             }
         }
-        
+        elementList = 
DOMUtils.findAllElementsByTagNameNS(doc.getDocumentElement(),
+                                                          
"http://www.w3.org/2001/XMLSchema";,
+                                                          "redefine");
+        for (Element el : elementList) {
+            String sl = el.getAttribute("schemaLocation");
+            if (smp.containsKey(sl)) {
+                el.setAttribute("schemaLocation", base + "?xsd=" + sl);
+            }
+        }
         elementList = 
DOMUtils.findAllElementsByTagNameNS(doc.getDocumentElement(),
                                                           
"http://schemas.xmlsoap.org/wsdl/";,
                                                           "import");
@@ -450,6 +458,31 @@ public class WSDLQueryHandler implements
                 }
             }
         }
+        List<SchemaReference> redefines = 
CastUtils.cast(schema.getRedefines());
+        for (SchemaReference included : redefines) {
+            String start = included.getSchemaLocationURI();
+
+            if (start != null) {
+                String resolvedSchemaLocation = resolveWithCatalogs(catalogs, 
start, base);
+                if (resolvedSchemaLocation == null) {
+                    if (!doneSchemas.containsKey(start)) {
+                        try {
+                            //check to see if it's aleady in a URL format.  If 
so, leave it.
+                            new URL(start);
+                        } catch (MalformedURLException e) {
+                            if (doneSchemas.put(start, included) == null) {
+                                
updateSchemaImports(included.getReferencedSchema(), doneSchemas, base);
+                            }
+                        }
+                    }
+                } else if (!doneSchemas.containsKey(start) 
+                    || !doneSchemas.containsKey(resolvedSchemaLocation)) {
+                    doneSchemas.put(start, included);
+                    doneSchemas.put(resolvedSchemaLocation, included);
+                    updateSchemaImports(included.getReferencedSchema(), 
doneSchemas, base);
+                }
+            }
+        }
     }
     
     public boolean isRecognizedQuery(String baseUri, String ctx, EndpointInfo 
endpointInfo) {


Reply via email to