You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rd...@apache.org on 2002/02/10 20:18:42 UTC
cvs commit: jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/io BeanWriter.java
rdonkin 02/02/10 11:18:42
Modified: betwixt/src/java/org/apache/commons/betwixt/io
BeanWriter.java
Log:
Added code to escape text in attribute values and element body text
Revision Changes Path
1.13 +85 -7 jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/io/BeanWriter.java
Index: BeanWriter.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/io/BeanWriter.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- BeanWriter.java 30 Jan 2002 19:35:37 -0000 1.12
+++ BeanWriter.java 10 Feb 2002 19:18:42 -0000 1.13
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/io/BeanWriter.java,v 1.12 2002/01/30 19:35:37 rdonkin Exp $
- * $Revision: 1.12 $
- * $Date: 2002/01/30 19:35:37 $
+ * $Header: /home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/io/BeanWriter.java,v 1.13 2002/02/10 19:18:42 rdonkin Exp $
+ * $Revision: 1.13 $
+ * $Date: 2002/02/10 19:18:42 $
*
* ====================================================================
*
@@ -57,7 +57,7 @@
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
- * $Id: BeanWriter.java,v 1.12 2002/01/30 19:35:37 rdonkin Exp $
+ * $Id: BeanWriter.java,v 1.13 2002/02/10 19:18:42 rdonkin Exp $
*/
package org.apache.commons.betwixt.io;
@@ -98,10 +98,21 @@
* The indent string used is set by {@link #setIndent}.
*
* @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
- * @version $Revision: 1.12 $
+ * @version $Revision: 1.13 $
*/
public class BeanWriter {
+ /** Escaped <code><</code> entity */
+ private final static String LESS_THAN_ENTITY = "<";
+ /** Escaped <code>></code> entity */
+ private final static String GREATER_THAN_ENTITY = ">";
+ /** Escaped <code>&</code> entity */
+ private final static String AMPERSAND_ENTITY = "&";
+ /** Escaped <code>'</code> entity */
+ private final static String APOSTROPHE_ENTITY = "'";
+ /** Escaped <code>"</code> entity */
+ private final static String QUOTE_ENTITY = """;
+
/** Introspector used */
private XMLIntrospector introspector = new XMLIntrospector();
/** Where the output goes */
@@ -344,7 +355,7 @@
if ( expression != null ) {
Object value = expression.evaluate( context );
if ( value != null ) {
- String text = value.toString();
+ String text = escapeBodyValue(value);
if ( text != null && text.length() > 0 ) {
writer.write( ">" );
writer.write( text );
@@ -382,7 +393,7 @@
if ( expression != null ) {
Object value = expression.evaluate( context );
if ( value != null ) {
- String text = value.toString();
+ String text = escapeAttributeValue(value);
if ( text != null && text.length() > 0 ) {
writer.write( " " );
writer.write( attributeDescriptor.getQualifiedName() );
@@ -412,4 +423,71 @@
}
}
}
+
+ /**
+ * <p>Escape the <code>toString</code> of the given object.
+ * For use as body text.</p>
+ */
+ protected String escapeBodyValue(Object value) {
+ StringBuffer buffer = new StringBuffer(value.toString());
+ for (int i=0, size = buffer.length(); i <size; i++) {
+ switch (buffer.charAt(i)) {
+ case '<':
+ buffer.replace(i, i+1, LESS_THAN_ENTITY);
+ size += 3;
+ i+=3;
+ break;
+ case '>':
+ buffer.replace(i, i+1, GREATER_THAN_ENTITY);
+ size += 3;
+ i += 3;
+ break;
+ case '&':
+ buffer.replace(i, i+1, AMPERSAND_ENTITY);
+ size += 4;
+ i += 4;
+ break;
+ }
+ }
+ return buffer.toString();
+ }
+
+ /**
+ * <p>Escape the <code>toString</code> of the given object.
+ * For use in an attribute value.</p>
+ */
+ protected String escapeAttributeValue(Object value) {
+ StringBuffer buffer = new StringBuffer(value.toString());
+ for (int i=0, size = buffer.length(); i <size; i++) {
+ switch (buffer.charAt(i)) {
+ case '<':
+ buffer.replace(i, i+1, LESS_THAN_ENTITY);
+ size += 3;
+ i+=3;
+ break;
+ case '>':
+ buffer.replace(i, i+1, GREATER_THAN_ENTITY);
+ size += 3;
+ i += 3;
+ break;
+ case '&':
+ buffer.replace(i, i+1, AMPERSAND_ENTITY);
+ size += 4;
+ i += 4;
+ break;
+ case '\'':
+ buffer.replace(i, i+1, APOSTROPHE_ENTITY);
+ size += 4;
+ i += 4;
+ break;
+ case '\"':
+ buffer.replace(i, i+1, QUOTE_ENTITY);
+ size += 5;
+ i += 5;
+ break;
+ }
+ }
+ return buffer.toString();
+ }
+
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>