You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by je...@apache.org on 2002/03/14 23:12:00 UTC

cvs commit: xml-cocoon2/src/scratchpad/src/org/apache/cocoon/transformation SourceWritingTransformer.java

jeremy      02/03/14 14:12:00

  Modified:    src/scratchpad/src/org/apache/cocoon/transformation
                        SourceWritingTransformer.java
  Log:
  fixed bug where no message would appear if .tmp blocking file existed. Still a problem with blocking files being left behind when StreamGenerator barfs on non well-formed XML.
  
  Revision  Changes    Path
  1.2       +44 -36    xml-cocoon2/src/scratchpad/src/org/apache/cocoon/transformation/SourceWritingTransformer.java
  
  Index: SourceWritingTransformer.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/transformation/SourceWritingTransformer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SourceWritingTransformer.java	13 Mar 2002 19:03:51 -0000	1.1
  +++ SourceWritingTransformer.java	14 Mar 2002 22:12:00 -0000	1.2
  @@ -125,12 +125,17 @@
   public class SourceWritingTransformer extends AbstractTransformer
       implements Disposable, Configurable, Composable {
   
  -    private static String WST_URI = "http://apache.org/cocoon/source/1.0";
  -    private static String WST_ELEMENT = "write";
  -    private static String WST_RESULT_ATTRIBUTE= "result";
  -    private static String WST_SRC_ATTRIBUTE = "src";
  -    private static String WST_ACTION_ATTRIBUTE = "action";
  -    private static String WST_SERIALIZER_ATTRIBUTE = "serializer";
  +    private static String SWT_URI = "http://apache.org/cocoon/source/1.0";
  +    private static String SWT_ELEMENT = "write";
  +    private static String SWT_RESULT_ATTRIBUTE= "result";
  +    private static String SWT_SRC_ATTRIBUTE = "src";
  +    private static String SWT_ACTION_ATTRIBUTE = "action";
  +    private static String SWT_SERIALIZER_ATTRIBUTE = "serializer";
  +    private static String SWT_RESULT_FAILED = "failed";
  +    private static String SWT_RESULT_SUCCESS = "success";
  +    private static String SWT_ACTION_NONE = "none";
  +    private static String SWT_ACTION_NEW = "new";
  +    private static String SWT_ACTION_OVER = "overwritten";
   
   
       /** The <code>SourceResolver</code> */
  @@ -192,9 +197,9 @@
        */
       public void configure(Configuration configuration) throws ConfigurationException {
   			try {
  -				this.serializer_name = configuration.getChild(WST_SERIALIZER_ATTRIBUTE).getValue();
  +				this.serializer_name = configuration.getChild(SWT_SERIALIZER_ATTRIBUTE).getValue();
   			} catch (Exception e) {
  -				getLogger().debug("SourceWritingTransformer: Configuration - no serializer yet");
  +				getLogger().debug("Configuration - no serializer yet");
   			}
       }
   
  @@ -205,9 +210,9 @@
       public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par)
       throws ProcessingException, SAXException, IOException {
   			this.sourceResolver = resolver; // save it for later, when we know the filepath to save to
  -			this.serializer_name = par.getParameter(WST_SERIALIZER_ATTRIBUTE, this.serializer_name);
  +			this.serializer_name = par.getParameter(SWT_SERIALIZER_ATTRIBUTE, this.serializer_name);
   			if (this.serializer_name != null)
  -				getLogger().debug("SourceWritingTransformer: Setup, using serializer: " + this.serializer_name);
  +				getLogger().debug("Setup, using serializer: " + this.serializer_name);
       }
   
       /**
  @@ -253,14 +258,14 @@
       public void startElement(String uri, String loc, String raw, Attributes a)
       throws SAXException {
   			if (!this.processing) {
  -				if (WST_URI.equals(uri) && WST_ELEMENT.equals(loc)) {
  -					getLogger().debug("SourceWritingTransformer: start processing xmlns:source");
  +				if (SWT_URI.equals(uri) && SWT_ELEMENT.equals(loc)) {
  +					getLogger().debug("start processing xmlns:source");
   					this.failed = false;
   					this.message = null;
   					this.target = "";
   
   					// look for the Source
  -					String src = a.getValue("",WST_SRC_ATTRIBUTE);
  +					String src = a.getValue("",SWT_SRC_ATTRIBUTE);
   					try {
   						this.message = "The src attribute could not be resolved";
   						this.source = this.sourceResolver.resolve(src);
  @@ -274,7 +279,7 @@
   						this.os = this.wsource.getOutputStream();
   						
   						// has a Serializer been specified?
  -						String local_serializer = a.getValue("",WST_SERIALIZER_ATTRIBUTE);
  +						String local_serializer = a.getValue("",SWT_SERIALIZER_ATTRIBUTE);
   						if (local_serializer != null) this.serializer_name = local_serializer;
   						if (this.serializer_name != null) {
   							// Lookup the Serializer
  @@ -286,23 +291,24 @@
   							this.isSerializer = true;
   						} else {
   							this.message = "could not get a ContentHandler";
  -							this.ch = (XMLConsumer)wsource.getContentHandler();            	// Is there a way to avoid this casting?
  +							this.ch = (XMLConsumer)wsource.getContentHandler();
   						}
  -						// start the document
  -						if (!this.failed) {
  -							this.ch.startDocument();
  -						}						
   					} catch (Exception e) {
  -						getLogger().warn("SourceWritingTransformer failed, " + this.message, e);
  +						getLogger().warn("failed, " + this.message, e);
   						this.failed = true;
   						try {
   							this.wsource.cancel(this.ch);
   						} catch (Exception e2) {
  -							throw new SAXException("SourceWritingTransformer: " + this.message, e2);
  +							getLogger().warn("failed to cancel: " + this.target, e2);
  +							this.message += " and failed to cancel";
   						}
   					}
  +					// start the document
  +					if (!this.failed) {
  +						this.ch.startDocument();
  +					}						
   					this.processing = true;
  -					getLogger().debug("SourceWritingTransformer: Processing Started");
  +					getLogger().debug("Processing Started");
   				} else {
   					super.startElement(uri,loc,raw,a);
   				}
  @@ -328,28 +334,28 @@
   			if (!this.processing) {
   				super.endElement(uri,loc,raw);
   			} else {
  -				if (WST_URI.equals(uri) && WST_ELEMENT.equals(loc)){
  +				if (SWT_URI.equals(uri) && SWT_ELEMENT.equals(loc)){
   					if (!this.failed) {
   						this.ch.endDocument();
   					}
   					this.processing = false;
  -					getLogger().debug("SourceWritingTransformer: Processing Ended");
  -					if (isSerializer) this.manager.release((Component)this.ch);            	// Is there a way to avoid this casting?
  +					getLogger().debug("Processing Ended");
   					// close the OutputStream
   					try {
   						if (this.os != null) {
   							this.os.close();
   							this.os = null;
   						}
  +						
   					} catch(Exception e) {
  -						getLogger().warn("SourceWritingTransformer: Failed to close source", e);
  +						getLogger().warn("Failed to close source", e);
   						this.message = "Failed to close source";
   						this.failed = true;
   						try {
   							this.message = "Failed to cancel source";
   							this.wsource.cancel(this.ch);
   						} catch (Exception e2) {
  -							throw new SAXException("SourceWritingTransformer: " + this.message, e2);
  +							getLogger().warn("failed to cancel: " + this.target, e2);
   						}
   					} finally {
   						if (this.source != null) {
  @@ -357,20 +363,20 @@
   						}
   					}
   					// Report result
  -					String result = (this.failed) ? "failed" : "success";
  -					String action = "none";
  +					String result = (this.failed) ? SWT_RESULT_FAILED : SWT_RESULT_SUCCESS;
  +					String action = SWT_ACTION_NONE;
   					if (!this.failed){
   						if (this.exists) {
  -							action = "overwritten";
  +							action = SWT_ACTION_OVER;
   						} else {
  -							action = "new";
  +							action = SWT_ACTION_NEW;
   						}
   					}
   					AttributesImpl attrs = new AttributesImpl();
  -					attrs.addAttribute(null, WST_SRC_ATTRIBUTE, WST_SRC_ATTRIBUTE, "CDATA", this.target);
  -					attrs.addAttribute(null, WST_ACTION_ATTRIBUTE, WST_ACTION_ATTRIBUTE, "CDATA", action);
  -					attrs.addAttribute(null, WST_RESULT_ATTRIBUTE, WST_RESULT_ATTRIBUTE, "CDATA", result);
  -					if (this.serializer_name != null) attrs.addAttribute(null, WST_SERIALIZER_ATTRIBUTE, WST_SERIALIZER_ATTRIBUTE, "CDATA", this.serializer_name);
  +					attrs.addAttribute(null, SWT_SRC_ATTRIBUTE, SWT_SRC_ATTRIBUTE, "CDATA", this.target);
  +					attrs.addAttribute(null, SWT_ACTION_ATTRIBUTE, SWT_ACTION_ATTRIBUTE, "CDATA", action);
  +					attrs.addAttribute(null, SWT_RESULT_ATTRIBUTE, SWT_RESULT_ATTRIBUTE, "CDATA", result);
  +					if (this.serializer_name != null) attrs.addAttribute(null, SWT_SERIALIZER_ATTRIBUTE, SWT_SERIALIZER_ATTRIBUTE, "CDATA", this.serializer_name);
   					super.startElement(uri, loc, raw, attrs);
   					if (this.message != null && this.failed == true) super.characters(this.message.toCharArray(), 0, this.message.length());
   					super.endElement(uri, loc, raw);
  @@ -528,12 +534,14 @@
   
       public void recycle() {
       	if (this.wsource != null) {
  +				getLogger().error("cancelled by recycle() method");
       		try {
       			this.wsource.cancel(this.ch);
       		} catch (Exception e) {
  -					getLogger().error("SourceWritingTransformer: cancelled");
  +					getLogger().error("failed to cancel in recycle() method");
       		}    	
       	}
  +			if (isSerializer) this.manager.release((Component)this.ch);
         this.sourceResolver = null;
       }
   
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org