forrest-svn mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From thors...@apache.org
Subject svn commit: r703132 - /forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/XMLStructurer.java
Date Thu, 09 Oct 2008 11:09:28 GMT
Author: thorsten
Date: Thu Oct  9 04:09:28 2008
New Revision: 703132

URL: http://svn.apache.org/viewvc?rev=703132&view=rev
Log:
FOR-1127
Switching to use contract exception and enhancing the code around the exception handling in
general. 

Further adding note about the possibility of enhancing the contract processing. It is possible
to allow contracts to fail if they are not critical for the overall result. This is a nice
possible future feature. One can imaging to use an @critical='true|false' to indicate whether
to fail or not.

e.g.  
<forrest:contract 
    critical="false"
    name="siteinfo-meta-navigation" 
    dataURI="cocoon://#{$getRequest}.navigation.xml"/>

with this tag the dispatcher will not fail if the contact fails.

Fixing problem for non-xml output. Instead of assuming the existence of a root element we
now check if there is one and if not we create one.

Modified:
    forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/XMLStructurer.java

Modified: forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/XMLStructurer.java
URL: http://svn.apache.org/viewvc/forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/XMLStructurer.java?rev=703132&r1=703131&r2=703132&view=diff
==============================================================================
--- forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/XMLStructurer.java
(original)
+++ forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/XMLStructurer.java
Thu Oct  9 04:09:28 2008
@@ -23,6 +23,7 @@
 import org.apache.forrest.dispatcher.api.Resolver;
 import org.apache.forrest.dispatcher.api.Structurer;
 import org.apache.forrest.dispatcher.config.DispatcherBean;
+import org.apache.forrest.dispatcher.exception.ContractException;
 import org.apache.forrest.dispatcher.exception.DispatcherException;
 import org.apache.forrest.dispatcher.factories.ContractFactory;
 import org.apache.forrest.dispatcher.impl.helper.Captions;
@@ -197,6 +198,10 @@
           StartElement start = getEventFactory().createStartElement("", "",
               replaceFirst);
           writer.add((XMLEvent) start);
+        }else if(element.equals("/")){
+          StartElement start = getEventFactory().createStartElement("", "",
+              "result");
+          writer.add((XMLEvent) start);
         }
 
         injectResult(writer, element);
@@ -204,7 +209,11 @@
           EndElement end = getEventFactory().createEndElement("", "",
               replaceFirst);
           writer.add((XMLEvent) end);
-        }
+        }else if(element.equals("/")){
+          EndElement end = getEventFactory().createEndElement("", "",
+              "result");
+          writer.add((XMLEvent) end);
+    }
 
       }
 
@@ -214,7 +223,7 @@
   }
 
   private void processContract(XMLStreamReader reader)
-      throws XMLStreamException, DispatcherException, IOException {
+      throws DispatcherException, XMLStreamException{
     boolean process = true;
     String elementName = null;
     String name = "", data = null;
@@ -241,10 +250,24 @@
       case XMLStreamConstants.END_ELEMENT:
         elementName = reader.getLocalName();
         if (elementName.equals(Captions.CONTRACT_ELEMENT)) {
-          InputStream resultStream = contract.execute(dataStream, localParams);
-          StreamHelper.closeStream(dataStream);
-          processContractResult(resultStream);
-          StreamHelper.closeStream(resultStream);
+          try {
+            InputStream resultStream = contract.execute(dataStream, localParams);
+            StreamHelper.closeStream(dataStream);
+            processContractResult(resultStream);
+            StreamHelper.closeStream(resultStream);
+          } catch (Exception e) {
+            /*
+             *  FOR-1127
+             *  Here we can inject custom handler for allowing that contracts can
+             *  throw exceptions but the overall structurer will not fail at whole.
+             *  
+             *  Imaging contract "xyz" will fail. Now we throw an exception and abort 
+             *  processing. However it may be desirable that the process continues 
+             *  since the contract may not be critical for the overall result.
+             *  
+             */
+            throw new ContractException(name,"\n",e);
+          }
           process = false;
         }
         break;



Mime
View raw message