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>


Reply via email to