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>
* <validate [source="xpath"]>
* <schema key="string">+
- * <feature name="<validation-feature-name>" value="true|false"/>
+ * <resource location="<external-schema>" key="string">+
+ * <feature name="<validation-feature-name>" value="true|false"/>
* <on-fail>
* mediator+
* </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> <resource location="location" key="key"/> </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));
+ }
+
}