Author: supun
Date: Mon Apr 25 08:10:14 2011
New Revision: 1096430

URL: http://svn.apache.org/viewvc?rev=1096430&view=rev
Log:
applying patch SYNAPSE-755, many thanks Ratha for the contribution

Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/ValidateMediator.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/resolver/UserDefinedXmlSchemaURIResolver.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/ValidateMediator.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/ValidateMediator.java?rev=1096430&r1=1096429&r2=1096430&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/ValidateMediator.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/ValidateMediator.java
 Mon Apr 25 08:10:14 2011
@@ -26,12 +26,14 @@ import org.apache.synapse.SynapseConstan
 import org.apache.synapse.SynapseLog;
 import org.apache.synapse.config.Entry;
 import org.apache.synapse.config.SynapseConfigUtils;
+import org.apache.synapse.config.SynapseConfiguration;
 import org.apache.synapse.mediators.AbstractListMediator;
 import org.apache.synapse.mediators.Value;
 import org.apache.synapse.mediators.MediatorProperty;
 import org.apache.synapse.util.AXIOMUtils;
 import org.apache.synapse.util.jaxp.SchemaResourceResolver;
 import org.apache.synapse.util.resolver.ResourceMap;
+import org.apache.synapse.util.resolver.UserDefinedXmlSchemaURIResolver;
 import org.apache.synapse.util.xpath.SourceXPathSupport;
 import org.apache.synapse.util.xpath.SynapseXPath;
 import org.xml.sax.SAXException;
@@ -140,10 +142,16 @@ public class ValidateMediator extends Ab
                     String propName = schemaKey.evaluateValue(synCtx);
                     sources[i++] = 
SynapseConfigUtils.getStreamSource(synCtx.getEntry(propName));
                 }
-
+                // load the UserDefined SchemaURIResolver implementations
                 try {
-                    factory.setResourceResolver(
-                            new 
SchemaResourceResolver(synCtx.getConfiguration(), resourceMap));
+                       SynapseConfiguration synCfg = synCtx.getConfiguration();
+                       
if(synCfg.getProperty(SynapseConstants.SYNAPSE_SCHEMA_RESOLVER) !=null){
+                               setUserDefinedSchemaResourceResolver(synCtx);
+                       }
+                       else{
+                               factory.setResourceResolver(
+                                                           new 
SchemaResourceResolver(synCtx.getConfiguration(), resourceMap));
+                       }
                     cachedSchema = factory.newSchema(sources);
                 } catch (SAXException e) {
                     handleException("Error creating a new schema objects for " 
+
@@ -215,6 +223,39 @@ public class ValidateMediator extends Ab
     }
 
     /**
+     * UserDefined schema resource resolver
+
+     * @param synCtx message context
+     */
+    private void setUserDefinedSchemaResourceResolver(MessageContext synCtx) {
+        SynapseConfiguration synCfg = synCtx.getConfiguration();
+        String schemaResolverName = 
synCfg.getProperty(SynapseConstants.SYNAPSE_SCHEMA_RESOLVER);
+        Class schemaClazz;
+        Object schemaClazzObject;
+        try {
+            schemaClazz = Class.forName(schemaResolverName);
+        } catch (ClassNotFoundException e) {
+            String msg =
+                    "System could not find the class defined for the specific 
properties" +
+                            "\n SchemaResolverImplementation:" + 
schemaResolverName;
+            handleException(msg, e, synCtx);
+            return;
+        }
+
+        try {
+            schemaClazzObject = schemaClazz.newInstance();
+
+            UserDefinedXmlSchemaURIResolver userDefSchemaResResolver =
+                    (UserDefinedXmlSchemaURIResolver) schemaClazzObject;
+            userDefSchemaResResolver.init(resourceMap, synCfg, schemaKeys);
+            factory.setResourceResolver(userDefSchemaResResolver);
+        } catch (Exception e) {
+            String msg = "Could not create an instance from the class";
+            handleException(msg, e, synCtx);
+        }
+    }
+    
+    /**
      * Get the validation Source for the message context
      *
      * @param synCtx the current message to validate

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/resolver/UserDefinedXmlSchemaURIResolver.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/resolver/UserDefinedXmlSchemaURIResolver.java?rev=1096430&r1=1096429&r2=1096430&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/resolver/UserDefinedXmlSchemaURIResolver.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/resolver/UserDefinedXmlSchemaURIResolver.java
 Mon Apr 25 08:10:14 2011
@@ -18,20 +18,22 @@
  */
 package org.apache.synapse.util.resolver;
 
+import java.util.List;
+
 import org.apache.synapse.config.SynapseConfiguration;
+import org.apache.synapse.mediators.Value;
 import org.apache.ws.commons.schema.resolver.URIResolver;
+import org.w3c.dom.ls.LSResourceResolver;
 
 /**
  * This interface lets user to write his/her own XmlSchemaURIResolver rather
- * using {@ link CustomXmlSchemaURIResolver} .
- * Here using WSDLKey, user can perform his/her own mapping between 
Relativelocation 
+ * using {@link CustomXmlSchemaURIResolver} .
+ * Here using WSDLKey/schemaKey, user can perform his/her own mapping between 
Relativelocation 
  * and Registrypath . User needs to provide a synapse.property 
call,"synapse.schema.resolver="
  * pointing to the implementation.
  */
-/**
- * Adapting the schema Relativepath to the registry actual path
- */
-public interface UserDefinedXmlSchemaURIResolver extends URIResolver {
+
+public interface UserDefinedXmlSchemaURIResolver extends URIResolver, 
LSResourceResolver {
 
        /**
         * Initiate the UserDefinedXmlSchemaURIResolver with the required 
parameters
@@ -41,4 +43,24 @@ public interface UserDefinedXmlSchemaURI
         * @param wsdlKey The registry key of the wsdl file
         */
        void init(ResourceMap resourceMap, SynapseConfiguration synCfg, String 
wsdlKey);
+
+       /**
+        * This will used by Validate mediator to resolve external schema 
references
+        * defined in Validate mediator configuration
+        * using
+        *
+        * <pre>
+        * &lt;resource location="location" key="key"/&gt;
+        * </pre>
+        *
+        * inside Validate mediator configuration.
+        *
+        * @param resourceMap
+        *            {@link ResourceMap} object
+        * @param synCfg
+        *            Synapseconfiguration
+        * @param schemaRegKey
+        *            , List of base schemas' registryKeys
+        */
+       void init(ResourceMap resourceMap, SynapseConfiguration synCfg, 
List<Value> schemaRegKey);
 }


Reply via email to