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>
+ * <resource location="location" key="key"/>
+ * </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);
}