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