Author: supun
Date: Wed Feb  2 13:17:25 2011
New Revision: 1066458

URL: http://svn.apache.org/viewvc?rev=1066458&view=rev
Log:
applying patch SYNAPSE-723, thanks Miyuru for the contribution

Added:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/jaxp/SchemaResourceLSInput.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/jaxp/SchemaResourceResolver.java
Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ValidateMediatorFactory.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ValidateMediatorSerializer.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/ValidateMediator.java
    
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializationTest.java
    
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/builtin/ValidateMediatorSerializationTest.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ValidateMediatorFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ValidateMediatorFactory.java?rev=1066458&r1=1066457&r2=1066458&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ValidateMediatorFactory.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ValidateMediatorFactory.java
 Wed Feb  2 13:17:25 2011
@@ -36,7 +36,8 @@ import java.util.*;
  * <pre>
  * &lt;validate [source="xpath"]>
  *   &lt;schema key="string">+
- *   &lt;feature name="<validation-feature-name>" value="true|false"/>
+ *   &lt;resource location="&lt;external-schema>" key="string">+
+ *   &lt;feature name="&lt;validation-feature-name>" value="true|false"/>
  *   &lt;on-fail>
  *     mediator+
  *   &lt;/on-fail>
@@ -89,6 +90,9 @@ public class ValidateMediatorFactory ext
             }
         }
 
+        //process external schema resources
+        
validateMediator.setResourceMap(ResourceMapFactory.createResourceMap(elem));
+
         // process on-fail
         OMElement onFail = null;
         Iterator iterator = elem.getChildrenWithName(ON_FAIL_Q);

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ValidateMediatorSerializer.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ValidateMediatorSerializer.java?rev=1066458&r1=1066457&r2=1066458&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ValidateMediatorSerializer.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ValidateMediatorSerializer.java
 Wed Feb  2 13:17:25 2011
@@ -52,6 +52,8 @@ public class ValidateMediatorSerializer 
             schema.addAttribute(fac.createOMAttribute("key", nullNS, key));
         }
 
+        ResourceMapSerializer.serializeResourceMap(validate, 
mediator.getResourceMap());
+
         List<MediatorProperty> features = mediator.getFeatures();
         if (!features.isEmpty()) {
             for (MediatorProperty mp : features) {

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=1066458&r1=1066457&r2=1066458&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
 Wed Feb  2 13:17:25 2011
@@ -29,6 +29,8 @@ import org.apache.synapse.config.Synapse
 import org.apache.synapse.mediators.AbstractListMediator;
 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.xpath.SourceXPathSupport;
 import org.apache.synapse.util.xpath.SynapseXPath;
 import org.xml.sax.SAXException;
@@ -61,6 +63,11 @@ public class ValidateMediator extends Ab
     private List<String> schemaKeys = new ArrayList<String>();
 
     /**
+     * A list of property keys, referring to the external schema resources to 
be used for the validation
+     */
+    private ResourceMap resourceMap;
+
+    /**
      * An XPath expression to be evaluated against the message to find the 
element to be validated.
      * If this is not specified, the validation will occur against the first 
child element of the
      * SOAP body
@@ -129,15 +136,21 @@ public class ValidateMediator extends Ab
                 }
 
                 try {
+                    factory.setResourceResolver(
+                            new 
SchemaResourceResolver(synCtx.getConfiguration(), resourceMap));
                     cachedSchema = factory.newSchema(sources);
                 } catch (SAXException e) {
                     handleException("Error creating a new schema objects for " 
+
-                        "schemas : " + schemaKeys.toString(), e, synCtx);
+                            "schemas : " + schemaKeys.toString(), e, synCtx);
+                } catch (RuntimeException e) {
+                    handleException("Error creating a new schema objects for " 
+
+                            "schemas : " + schemaKeys.toString(), e, synCtx);
                 }
 
                 if (errorHandler.isValidationError()) {
                     //reset the errorhandler state
                     errorHandler.setValidationError(false);
+                    cachedSchema = null;
                     handleException("Error creating a new schema objects for 
schemas : "
                             + schemaKeys.toString(), 
errorHandler.getSaxParseException(), synCtx);
                 }
@@ -246,7 +259,7 @@ public class ValidateMediator extends Ab
         public SAXParseException getSaxParseException() {
             return saxParseException;
         }
-        
+
         /**
          * To set explicitly validation error condition
          * @param validationError  is occur validation error?
@@ -313,6 +326,14 @@ public class ValidateMediator extends Ab
     }
 
     /**
+     * Set the External Schema ResourceMap that will required for schema 
validation
+     * @param resourceMap  the ResourceMap which contains external schema 
resources
+     */
+    public void setResourceMap(ResourceMap resourceMap) {
+        this.resourceMap = resourceMap;
+    }
+
+    /**
      * Get the source XPath which yields the source element for validation
      * @return the XPath which yields the source element for validation
      */
@@ -335,4 +356,13 @@ public class ValidateMediator extends Ab
     public List<MediatorProperty> getFeatures() {
         return explicityFeatures;
     }
+
+    /**
+     *ResourceMap for the external schema resources to be used for the 
validation
+     * @return the ResourceMap with external schema resources
+     */
+    public ResourceMap getResourceMap() {
+        return resourceMap;
+    }
+
 }

Added: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/jaxp/SchemaResourceLSInput.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/jaxp/SchemaResourceLSInput.java?rev=1066458&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/jaxp/SchemaResourceLSInput.java
 (added)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/jaxp/SchemaResourceLSInput.java
 Wed Feb  2 13:17:25 2011
@@ -0,0 +1,84 @@
+package org.apache.synapse.util.jaxp;
+
+import org.w3c.dom.ls.LSInput;
+
+import java.io.InputStream;
+import java.io.Reader;
+
+/**
+ * External schema resource holder for {@link 
org.apache.synapse.util.jaxp.SchemaResourceResolver}
+ * This will use to store {@link java.io.InputStream} of external schema 
resource resolved by
+ * {@link org.apache.synapse.util.jaxp.SchemaResourceResolver}
+ *
+ * Current implementation is only using {@link java.io.InputStream} to store 
external schema resource. Methods other
+ * than {@link 
org.apache.synapse.util.jaxp.SchemaResourceLSInput#getByteStream()} and
+ * {@link 
org.apache.synapse.util.jaxp.SchemaResourceLSInput#setByteStream(java.io.InputStream)}
 are just place holders.
+ */
+public class SchemaResourceLSInput implements LSInput {
+
+    InputStream byteStream = null;
+
+    public Reader getCharacterStream() {
+        return null;
+    }
+
+    public void setCharacterStream(Reader characterStream) {
+
+    }
+
+    public InputStream getByteStream() {
+        return byteStream;
+    }
+
+    public void setByteStream(InputStream byteStream) {
+        this.byteStream = byteStream;
+    }
+
+    public String getStringData() {
+        return null;
+    }
+
+    public void setStringData(String stringData) {
+
+    }
+
+    public String getSystemId() {
+        return null;
+    }
+
+    public void setSystemId(String systemId) {
+
+    }
+
+    public String getPublicId() {
+        return null;
+    }
+
+    public void setPublicId(String publicId) {
+
+    }
+
+    public String getBaseURI() {
+        return null;
+    }
+
+    public void setBaseURI(String baseURI) {
+
+    }
+
+    public String getEncoding() {
+        return null;
+    }
+
+    public void setEncoding(String encoding) {
+
+    }
+
+    public boolean getCertifiedText() {
+        return false;
+    }
+
+    public void setCertifiedText(boolean certifiedText) {
+
+    }
+}

Added: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/jaxp/SchemaResourceResolver.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/jaxp/SchemaResourceResolver.java?rev=1066458&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/jaxp/SchemaResourceResolver.java
 (added)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/jaxp/SchemaResourceResolver.java
 Wed Feb  2 13:17:25 2011
@@ -0,0 +1,57 @@
+package org.apache.synapse.util.jaxp;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.config.SynapseConfiguration;
+import org.apache.synapse.util.resolver.ResourceMap;
+import org.w3c.dom.ls.LSInput;
+import org.w3c.dom.ls.LSResourceResolver;
+import org.xml.sax.InputSource;
+
+/**
+ * External schema resource resolver for Validate Mediator
+ * <p/>
+ * 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.
+ */
+public class SchemaResourceResolver implements LSResourceResolver {
+
+    private ResourceMap resourceMap;
+    private SynapseConfiguration synCfg;
+    private static final Log log = 
LogFactory.getLog(SchemaResourceResolver.class);
+
+    public SchemaResourceResolver(SynapseConfiguration synCfg, ResourceMap 
resourceMap) {
+        this.resourceMap = resourceMap;
+        this.synCfg = synCfg;
+    }
+
+    /**
+     * Lookup in {@link org.apache.synapse.util.resolver.ResourceMap} and 
returns
+     * {@link org.apache.synapse.util.jaxp.SchemaResourceLSInput}
+     */
+    public LSInput resolveResource(String type, String namespaceURI,
+                                   String publicId, String systemId,
+                                   String baseURI) {
+
+        if (log.isDebugEnabled()) {
+            log.debug("Resolving Schema resource " + systemId);
+        }
+
+        if (resourceMap == null) {
+            log.warn("Unable to resolve schema resource : \"" + systemId +
+                    "\". External schema resources not " +
+                    "defined in Validate mediator configuration");
+            return null;
+        }
+
+        InputSource inputSource = resourceMap.resolve(synCfg, systemId);
+        if (inputSource == null) {
+            log.warn("Unable to resolve schema resource " + systemId);
+            return null;
+        }
+        SchemaResourceLSInput schemaResourceLSInput = new 
SchemaResourceLSInput();
+        schemaResourceLSInput.setByteStream(inputSource.getByteStream());
+        return schemaResourceLSInput;
+    }
+}
+

Modified: 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializationTest.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializationTest.java?rev=1066458&r1=1066457&r2=1066458&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializationTest.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializationTest.java
 Wed Feb  2 13:17:25 2011
@@ -41,7 +41,7 @@ public class AddressEndpointSerializatio
 
     public void testAddressEndpointScenarioTwo() throws Exception {
         String inputXML =
-                "<endpoint name=\"testEndpoint\" onFault=\"foo\" xmlns=" +
+                "<endpoint name=\"testEndpoint\" onError=\"foo\" xmlns=" +
                         "\"http://ws.apache.org/ns/synapse\";>" +
                 "<address 
uri=\"http://localhost:9000/services/SimpleStockQuoteService\"; >" +
                 "</address>"+

Modified: 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/builtin/ValidateMediatorSerializationTest.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/builtin/ValidateMediatorSerializationTest.java?rev=1066458&r1=1066457&r2=1066458&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/builtin/ValidateMediatorSerializationTest.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/builtin/ValidateMediatorSerializationTest.java
 Wed Feb  2 13:17:25 2011
@@ -28,13 +28,12 @@ public class ValidateMediatorSerializati
     private ValidateMediatorFactory validateMediatorFactory = null;
     private ValidateMediatorSerializer validateMediatorSerializer = null;
 
-    public ValidateMediatorSerializationTest() {
-        validateMediatorFactory = new ValidateMediatorFactory();
-        validateMediatorSerializer = new ValidateMediatorSerializer();
-    }
 
     public void testValidateMediatorSerialization() throws Exception {
 
+        validateMediatorFactory = new ValidateMediatorFactory();
+        validateMediatorSerializer = new ValidateMediatorSerializer();
+
         String validateConfiguration = "<syn:validate 
xmlns:syn=\"http://ws.apache.org/ns/synapse\"; source=\"//regRequest\">" +
                 "<syn:schema 
key=\"file:synapse_repository/conf/sample/validate.xsd\"/>" +
                 "<syn:feature 
name=\"http://javax.xml.XMLConstants/feature/secure-processing\"; 
value=\"true\"/>" +
@@ -46,5 +45,21 @@ public class ValidateMediatorSerializati
         assertTrue(serialization(validateConfiguration, 
validateMediatorFactory, validateMediatorSerializer));
     }
 
+    public void testValidateMediatorSerializationWithExternalResources() 
throws Exception {
+
+        validateMediatorFactory = new ValidateMediatorFactory();
+        validateMediatorSerializer = new ValidateMediatorSerializer();
+
+        String validateConfiguration = "<validate 
xmlns=\"http://ws.apache.org/ns/synapse\"; " +
+                "source=\"//regRequest\">" +
+                "<schema 
key=\"file:synapse_repository/conf/sample/validate.xsd\" />" +
+                "<resource location=\"resource2.xsd\" key=\"resource2_xsd\" 
/>" +
+                "<resource location=\"resource1.xsd\" key=\"resource1_xsd\" 
/>" +
+                "<feature 
name=\"http://javax.xml.XMLConstants/feature/secure-processing\"; value=\"true\" 
/>" +
+                "<on-fail><drop /></on-fail>" +
+                "</validate>";
+        assertTrue(serialization(validateConfiguration, 
validateMediatorFactory, validateMediatorSerializer));
+    }
+
 }
 


Reply via email to