You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by su...@apache.org on 2011/04/25 10:10:14 UTC

svn commit: r1096430 - in /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse: mediators/builtin/ValidateMediator.java util/resolver/UserDefinedXmlSchemaURIResolver.java

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);
 }