Author: rr
Date: Mon Jul 5 16:35:25 2010
New Revision: 960634
URL: http://svn.apache.org/viewvc?rev=960634&view=rev
Log:
ODE-867: BPEL Schema Validation
Modified:
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Bpel20QNames.java
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/BpelObjectFactory.java
ode/trunk/bpel-schemas/src/main/resources/ws-bpel_executable.xsd
ode/trunk/bpel-scripts/src/main/resources/2.0/good/AsyncProcess/AsyncProcess2.bpel
ode/trunk/bpel-scripts/src/main/resources/2.0/good/compensation/comp1-2.0.bpel
ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If1-2.0.bpel
ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If2-2.0.bpel
ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If3-2.0.bpel
Modified:
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Bpel20QNames.java
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Bpel20QNames.java?rev=960634&r1=960633&r2=960634&view=diff
==============================================================================
---
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Bpel20QNames.java
(original)
+++
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Bpel20QNames.java
Mon Jul 5 16:35:25 2010
@@ -130,6 +130,7 @@ public abstract class Bpel20QNames {
public static final QName COMPENSATIONHANDLER =
newQName("compensationHandler");
public static final QName TERMINATIONHANDLER =
newQName("terminationHandler");
public static final QName COMPENSATE = newQName("compensate");
+ public static final QName COMPENSATE_SCOPE = newQName("compensateScope");
public static final QName EVENTHANDLERS = newQName("eventHandlers");
public static final QName ONEVENT = newQName("onEvent");
public static final QName ONMESSAGE = newQName("onMessage");
Modified:
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/BpelObjectFactory.java
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/BpelObjectFactory.java?rev=960634&r1=960633&r2=960634&view=diff
==============================================================================
---
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/BpelObjectFactory.java
(original)
+++
ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/BpelObjectFactory.java
Mon Jul 5 16:35:25 2010
@@ -20,19 +20,24 @@ package org.apache.ode.bpel.compiler.bom
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.compiler.BpelC;
import org.apache.ode.bpel.compiler.bom.IfActivity.Case;
import org.apache.ode.utils.DOMUtils;
import org.apache.ode.utils.XMLParserUtils;
+import org.jaxen.saxpath.SAXPathException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import javax.xml.namespace.QName;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.net.URI;
+import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
@@ -158,6 +163,7 @@ public class BpelObjectFactory {
_mappings.put(Bpel20QNames.CORRELATION, Correlation.class);
_mappings.put(Bpel20QNames.CORRELATIONSET, CorrelationSet.class);
_mappings.put(Bpel20QNames.COMPENSATE, CompensateScopeActivity.class);
+ _mappings.put(Bpel20QNames.COMPENSATE_SCOPE,
CompensateScopeActivity.class);
_mappings.put(Bpel20QNames.COMPENSATIONHANDLER,
CompensationHandler.class);
_mappings.put(Bpel20QNames.FAULTHANDLERS, FaultHandler.class);
_mappings.put(Bpel20QNames.TERMINATIONHANDLER,
TerminationHandler.class);
@@ -279,6 +285,32 @@ public class BpelObjectFactory {
}
}
+ public static class BOMSAXErrorHandler implements ErrorHandler {
+ private static final Log __log =
LogFactory.getLog(BOMSAXErrorHandler.class);
+
+ private boolean ok = true;
+
+ private String formatException(SAXParseException exception) {
+ return exception.getPublicId() + ":" + exception.getSystemId()
+ ":" + exception.getLineNumber() + ":" + exception.getColumnNumber() + ":" +
exception.getMessage();
+ }
+
+ public boolean wasOK() { return ok; }
+ @Override
+ public void error(SAXParseException exception) throws
SAXException {
+ ok=false;
+ __log.error(formatException(exception));
+ }
+ @Override
+ public void fatalError(SAXParseException exception) throws
SAXException {
+ ok=false;
+ __log.fatal(formatException(exception));
+ }
+ @Override
+ public void warning(SAXParseException exception) throws
SAXException {
+ __log.warn(formatException(exception));
+ }
+ }
+
/**
* Parse a BPEL process found at the input source.
* @param isrc input source.
@@ -304,7 +336,24 @@ public class BpelObjectFactory {
_xr.setContentHandler(new DOMBuilderContentHandler(doc));
_xr.setFeature("http://xml.org/sax/features/namespaces",true);
_xr.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
+
+ _xr.setFeature("http://xml.org/sax/features/validation", true);
+ XMLParserUtils.addExternalSchemaURL(_xr,
Bpel11QNames.NS_BPEL4WS_2003_03, Bpel11QNames.NS_BPEL4WS_2003_03);
+ XMLParserUtils.addExternalSchemaURL(_xr,
Bpel20QNames.NS_WSBPEL2_0, Bpel20QNames.NS_WSBPEL2_0);
+ XMLParserUtils.addExternalSchemaURL(_xr,
Bpel20QNames.NS_WSBPEL2_0_FINAL_EXEC, Bpel20QNames.NS_WSBPEL2_0_FINAL_EXEC);
+ XMLParserUtils.addExternalSchemaURL(_xr,
Bpel20QNames.NS_WSBPEL2_0_FINAL_ABSTRACT,
Bpel20QNames.NS_WSBPEL2_0_FINAL_ABSTRACT);
+ BOMSAXErrorHandler errorHandler = new BOMSAXErrorHandler();
+ _xr.setErrorHandler(errorHandler);
_xr.parse(isrc);
+ if
(Boolean.parseBoolean(System.getProperty("org.apache.ode.compiler.failOnValidationErrors",
"false"))) {
+ if (!errorHandler.wasOK()) {
+ throw new SAXException("Validation errors during
parsing");
+ }
+ } else {
+ if (!errorHandler.wasOK()) {
+ __log.warn("Validation errors during parsing,
continuing due to -Dorg.apache.ode.compiler.failOnValidationErrors=false
switch");
+ }
+ }
return (Process) createBpelObject(doc.getDocumentElement(), systemURI);
}
Modified: ode/trunk/bpel-schemas/src/main/resources/ws-bpel_executable.xsd
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-schemas/src/main/resources/ws-bpel_executable.xsd?rev=960634&r1=960633&r2=960634&view=diff
==============================================================================
--- ode/trunk/bpel-schemas/src/main/resources/ws-bpel_executable.xsd (original)
+++ ode/trunk/bpel-schemas/src/main/resources/ws-bpel_executable.xsd Mon Jul 5
16:35:25 2010
@@ -508,10 +508,10 @@
<xsd:attribute name="variable" type="BPELVariableName"
use="optional"/>
<xsd:attribute name="route" use="optional" default="one">
<xsd:simpleType>
- <xs:restriction base="xs:NMTOKEN">
- <xs:enumeration value="all"/>
- <xs:enumeration value="one"/>
- </xs:restriction>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="all"/>
+ <xsd:enumeration value="one"/>
+ </xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
@@ -1038,10 +1038,10 @@
<xsd:attribute name="messageExchange" type="xsd:NCName"
use="optional"/>
<xsd:attribute name="route" use="optional" default="one">
<xsd:simpleType>
- <xs:restriction base="xs:NMTOKEN">
- <xs:enumeration value="all"/>
- <xs:enumeration value="one"/>
- </xs:restriction>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="all"/>
+ <xsd:enumeration value="one"/>
+ </xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
Modified:
ode/trunk/bpel-scripts/src/main/resources/2.0/good/AsyncProcess/AsyncProcess2.bpel
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-scripts/src/main/resources/2.0/good/AsyncProcess/AsyncProcess2.bpel?rev=960634&r1=960633&r2=960634&view=diff
==============================================================================
---
ode/trunk/bpel-scripts/src/main/resources/2.0/good/AsyncProcess/AsyncProcess2.bpel
(original)
+++
ode/trunk/bpel-scripts/src/main/resources/2.0/good/AsyncProcess/AsyncProcess2.bpel
Mon Jul 5 16:35:25 2010
@@ -125,6 +125,7 @@
</assign>
<if name="switch">
<condition>bpws:getVariableData('Request', 'payload',
'/typ:AsyncRequest/typ:Order/typ:OrderType/text()') = 'BookOrder'</condition>
+ <then>
<invoke name="BookOrderInvoke"
operation="BookOrder"
inputVariable="Request"
@@ -132,9 +133,10 @@
portType="resp:ResponderPT">
<correlations>
- <correlation set="OrderCorrelator" initiate="yes" pattern="out"
/>
+ <correlation set="OrderCorrelator" initiate="yes"
pattern="response" />
</correlations>
</invoke>
+ </then>
<else>
<invoke name="PaperOrderInvoke"
operation="PaperOrder"
@@ -143,7 +145,7 @@
portType="resp:ResponderPT">
<correlations>
- <correlation set="OrderCorrelator" initiate="yes" pattern="out"
/>
+ <correlation set="OrderCorrelator" initiate="yes"
pattern="response" />
</correlations>
</invoke>
</else>
Modified:
ode/trunk/bpel-scripts/src/main/resources/2.0/good/compensation/comp1-2.0.bpel
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-scripts/src/main/resources/2.0/good/compensation/comp1-2.0.bpel?rev=960634&r1=960633&r2=960634&view=diff
==============================================================================
---
ode/trunk/bpel-scripts/src/main/resources/2.0/good/compensation/comp1-2.0.bpel
(original)
+++
ode/trunk/bpel-scripts/src/main/resources/2.0/good/compensation/comp1-2.0.bpel
Mon Jul 5 16:35:25 2010
@@ -52,7 +52,7 @@
<scope name="s1">
<faultHandlers>
<catch faultName="bpws:uninitializedVariable">
- <compensate scope="s2" />
+ <compensateScope target="s2" />
</catch>
</faultHandlers>
Modified: ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If1-2.0.bpel
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If1-2.0.bpel?rev=960634&r1=960633&r2=960634&view=diff
==============================================================================
--- ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If1-2.0.bpel
(original)
+++ ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If1-2.0.bpel Mon Jul
5 16:35:25 2010
@@ -52,12 +52,14 @@
<sequence>
<if>
<condition>$var1/TestPart = 'abc'</condition>
+ <then>
<assign>
<copy>
<from>'case1'</from>
<to>$var2</to>
</copy>
</assign>
+ </then>
<elseif>
<condition>$var1/TestPart = 'def'</condition>
<assign>
Modified: ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If2-2.0.bpel
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If2-2.0.bpel?rev=960634&r1=960633&r2=960634&view=diff
==============================================================================
--- ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If2-2.0.bpel
(original)
+++ ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If2-2.0.bpel Mon Jul
5 16:35:25 2010
@@ -52,12 +52,14 @@
<sequence>
<if>
<condition>$var1/TestPart = 'def'</condition>
+ <then>
<assign>
<copy>
<from>'case1'</from>
<to>$var2</to>
</copy>
</assign>
+ </then>
<elseif>
<condition>$var1/TestPart = 'abc'</condition>
<assign>
Modified: ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If3-2.0.bpel
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If3-2.0.bpel?rev=960634&r1=960633&r2=960634&view=diff
==============================================================================
--- ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If3-2.0.bpel
(original)
+++ ode/trunk/bpel-scripts/src/main/resources/2.0/good/if/If3-2.0.bpel Mon Jul
5 16:35:25 2010
@@ -52,12 +52,14 @@
<sequence>
<if>
<condition>$var1/TestPart = 'foo'</condition>
+ <then>
<assign>
<copy>
<from>'case1'</from>
<to>$var2</to>
</copy>
</assign>
+ </then>
<elseif>
<condition>$var1/TestPart = 'bar'</condition>
<assign>