Author: vgritsenko Date: Thu Apr 21 16:12:13 2005 New Revision: 164145 URL: http://svn.apache.org/viewcvs?rev=164145&view=rev Log: whitespace, braces
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java?rev=164145&r1=164144&r2=164145&view=diff ============================================================================== --- cocoon/branches/BRANCH_2_1_X/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java (original) +++ cocoon/branches/BRANCH_2_1_X/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java Thu Apr 21 16:12:13 2005 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2004 The Apache Software Foundation. + * Copyright 1999-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,6 +54,7 @@ import org.apache.cocoon.xml.IncludeXMLConsumer; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.BooleanUtils; import org.apache.excalibur.xml.sax.SAXParser; import org.xml.sax.Attributes; import org.xml.sax.InputSource; @@ -68,7 +69,7 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a> * @author <a href="mailto:[EMAIL PROTECTED]">Sven Beauprez</a> * @author <a href="mailto:[EMAIL PROTECTED]">Alfio Saglimbeni</a> - * @version CVS $Id$ + * @version $Id$ */ public class SQLTransformer extends AbstractSAXTransformer implements Disposable, Configurable { @@ -173,6 +174,9 @@ /** The default encoding for xml */ protected String xmlDefaultEncoding; + /** The connection used by all top level queries */ + protected Connection conn; + /** * Constructor */ @@ -183,19 +187,16 @@ this.defaultNamespaceURI = NAMESPACE; } - /** The connection used by all top level queries */ - protected Connection conn; - /** * Serviceable */ - public void service( ServiceManager manager ) throws ServiceException { + public void service(ServiceManager manager) throws ServiceException { super.service(manager); this.queries = new Vector(); try { - this.dbSelector = (ServiceSelector) manager.lookup( DataSourceComponent.ROLE + "Selector" ); - } catch ( ServiceException cme ) { - getLogger().warn( "Could not get the DataSource Selector", cme ); + this.dbSelector = (ServiceSelector) manager.lookup(DataSourceComponent.ROLE + "Selector"); + } catch (ServiceException cme) { + getLogger().warn("Could not get the DataSource Selector", cme); } } @@ -204,15 +205,17 @@ */ public void recycle() { super.recycle(); + try { // Close the connection used by all top level queries if (this.conn != null) { this.conn.close(); this.conn = null; } - } catch ( SQLException e ) { - getLogger().warn( "Could not close the connection", e ); + } catch (SQLException e) { + getLogger().warn("Could not close the connection", e); } + this.queries.clear(); this.outUri = null; this.outPrefix = null; @@ -225,17 +228,17 @@ } /** - * dispose + * Dispose */ public void dispose() { - if ( this.dbSelector != null ) { - this.manager.release( this.dbSelector ); + if (this.dbSelector != null) { + this.manager.release(this.dbSelector); this.dbSelector = null; } } /** - * configure + * Configure */ public void configure(Configuration conf) throws ConfigurationException { super.configure(conf); @@ -254,226 +257,235 @@ /** * Setup for the current request */ - public void setup( SourceResolver resolver, Map objectModel, - String source, Parameters parameters ) + public void setup(SourceResolver resolver, Map objectModel, + String source, Parameters parameters) throws ProcessingException, SAXException, IOException { super.setup(resolver, objectModel, source, parameters); - // set encoding + + // Set encoding this.format.put(OutputKeys.ENCODING, parameters.getParameter("xml-encoding", this.xmlDefaultEncoding)); - // setup instance variables + // Setup instance variables this.current_query_index = -1; this.current_state = SQLTransformer.STATE_OUTSIDE; - this.showNrOfRows = parameters.getParameterAsBoolean( SQLTransformer.MAGIC_NR_OF_ROWS, false ); - this.clobEncoding = parameters.getParameter(SQLTransformer.CLOB_ENCODING, ""); - if ( getLogger().isDebugEnabled() ) { - if ( this.parameters.getParameter( SQLTransformer.MAGIC_CONNECTION , null ) != null ) { - getLogger().debug( "CONNECTION: " + this.parameters.getParameter( SQLTransformer.MAGIC_CONNECTION , null ) ); + this.showNrOfRows = parameters.getParameterAsBoolean(SQLTransformer.MAGIC_NR_OF_ROWS, false); + this.clobEncoding = parameters.getParameter(SQLTransformer.CLOB_ENCODING, ""); + if (getLogger().isDebugEnabled()) { + if (this.parameters.getParameter(SQLTransformer.MAGIC_CONNECTION, null) != null) { + getLogger().debug("CONNECTION: " + this.parameters.getParameter(SQLTransformer.MAGIC_CONNECTION, null)); } else { - getLogger().debug( "DBURL: " + parameters.getParameter( SQLTransformer.MAGIC_DBURL, null ) ); - getLogger().debug( "USERNAME: " + parameters.getParameter( SQLTransformer.MAGIC_USERNAME, null ) ); + getLogger().debug("DBURL: " + parameters.getParameter(SQLTransformer.MAGIC_DBURL, null)); + getLogger().debug("USERNAME: " + parameters.getParameter(SQLTransformer.MAGIC_USERNAME, null)); } - getLogger().debug( "DOC-ELEMENT: " + parameters.getParameter( SQLTransformer.MAGIC_DOC_ELEMENT, "rowset" ) ); - getLogger().debug( "ROW-ELEMENT: " + parameters.getParameter( SQLTransformer.MAGIC_ROW_ELEMENT, "row" ) ); - getLogger().debug( "NS-URI: " + parameters.getParameter( SQLTransformer.MAGIC_NS_URI_ELEMENT, NAMESPACE ) ); - getLogger().debug( "NS-PREFIX: " + parameters.getParameter( SQLTransformer.MAGIC_NS_PREFIX_ELEMENT, "" ) ); - getLogger().debug( "CLOB_ENCODING: " + clobEncoding ); + getLogger().debug("DOC-ELEMENT: " + parameters.getParameter(SQLTransformer.MAGIC_DOC_ELEMENT, "rowset")); + getLogger().debug("ROW-ELEMENT: " + parameters.getParameter(SQLTransformer.MAGIC_ROW_ELEMENT, "row")); + getLogger().debug("NS-URI: " + parameters.getParameter(SQLTransformer.MAGIC_NS_URI_ELEMENT, NAMESPACE)); + getLogger().debug("NS-PREFIX: " + parameters.getParameter(SQLTransformer.MAGIC_NS_PREFIX_ELEMENT, "")); + getLogger().debug("CLOB_ENCODING: " + clobEncoding); } } /** * This will be the meat of SQLTransformer, where the query is run. */ - protected void executeQuery( int index ) + protected void executeQuery(int index) throws SAXException { - if ( getLogger().isDebugEnabled() ) { - getLogger().debug( "SQLTransformer executing query nr " + index ); + if (getLogger().isDebugEnabled()) { + getLogger().debug("SQLTransformer executing query nr " + index); } - this.outUri = getCurrentQuery().properties.getParameter( SQLTransformer.MAGIC_NS_URI_ELEMENT, NAMESPACE ); - this.outPrefix = getCurrentQuery().properties.getParameter( SQLTransformer.MAGIC_NS_PREFIX_ELEMENT, "" ); + this.outUri = getCurrentQuery().properties.getParameter(SQLTransformer.MAGIC_NS_URI_ELEMENT, NAMESPACE); + this.outPrefix = getCurrentQuery().properties.getParameter(SQLTransformer.MAGIC_NS_PREFIX_ELEMENT, ""); - if ( !"".equals( this.outUri ) ) { - super.startPrefixMapping( this.outPrefix, this.outUri ); + if (!"".equals(this.outUri)) { + super.startPrefixMapping(this.outPrefix, this.outUri); } AttributesImpl attr = new AttributesImpl(); - Query query = (Query) queries.elementAt( index ); + Query query = (Query) queries.elementAt(index); boolean query_failure = false; Connection conn = null; try { try { if (index == 0) { - if (this.conn == null) // The first top level execute-query + if (this.conn == null) { + // The first top level execute-query this.conn = query.getConnection(); + } // reuse the global connection for all top level queries conn = this.conn; - } - else // index > 0, sub queries are always executed in an own connection + } else { + // index > 0, sub queries are always executed in an own connection conn = query.getConnection(); + } query.setConnection(conn); query.execute(); - } catch ( SQLException e ) { - if (getLogger().isDebugEnabled()) { - getLogger().debug( "SQLTransformer:.executeQuery() query.execute failed ", e ); - } + } catch (SQLException e) { + getLogger().debug("executeQuery failed", e); AttributesImpl my_attr = new AttributesImpl(); - this.start( query.rowset_name, my_attr ); - this.start( MAGIC_ERROR, my_attr); - this.data( e.getMessage()); - this.end( MAGIC_ERROR ); - this.end( query.rowset_name ); + this.start(query.rowset_name, my_attr); + this.start(MAGIC_ERROR, my_attr); + this.data(e.getMessage()); + this.end(MAGIC_ERROR); + this.end(query.rowset_name); query_failure = true; } - if ( !query_failure ) { - if ( this.showNrOfRows ) { - attr.addAttribute( NAMESPACE, query.nr_of_rows, query.nr_of_rows, "CDATA", - String.valueOf( query.getNrOfRows() ) ); + if (!query_failure) { + if (this.showNrOfRows) { + attr.addAttribute(NAMESPACE, query.nr_of_rows, query.nr_of_rows, "CDATA", + String.valueOf(query.getNrOfRows())); } String name = query.getName(); - if ( name != null ) { - attr.addAttribute( NAMESPACE, query.name_attribute, query.name_attribute, "CDATA", - name ); + if (name != null) { + attr.addAttribute(NAMESPACE, query.name_attribute, query.name_attribute, "CDATA", + name); } - this.start( query.rowset_name, attr ); + this.start(query.rowset_name, attr); attr = new AttributesImpl(); - if ( !query.isStoredProcedure() ) { - while ( query.next() ) { - this.start( query.row_name, attr ); + if (!query.isStoredProcedure()) { + while (query.next()) { + this.start(query.row_name, attr); query.serializeRow(this.manager); - if ( index + 1 < queries.size() ) { - executeQuery( index + 1 ); + if (index + 1 < queries.size()) { + executeQuery(index + 1); } - this.end( query.row_name ); + this.end(query.row_name); } } else { query.serializeStoredProcedure(this.manager); } - this.end( query.rowset_name ); - } - } catch ( SQLException e ) { - if (getLogger().isDebugEnabled()) { - getLogger().debug( "SQLTransformer.executeQuery()", e ); + this.end(query.rowset_name); } - throw new SAXException( e ); + + } catch (SQLException e) { + getLogger().debug("SQLTransformer.executeQuery()", e); + throw new SAXException(e); } finally { try { query.close(); - if (index > 0) // close the connection used by a sub query + if (index > 0) { + // close the connection used by a sub query conn.close(); - } catch ( SQLException e ) { - getLogger().warn( "SQLTransformer: Could not close JDBC connection", e ); + } + } catch (SQLException e) { + getLogger().warn("Unable to close JDBC connection", e); } } - if ( !"".equals( this.outUri ) ) { - super.endPrefixMapping( this.outPrefix ); + + if (!"".equals(this.outUri)) { + super.endPrefixMapping(this.outPrefix); } } - protected static void throwIllegalStateException( String message ) { - throw new IllegalStateException( "SQLTransformer: " + message ); + protected static void throwIllegalStateException(String message) { + throw new IllegalStateException("SQLTransformer: " + message); } protected void startExecuteQueryElement() { - switch ( current_state ) { + switch (current_state) { case SQLTransformer.STATE_OUTSIDE: case SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT: current_query_index = queries.size(); - Query query = new Query( this, current_query_index ); - queries.addElement( query ); + Query query = new Query(this, current_query_index); + queries.addElement(query); current_state = SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT; break; + default: - throwIllegalStateException( "Not expecting a start execute query element" ); + throwIllegalStateException("Not expecting a start execute query element"); } } - protected void startValueElement( String name ) + protected void startValueElement(String name) throws SAXException { - switch ( current_state ) { + switch (current_state) { case SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT: this.stack.push(name); - this.startTextRecording(); + startTextRecording(); current_state = SQLTransformer.STATE_INSIDE_VALUE_ELEMENT; break; + default: - throwIllegalStateException( "Not expecting a start value element: " + - name ); + throwIllegalStateException("Not expecting a start value element: " + name); } } - protected void startQueryElement( Attributes attributes ) + protected void startQueryElement(Attributes attributes) throws SAXException { - switch ( current_state ) { + switch (current_state) { case SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT: - this.startSerializedXMLRecording(format); + startSerializedXMLRecording(format); Query q = getCurrentQuery(); current_state = SQLTransformer.STATE_INSIDE_QUERY_ELEMENT; - String isupdate = - attributes.getValue( "", SQLTransformer.MAGIC_UPDATE_ATTRIBUTE ); - if ( isupdate != null && !isupdate.equalsIgnoreCase( "false" ) ) - q.setUpdate( true ); - String isstoredprocedure = - attributes.getValue( "", SQLTransformer.MAGIC_STORED_PROCEDURE_ATTRIBUTE ); - if ( isstoredprocedure != null && !isstoredprocedure.equalsIgnoreCase( "false" ) ) - q.setStoredProcedure( true ); - String name = - attributes.getValue( "", SQLTransformer.MAGIC_NAME_ATTRIBUTE ); - if ( name != null ) { - q.setName( name ); + + String isUpdate = attributes.getValue("", SQLTransformer.MAGIC_UPDATE_ATTRIBUTE); + if (isUpdate != null && !isUpdate.equalsIgnoreCase("false")) { + q.setUpdate(true); + } + + String isProcedure = attributes.getValue("", SQLTransformer.MAGIC_STORED_PROCEDURE_ATTRIBUTE); + if (isProcedure != null && !isProcedure.equalsIgnoreCase("false")) { + q.setStoredProcedure(true); + } + + String name = attributes.getValue("", SQLTransformer.MAGIC_NAME_ATTRIBUTE); + if (name != null) { + q.setName(name); } break; + default: - throwIllegalStateException( "Not expecting a start query element" ); + throwIllegalStateException("Not expecting a start query element"); } } protected void endQueryElement() throws ProcessingException, SAXException { - switch ( current_state ) { + switch (current_state) { case SQLTransformer.STATE_INSIDE_QUERY_ELEMENT: - final String value = this.endSerializedXMLRecording(); - if ( value.length() > 0 ) { - this.getCurrentQuery().addQueryPart( value ); + final String value = endSerializedXMLRecording(); + if (value.length() > 0) { + getCurrentQuery().addQueryPart(value); if (getLogger().isDebugEnabled()) { - getLogger().debug( "QUERY IS \"" + value + "\"" ); + getLogger().debug("QUERY IS \"" + value + "\""); } } current_state = SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT; break; + default: - throwIllegalStateException( "Not expecting a stop query element" ); + throwIllegalStateException("Not expecting a stop query element"); } } protected void endValueElement() throws SAXException { - switch ( current_state ) { + switch (current_state) { case SQLTransformer.STATE_INSIDE_VALUE_ELEMENT: - final String name = (String)this.stack.pop(); - final String value = this.endTextRecording(); - this.getCurrentQuery().setParameter(name, value); + final String name = (String) this.stack.pop(); + final String value = endTextRecording(); + getCurrentQuery().setParameter(name, value); this.current_state = SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT; if (getLogger().isDebugEnabled()) { - getLogger().debug( "SETTING VALUE ELEMENT name {" + - name + "} value {" + value + "}" ); + getLogger().debug("SETTING VALUE ELEMENT name {" + name + "} value {" + value + "}"); } break; + default: - throwIllegalStateException( "Not expecting an end value element" ); + throwIllegalStateException("Not expecting an end value element"); } } protected void endExecuteQueryElement() throws SAXException { - switch ( current_state ) { + switch (current_state) { case SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT: - if ( current_query_index == 0 ) { - executeQuery( 0 ); + if (current_query_index == 0) { + executeQuery(0); queries.removeAllElements(); current_state = SQLTransformer.STATE_OUTSIDE; } else { @@ -481,51 +493,50 @@ current_state = SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT; } break; + default: - throwIllegalStateException( "Not expecting an end execute query element" ); + throwIllegalStateException("Not expecting an end execute query element"); } } protected void startAncestorValueElement( Attributes attributes ) throws ProcessingException, SAXException { - switch ( current_state ) { + switch (current_state) { case SQLTransformer.STATE_INSIDE_QUERY_ELEMENT: int level = 0; try { - level = Integer.parseInt( attributes.getValue( NAMESPACE, - SQLTransformer.MAGIC_ANCESTOR_VALUE_LEVEL_ATTRIBUTE ) ); - } catch ( Exception e ) { - if (getLogger().isDebugEnabled()) { - getLogger().debug( "SQLTransformer", e ); - } - throwIllegalStateException( "Ancestor value elements must have a " + - SQLTransformer.MAGIC_ANCESTOR_VALUE_LEVEL_ATTRIBUTE + " attribute" ); + level = Integer.parseInt(attributes.getValue(NAMESPACE, + SQLTransformer.MAGIC_ANCESTOR_VALUE_LEVEL_ATTRIBUTE)); + } catch (Exception e) { + getLogger().debug("SQLTransformer", e); + throwIllegalStateException("Ancestor value elements must have a " + + SQLTransformer.MAGIC_ANCESTOR_VALUE_LEVEL_ATTRIBUTE + " attribute"); + } + String name = attributes.getValue(NAMESPACE, + SQLTransformer.MAGIC_ANCESTOR_VALUE_NAME_ATTRIBUTE); + if (name == null) { + throwIllegalStateException("Ancestor value elements must have a " + + SQLTransformer.MAGIC_ANCESTOR_VALUE_NAME_ATTRIBUTE + " attribute"); } - String name = attributes.getValue( NAMESPACE, - SQLTransformer.MAGIC_ANCESTOR_VALUE_NAME_ATTRIBUTE ); - if ( name == null ) { - throwIllegalStateException( "Ancestor value elements must have a " + - SQLTransformer.MAGIC_ANCESTOR_VALUE_NAME_ATTRIBUTE + " attribute" ); - } - AncestorValue av = new AncestorValue( level, name ); + AncestorValue av = new AncestorValue(level, name); if (getLogger().isDebugEnabled()) { - getLogger().debug( "ANCESTOR VALUE " + level + " " + name ); + getLogger().debug("ANCESTOR VALUE " + level + " " + name); } final String value = this.endSerializedXMLRecording(); - if ( value.length() > 0 ) { - this.getCurrentQuery().addQueryPart( value ); + if (value.length() > 0) { + getCurrentQuery().addQueryPart(value); if (getLogger().isDebugEnabled()) { - getLogger().debug( "QUERY IS \"" + value + "\"" ); + getLogger().debug("QUERY IS \"" + value + "\""); } } - getCurrentQuery().addQueryPart( av ); - this.startSerializedXMLRecording(format); + getCurrentQuery().addQueryPart(av); + startSerializedXMLRecording(format); current_state = SQLTransformer.STATE_INSIDE_ANCESTOR_VALUE_ELEMENT; break; default: - throwIllegalStateException( "Not expecting a start ancestor value element" ); + throwIllegalStateException("Not expecting a start ancestor value element"); } } @@ -535,34 +546,36 @@ protected void startSubstituteValueElement( Attributes attributes ) throws ProcessingException, SAXException { - switch ( current_state ) { + switch (current_state) { case SQLTransformer.STATE_INSIDE_QUERY_ELEMENT: - String name = attributes.getValue( NAMESPACE, - SQLTransformer.MAGIC_SUBSTITUTE_VALUE_NAME_ATTRIBUTE ); - if ( name == null ) { - throwIllegalStateException( "Substitute value elements must have a " + - SQLTransformer.MAGIC_SUBSTITUTE_VALUE_NAME_ATTRIBUTE + " attribute" ); + String name = attributes.getValue(NAMESPACE, + SQLTransformer.MAGIC_SUBSTITUTE_VALUE_NAME_ATTRIBUTE); + if (name == null) { + throwIllegalStateException("Substitute value elements must have a " + + SQLTransformer.MAGIC_SUBSTITUTE_VALUE_NAME_ATTRIBUTE + " attribute"); } - String substitute = parameters.getParameter( name, null ); - //escape single quote + String substitute = parameters.getParameter(name, null); + // escape single quote substitute = StringEscapeUtils.escapeSql(substitute); if (getLogger().isDebugEnabled()) { - getLogger().debug( "SUBSTITUTE VALUE " + substitute ); + getLogger().debug("SUBSTITUTE VALUE " + substitute); } - final String value = this.endSerializedXMLRecording(); - if ( value.length() > 0 ) { - this.getCurrentQuery().addQueryPart( value ); + + final String value = endSerializedXMLRecording(); + if (value.length() > 0) { + getCurrentQuery().addQueryPart(value); if (getLogger().isDebugEnabled()) { - getLogger().debug( "QUERY IS \"" + value + "\"" ); + getLogger().debug("QUERY IS \"" + value + "\""); } } - this.getCurrentQuery().addQueryPart( substitute ); - this.startSerializedXMLRecording(format); + getCurrentQuery().addQueryPart(substitute); + startSerializedXMLRecording(format); current_state = SQLTransformer.STATE_INSIDE_SUBSTITUTE_VALUE_ELEMENT; break; + default: - throwIllegalStateException( "Not expecting a start substitute value element" ); + throwIllegalStateException("Not expecting a start substitute value element"); } } @@ -570,63 +583,67 @@ current_state = SQLTransformer.STATE_INSIDE_QUERY_ELEMENT; } - protected void startEscapeStringElement( Attributes attributes ) + protected void startEscapeStringElement(Attributes attributes) throws ProcessingException, SAXException { - switch ( current_state ) { + switch (current_state) { case SQLTransformer.STATE_INSIDE_QUERY_ELEMENT: - final String value = this.endSerializedXMLRecording(); - if ( value.length() > 0 ) { - this.getCurrentQuery().addQueryPart( value ); + final String value = endSerializedXMLRecording(); + if (value.length() > 0) { + getCurrentQuery().addQueryPart(value); if (getLogger().isDebugEnabled()) { - getLogger().debug( "QUERY IS \"" + value + "\"" ); + getLogger().debug("QUERY IS \"" + value + "\""); } } - this.startTextRecording(); + startTextRecording(); current_state = SQLTransformer.STATE_INSIDE_ESCAPE_STRING; break; + default: - throwIllegalStateException( "Not expecting a start escape-string element" ); + throwIllegalStateException("Not expecting a start escape-string element"); } } protected void endEscapeStringElement() throws SAXException { - switch ( current_state) { - case SQLTransformer.STATE_INSIDE_ESCAPE_STRING: - String value = this.endTextRecording(); - if ( value.length() > 0 ) { - value = StringEscapeUtils.escapeSql(value); - value = StringUtils.replace( value, "\\", "\\\\" ); - this.getCurrentQuery().addQueryPart( value ); - if (getLogger().isDebugEnabled()) { - getLogger().debug( "QUERY IS \"" + value + "\"" ); + switch (current_state) { + case SQLTransformer.STATE_INSIDE_ESCAPE_STRING: + String value = endTextRecording(); + if (value.length() > 0) { + value = StringEscapeUtils.escapeSql(value); + value = StringUtils.replace(value, "\\", "\\\\"); + getCurrentQuery().addQueryPart(value); + if (getLogger().isDebugEnabled()) { + getLogger().debug("QUERY IS \"" + value + "\""); + } } - } - this.startSerializedXMLRecording(format); - current_state = SQLTransformer.STATE_INSIDE_QUERY_ELEMENT; - break; - default: - throwIllegalStateException( "Not expecting a end escape-string element" ); + startSerializedXMLRecording(format); + current_state = SQLTransformer.STATE_INSIDE_QUERY_ELEMENT; + break; + + default: + throwIllegalStateException("Not expecting a end escape-string element"); } } - protected void startInParameterElement( Attributes attributes ) { - switch ( current_state ) { + protected void startInParameterElement(Attributes attributes) { + switch (current_state) { case SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT: - String nr = attributes.getValue( NAMESPACE, - SQLTransformer.MAGIC_IN_PARAMETER_NR_ATTRIBUTE ); - String value = attributes.getValue( NAMESPACE, - SQLTransformer.MAGIC_IN_PARAMETER_VALUE_ATTRIBUTE ); + String nr = attributes.getValue(NAMESPACE, + SQLTransformer.MAGIC_IN_PARAMETER_NR_ATTRIBUTE); + String value = attributes.getValue(NAMESPACE, + SQLTransformer.MAGIC_IN_PARAMETER_VALUE_ATTRIBUTE); if (getLogger().isDebugEnabled()) { - getLogger().debug( "IN PARAMETER NR " + nr + "; VALUE " + value ); + getLogger().debug("IN PARAMETER NR " + nr + "; VALUE " + value); } - int position = Integer.parseInt( nr ); - getCurrentQuery().setInParameter( position, value ); + + int position = Integer.parseInt(nr); + getCurrentQuery().setInParameter(position, value); current_state = SQLTransformer.STATE_INSIDE_IN_PARAMETER_ELEMENT; break; + default: - throwIllegalStateException( "Not expecting an in-parameter element" ); + throwIllegalStateException("Not expecting an in-parameter element"); } } @@ -634,24 +651,26 @@ current_state = SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT; } - protected void startOutParameterElement( Attributes attributes ) { - switch ( current_state ) { + protected void startOutParameterElement(Attributes attributes) { + switch (current_state) { case SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT: - String name = attributes.getValue( NAMESPACE, - SQLTransformer.MAGIC_OUT_PARAMETER_NAME_ATTRIBUTE ); - String nr = attributes.getValue( NAMESPACE, - SQLTransformer.MAGIC_OUT_PARAMETER_NR_ATTRIBUTE ); - String type = attributes.getValue( NAMESPACE, - SQLTransformer.MAGIC_OUT_PARAMETER_TYPE_ATTRIBUTE ); + String name = attributes.getValue(NAMESPACE, + SQLTransformer.MAGIC_OUT_PARAMETER_NAME_ATTRIBUTE); + String nr = attributes.getValue(NAMESPACE, + SQLTransformer.MAGIC_OUT_PARAMETER_NR_ATTRIBUTE); + String type = attributes.getValue(NAMESPACE, + SQLTransformer.MAGIC_OUT_PARAMETER_TYPE_ATTRIBUTE); if (getLogger().isDebugEnabled()) { - getLogger().debug( "OUT PARAMETER NAME" + name + ";NR " + nr + "; TYPE " + type ); + getLogger().debug("OUT PARAMETER NAME" + name + ";NR " + nr + "; TYPE " + type); } - int position = Integer.parseInt( nr ); - getCurrentQuery().setOutParameter( position, type, name ); + + int position = Integer.parseInt(nr); + getCurrentQuery().setOutParameter(position, type, name); current_state = SQLTransformer.STATE_INSIDE_OUT_PARAMETER_ELEMENT; break; + default: - throwIllegalStateException( "Not expecting an out-parameter element" ); + throwIllegalStateException("Not expecting an out-parameter element"); } } @@ -660,11 +679,11 @@ } protected Query getCurrentQuery() { - return (Query) queries.elementAt( current_query_index ); + return (Query) queries.elementAt(current_query_index); } - protected Query getQuery( int i ) { - return (Query) queries.elementAt( i ); + protected Query getQuery(int i) { + return (Query) queries.elementAt(i); } /** @@ -673,100 +692,101 @@ * @param prefix the prefix to qualify with * @return a namespace qualified name that is correct */ - protected String nsQualify( String name, String prefix ) { + protected String nsQualify(String name, String prefix) { if (StringUtils.isEmpty(name)) { return name; } + if (StringUtils.isNotEmpty(prefix)) { - return new StringBuffer( prefix ).append( ":" ).append( name ).toString(); - } else { - return name; + return prefix + ":" + name; } + + return name; } /** * ContentHandler method */ - public void setDocumentLocator( Locator locator ) { + public void setDocumentLocator(Locator locator) { if (getLogger().isDebugEnabled()) { - getLogger().debug( "PUBLIC ID: " + locator.getPublicId() ); - getLogger().debug( "SYSTEM ID: " + locator.getSystemId() ); + getLogger().debug("PUBLIC ID: " + locator.getPublicId()); + getLogger().debug("SYSTEM ID: " + locator.getSystemId()); } - super.setDocumentLocator( locator ); + super.setDocumentLocator(locator); } /** * ContentHandler method */ - public void startTransformingElement( String uri, String name, String raw, - Attributes attributes ) + public void startTransformingElement(String uri, String name, String raw, + Attributes attributes) throws ProcessingException, SAXException { if (getLogger().isDebugEnabled()) { - getLogger().debug( "RECEIVED START ELEMENT " + name ); + getLogger().debug("RECEIVED START ELEMENT " + name); } - if ( name.equals( SQLTransformer.MAGIC_EXECUTE_QUERY ) ) { - this.startExecuteQueryElement(); - } else if ( name.equals( SQLTransformer.MAGIC_QUERY ) ) { - this.startQueryElement( attributes ); - } else if ( name.equals( SQLTransformer.MAGIC_ANCESTOR_VALUE ) ) { - this.startAncestorValueElement( attributes ); - } else if ( name.equals( SQLTransformer.MAGIC_SUBSTITUTE_VALUE ) ) { - this.startSubstituteValueElement( attributes ); - } else if ( name.equals( SQLTransformer.MAGIC_IN_PARAMETER ) ) { - this.startInParameterElement( attributes ); - } else if ( name.equals( SQLTransformer.MAGIC_OUT_PARAMETER ) ) { - this.startOutParameterElement( attributes ); - } else if ( name.equals( SQLTransformer.MAGIC_ESCAPE_STRING ) ) { - this.startEscapeStringElement( attributes ); + if (name.equals(SQLTransformer.MAGIC_EXECUTE_QUERY)) { + startExecuteQueryElement(); + } else if (name.equals(SQLTransformer.MAGIC_QUERY)) { + startQueryElement(attributes); + } else if (name.equals(SQLTransformer.MAGIC_ANCESTOR_VALUE)) { + startAncestorValueElement(attributes); + } else if (name.equals(SQLTransformer.MAGIC_SUBSTITUTE_VALUE)) { + startSubstituteValueElement(attributes); + } else if (name.equals(SQLTransformer.MAGIC_IN_PARAMETER)) { + startInParameterElement(attributes); + } else if (name.equals(SQLTransformer.MAGIC_OUT_PARAMETER)) { + startOutParameterElement(attributes); + } else if (name.equals(SQLTransformer.MAGIC_ESCAPE_STRING)) { + startEscapeStringElement(attributes); } else { - this.startValueElement( name ); + startValueElement(name); } } /** * ContentHandler method */ - public void endTransformingElement( String uri, String name, - String raw ) + public void endTransformingElement(String uri, String name, + String raw) throws ProcessingException, IOException, SAXException { if (getLogger().isDebugEnabled()) { - getLogger().debug( "RECEIVED END ELEMENT " + name + "(" + uri + ")" ); + getLogger().debug("RECEIVED END ELEMENT " + name + "(" + uri + ")"); } - if ( name.equals( SQLTransformer.MAGIC_EXECUTE_QUERY ) ) { - this.endExecuteQueryElement(); - } else if ( name.equals( SQLTransformer.MAGIC_QUERY ) ) { - this.endQueryElement(); - } else if ( name.equals( SQLTransformer.MAGIC_ANCESTOR_VALUE ) ) { - this.endAncestorValueElement(); - } else if ( name.equals( SQLTransformer.MAGIC_SUBSTITUTE_VALUE ) ) { - this.endSubstituteValueElement(); - } else if ( name.equals( SQLTransformer.MAGIC_IN_PARAMETER ) ) { - this.endInParameterElement(); - } else if ( name.equals( SQLTransformer.MAGIC_OUT_PARAMETER ) ) { - this.endOutParameterElement(); - } else if ( name.equals( SQLTransformer.MAGIC_VALUE ) - || current_state == SQLTransformer.STATE_INSIDE_VALUE_ELEMENT ) { - this.endValueElement(); - } else if ( name.equals( SQLTransformer.MAGIC_ESCAPE_STRING ) ) { - this.endEscapeStringElement(); + if (name.equals(SQLTransformer.MAGIC_EXECUTE_QUERY)) { + endExecuteQueryElement(); + } else if (name.equals(SQLTransformer.MAGIC_QUERY)) { + endQueryElement(); + } else if (name.equals(SQLTransformer.MAGIC_ANCESTOR_VALUE)) { + endAncestorValueElement(); + } else if (name.equals(SQLTransformer.MAGIC_SUBSTITUTE_VALUE)) { + endSubstituteValueElement(); + } else if (name.equals(SQLTransformer.MAGIC_IN_PARAMETER)) { + endInParameterElement(); + } else if (name.equals(SQLTransformer.MAGIC_OUT_PARAMETER)) { + endOutParameterElement(); + } else if (name.equals(SQLTransformer.MAGIC_VALUE) + || current_state == SQLTransformer.STATE_INSIDE_VALUE_ELEMENT) { + endValueElement(); + } else if (name.equals(SQLTransformer.MAGIC_ESCAPE_STRING)) { + endEscapeStringElement(); } else { - super.endTransformingElement( uri, name, raw ); + super.endTransformingElement(uri, name, raw); } } /** * Helper method for generating SAX events */ - protected void start( String name, AttributesImpl attr ) + protected void start(String name, AttributesImpl attr) throws SAXException { try { - super.startTransformingElement( outUri, name, nsQualify( name, outPrefix ), attr ); - } catch (IOException ioe) { - throw new SAXException(ioe); - } catch (ProcessingException pe) { - throw new SAXException(pe); + super.startTransformingElement(outUri, name, nsQualify(name, outPrefix), attr); + } catch (IOException e) { + throw new SAXException(e); + } catch (ProcessingException e) { + throw new SAXException(e); } attr.clear(); } @@ -774,44 +794,42 @@ /** * Helper method for generating SAX events */ - protected void end( String name ) throws SAXException { + protected void end(String name) throws SAXException { try { - super.endTransformingElement( outUri, name, nsQualify( name, outPrefix ) ); - } catch (IOException ioe) { - throw new SAXException(ioe); - } catch (ProcessingException pe) { - throw new SAXException(pe); + super.endTransformingElement(outUri, name, nsQualify(name, outPrefix)); + } catch (IOException e) { + throw new SAXException(e); + } catch (ProcessingException e) { + throw new SAXException(e); } } /** * Helper method for generating SAX events */ - protected void data( String data ) throws SAXException { - if ( data != null ) { - super.characters( data.toCharArray(), 0, data.length() ); + protected void data(String data) throws SAXException { + if (data != null) { + super.characters(data.toCharArray(), 0, data.length()); } } - protected static String getStringValue( Object object ) { - if ( object instanceof byte[] ) { - return new String( (byte[]) object ); - } else if ( object instanceof char[] ) { - return new String( (char[]) object ); - } else if ( object != null ) { + protected static String getStringValue(Object object) { + if (object instanceof byte[]) { + return new String((byte[]) object); + } else if (object instanceof char[]) { + return new String((char[]) object); + } else if (object != null) { return object.toString(); - } else { - return ""; } + + return ""; } public final Logger getTheLogger() { return getLogger(); } - class Query { - /** Who's your daddy? **/ protected SQLTransformer transformer; @@ -835,18 +853,18 @@ protected CallableStatement cst; /** The results, of course **/ - protected ResultSet rs = null; + protected ResultSet rs; /** And the results' metadata **/ - protected ResultSetMetaData md = null; + protected ResultSetMetaData md; /** If this query is actually an update (insert, update, delete) **/ - protected boolean isupdate = false; + protected boolean isupdate; /** If this query is actually a stored procedure **/ - protected boolean isstoredprocedure = false; + protected boolean isstoredprocedure; - protected String name = null; + protected String name; /** If it is an update/etc, the return value (num rows modified) **/ protected int rv = -1; @@ -855,33 +873,34 @@ protected Vector query_parts = new Vector(); /** In parameters **/ - protected HashMap inParameters = null; + protected HashMap inParameters; /** Out parameters **/ - protected HashMap outParameters = null; + protected HashMap outParameters; /** Mapping out parameters - objectModel **/ - protected HashMap outParametersNames = null; + protected HashMap outParametersNames; /** Handling of case of column names in results */ protected String columnCase; - protected Query( SQLTransformer transformer, int query_index ) { + + protected Query(SQLTransformer transformer, int query_index) { this.transformer = transformer; this.query_index = query_index; this.properties = new Parameters(); - this.properties.merge( transformer.parameters ); + this.properties.merge(transformer.parameters); } - protected void setParameter( String name, String value ) { - properties.setParameter( name, value ); + protected void setParameter(String name, String value) { + properties.setParameter(name, value); } - protected void setUpdate( boolean flag ) { + protected void setUpdate(boolean flag) { isupdate = flag; } - protected void setStoredProcedure( boolean flag ) { + protected void setStoredProcedure(boolean flag) { isstoredprocedure = flag; } @@ -889,7 +908,7 @@ return isstoredprocedure; } - protected void setName( String name ) { + protected void setName(String name) { this.name = name; } @@ -897,130 +916,131 @@ return name; } - protected void setInParameter( int pos, String val ) { - if ( inParameters == null ) { + protected void setInParameter(int pos, String val) { + if (inParameters == null) { inParameters = new HashMap(); } - inParameters.put( new Integer( pos ), val ); + inParameters.put(new Integer(pos), val); } - protected void setOutParameter( int pos, String type, String name ) { - if ( outParameters == null ) { + protected void setOutParameter(int pos, String type, String name) { + if (outParameters == null) { outParameters = new HashMap(); outParametersNames = new HashMap(); } - outParameters.put( new Integer( pos ), type ); - outParametersNames.put( new Integer( pos ), name ); + outParameters.put(new Integer(pos), type); + outParametersNames.put(new Integer(pos), name); } - private void registerInParameters( PreparedStatement pst ) throws SQLException { - if ( inParameters == null ) + private void registerInParameters(PreparedStatement pst) throws SQLException { + if (inParameters == null) { return; - Iterator itInKeys = inParameters.keySet().iterator(); - Integer counter; - String value; - while ( itInKeys.hasNext() ) { - counter = (Integer) itInKeys.next(); - value = (String) inParameters.get( counter ); + } + + Iterator i = inParameters.keySet().iterator(); + while (i.hasNext()) { + Integer counter = (Integer) i.next(); + String value = (String) inParameters.get(counter); try { - pst.setObject( counter.intValue(), value ); - } catch ( SQLException e ) { - transformer.getTheLogger().error( "Caught a SQLException", e ); + pst.setObject(counter.intValue(), value); + } catch (SQLException e) { + getTheLogger().error("Caught a SQLException", e); throw e; } } } - private void registerOutParameters( CallableStatement cst ) throws SQLException { - if ( outParameters == null ) + private void registerOutParameters(CallableStatement cst) throws SQLException { + if (outParameters == null) { return; - Iterator itOutKeys = outParameters.keySet().iterator(); - Integer counter; - int index; - String type, className, fieldName; - Class clss; - Field fld; - while ( itOutKeys.hasNext() ) { - counter = (Integer) itOutKeys.next(); - type = (String) outParameters.get( counter ); - index = type.lastIndexOf( "." ); - if ( index > -1 ) { - className = type.substring( 0, index ); - fieldName = type.substring( index + 1, type.length() ); + } + + Iterator i = outParameters.keySet().iterator(); + while (i.hasNext()) { + Integer counter = (Integer) i.next(); + String type = (String) outParameters.get(counter); + int index = type.lastIndexOf("."); + + String className, fieldName; + if (index > -1) { + className = type.substring(0, index); + fieldName = type.substring(index + 1, type.length()); } else { - transformer.getTheLogger().error( "Invalid SQLType: " + type, null ); - throw new SQLException( "Invalid SQLType: " + type); + getTheLogger().error("Invalid SQLType: " + type, null); + throw new SQLException("Invalid SQLType: " + type); } try { - clss = Class.forName( className ); - fld = clss.getField( fieldName ); - cst.registerOutParameter( counter.intValue(), fld.getInt( fieldName ) ); - } catch ( Exception e ) { - //lots of different exceptions to catch - transformer.getTheLogger().error( "Invalid SQLType: " + - className + "." + fieldName, e ); + Class clss = Class.forName(className); + Field fld = clss.getField(fieldName); + cst.registerOutParameter(counter.intValue(), fld.getInt(fieldName)); + } catch (Exception e) { + // Lots of different exceptions to catch + getTheLogger().error("Invalid SQLType: " + className + "." + fieldName, e); } } } protected void setConnection(Connection conn) { this.conn = conn; - } + } - /** Get a Connection. Made this a separate method to separate the logic from the actual execution. */ + /** + * Get a Connection. Made this a separate method to separate the logic from the actual execution. + */ protected Connection getConnection() throws SQLException { Connection result = null; try { - final String connection = properties.getParameter( SQLTransformer.MAGIC_CONNECTION, null ); - if ( connection != null ) { + final String connection = properties.getParameter(SQLTransformer.MAGIC_CONNECTION, null); + if (connection != null) { if (this.transformer.dbSelector == null) { - transformer.getTheLogger().error( "No DBSelector found, could not use connection: " + connection); + getTheLogger().error("No DBSelector found, could not use connection: " + connection); } else { DataSourceComponent datasource = null; try { - datasource = (DataSourceComponent) this.transformer.dbSelector.select( connection ); - for ( int i = 0; i < transformer.connectAttempts && result == null; i++) { + datasource = (DataSourceComponent) this.transformer.dbSelector.select(connection); + for (int i = 0; i < transformer.connectAttempts && result == null; i++) { try { result = datasource.getConnection(); - } catch ( Exception e ) { + } catch (Exception e) { final long waittime = transformer.connectWaittime; - transformer.getTheLogger().debug( - "SQLTransformer$Query: could not acquire a Connection -- waiting " - + waittime + " ms to try again." ); + getTheLogger().debug("SQLTransformer$Query: could not acquire a Connection -- waiting " + + waittime + " ms to try again."); try { - Thread.sleep( waittime ); - } catch ( InterruptedException ie ) { + Thread.sleep(waittime); + } catch (InterruptedException ie) { } } } - } catch ( ServiceException cme ) { - transformer.getTheLogger().error( "Could not use connection: " + connection, cme ); + } catch (ServiceException cme) { + getTheLogger().error("Could not use connection: " + connection, cme); } finally { - if ( datasource != null ) this.transformer.dbSelector.release( datasource ); + if (datasource != null) { + this.transformer.dbSelector.release(datasource); + } } if (result == null) { throw new SQLException("Failed to obtain connection. Made " - + transformer.connectAttempts + " attempts with " - + transformer.connectWaittime + "ms interval"); + + transformer.connectAttempts + " attempts with " + + transformer.connectWaittime + "ms interval"); } } } else { - final String dburl = properties.getParameter( SQLTransformer.MAGIC_DBURL, null ); - final String username = properties.getParameter( SQLTransformer.MAGIC_USERNAME, null ); - final String password = properties.getParameter( SQLTransformer.MAGIC_PASSWORD, null ); + final String dburl = properties.getParameter(SQLTransformer.MAGIC_DBURL, null); + final String username = properties.getParameter(SQLTransformer.MAGIC_USERNAME, null); + final String password = properties.getParameter(SQLTransformer.MAGIC_PASSWORD, null); - if ( username == null || password == null ) { - result = DriverManager.getConnection( dburl ); + if (username == null || password == null) { + result = DriverManager.getConnection(dburl); } else { - result = DriverManager.getConnection( dburl, username, - password ); + result = DriverManager.getConnection(dburl, username, + password); } } - } catch ( SQLException e ) { - transformer.getTheLogger().error( "Caught a SQLException", e ); + } catch (SQLException e) { + getTheLogger().error("Caught a SQLException", e); throw e; } @@ -1032,8 +1052,8 @@ throw new SQLException("A connection must be set before executing a query"); } - this.rowset_name = properties.getParameter( SQLTransformer.MAGIC_DOC_ELEMENT, "rowset" ); - this.row_name = properties.getParameter( SQLTransformer.MAGIC_ROW_ELEMENT, "row" ); + this.rowset_name = properties.getParameter(SQLTransformer.MAGIC_DOC_ELEMENT, "rowset"); + this.row_name = properties.getParameter(SQLTransformer.MAGIC_ROW_ELEMENT, "row"); this.columnCase = properties.getParameter(SQLTransformer.MAGIC_COLUMN_CASE, "lowercase"); StringBuffer sb = new StringBuffer(); @@ -1051,46 +1071,46 @@ String query = StringUtils.replace(sb.toString().trim(), "\r", " ", -1); // Test, if this is an update (by comparing with select) - if ( !isstoredprocedure && !isupdate) { - if (query.length() > 6 && !query.substring(0,6).equalsIgnoreCase("SELECT")) { + if (!isstoredprocedure && !isupdate) { + if (query.length() > 6 && !query.substring(0, 6).equalsIgnoreCase("SELECT")) { isupdate = true; } } - if (transformer.getTheLogger().isDebugEnabled()) { - transformer.getTheLogger().debug( "EXECUTING " + query ); + if (getTheLogger().isDebugEnabled()) { + getTheLogger().debug("EXECUTING " + query); } try { - if ( !isstoredprocedure ) { - if ( oldDriver ) { - pst = conn.prepareStatement( query ); + if (!isstoredprocedure) { + if (oldDriver) { + pst = conn.prepareStatement(query); } else { - pst = conn.prepareStatement( query, - ResultSet.TYPE_SCROLL_INSENSITIVE, - ResultSet.CONCUR_READ_ONLY ); + pst = conn.prepareStatement(query, + ResultSet.TYPE_SCROLL_INSENSITIVE, + ResultSet.CONCUR_READ_ONLY); } } else { - if ( oldDriver ) { - cst = conn.prepareCall( query ); + if (oldDriver) { + cst = conn.prepareCall(query); } else { - cst = conn.prepareCall( query, - ResultSet.TYPE_SCROLL_INSENSITIVE, - ResultSet.CONCUR_READ_ONLY ); + cst = conn.prepareCall(query, + ResultSet.TYPE_SCROLL_INSENSITIVE, + ResultSet.CONCUR_READ_ONLY); } - registerOutParameters( cst ); + registerOutParameters(cst); pst = cst; } - registerInParameters( pst ); + registerInParameters(pst); boolean result = pst.execute(); - if ( result ) { + if (result) { rs = pst.getResultSet(); md = rs.getMetaData(); } else { rv = pst.getUpdateCount(); } - } catch ( SQLException e ) { - transformer.getTheLogger().error( "Caught a SQLException", e ); + } catch (SQLException e) { + getTheLogger().error("Caught a SQLException", e); throw e; } finally { // Not closing the connection here fixes bug 12173! @@ -1101,129 +1121,139 @@ protected int getNrOfRows() throws SQLException { int nr = 0; - if ( rs != null ) { - if ( oldDriver ) { + if (rs != null) { + if (oldDriver) { nr = -1; } else { try { rs.last(); nr = rs.getRow(); rs.beforeFirst(); - } catch ( NullPointerException e ) { - // A NullPointerException here crashes a whole lot of C2 -- catching it so it won't do any harm for now, but seems like it should be solved seriously - getTheLogger().error( "NPE while getting the nr of rows", e ); + } catch (NullPointerException e) { + // A NullPointerException here crashes a whole lot of C2 -- + // catching it so it won't do any harm for now, but seems like it should be solved seriously + getTheLogger().error("NPE while getting the nr of rows", e); } } } else { - if ( outParameters != null ) { + if (outParameters != null) { nr = outParameters.size(); } } return nr; } - protected String getColumnValue( int i ) throws SQLException { - int numberOfChar = 1024; + protected String getColumnValue(int i) throws SQLException { + int numberOfChar = 1024; String retval; - if (rs.getMetaData().getColumnType(i) == java.sql.Types.DOUBLE) { - retval = SQLTransformer.getStringValue( rs.getBigDecimal( i ) ); - } else if (rs.getMetaData().getColumnType(i) == java.sql.Types.CLOB) { - Clob clob = rs.getClob(i); - InputStream inputStream = clob.getAsciiStream(); - byte[] readByte = new byte[numberOfChar]; - StringBuffer buffer = new StringBuffer(); - try { - while(inputStream.read(readByte) > -1) { - String string = new String(readByte, clobEncoding); - buffer.append(string); - } - } catch(java.io.IOException ioException) { - throw new SQLException("Error reading stream from CLOB"); - } - retval = buffer.toString(); - } else { - retval = SQLTransformer.getStringValue( rs.getObject( i ) ); - } + if (rs.getMetaData().getColumnType(i) == java.sql.Types.DOUBLE) { + retval = SQLTransformer.getStringValue(rs.getBigDecimal(i)); + } else if (rs.getMetaData().getColumnType(i) == java.sql.Types.CLOB) { + Clob clob = rs.getClob(i); + InputStream inputStream = clob.getAsciiStream(); + byte[] readByte = new byte[numberOfChar]; + StringBuffer buffer = new StringBuffer(); + try { + while (inputStream.read(readByte) > -1) { + String string = new String(readByte, clobEncoding); + buffer.append(string); + } + } catch (IOException e) { + throw new SQLException("Error reading stream from CLOB"); + } + retval = buffer.toString(); + } else { + retval = SQLTransformer.getStringValue(rs.getObject(i)); + } return retval; } - //fix not applied here because there is no metadata from Name -> number and coltype - //for a given "name" versus number. That being said this shouldn't be an issue - //as this function is only called for ancestor lookups. - protected String getColumnValue( String name ) throws SQLException { - String retval = SQLTransformer.getStringValue( rs.getObject( name ) ); -// if (rs.getMetaData().getColumnType( name ) == 8) -// retval = transformer.getStringValue( rs.getBigDecimal( name ) ); + // fix not applied here because there is no metadata from Name -> number and coltype + // for a given "name" versus number. That being said this shouldn't be an issue + // as this function is only called for ancestor lookups. + protected String getColumnValue(String name) throws SQLException { + String retval = SQLTransformer.getStringValue(rs.getObject(name)); + // if (rs.getMetaData().getColumnType( name ) == 8) + // retval = transformer.getStringValue( rs.getBigDecimal( name ) ); return retval; } protected boolean next() throws SQLException { // if rv is not -1, then an SQL insert, update, etc, has // happened (see JDBC docs - return codes for executeUpdate) - if ( rv != -1 ) + if (rv != -1) { return false; + } + try { - if ( rs == null || !rs.next() ) { + if (rs == null || !rs.next()) { //close(); return false; } - } catch ( NullPointerException e ) { - getTheLogger().debug( "NullPointerException, returning false.", e ); + } catch (NullPointerException e) { + getTheLogger().debug("NullPointerException, returning false.", e); return false; } + return true; } protected void close() throws SQLException { try { - if ( rs != null ) + if (rs != null) { try { - //getTheLogger().debug("Trying to close resultset "+rs.toString()); rs.close(); - rs = null; // This prevents us from using the resultset again. - //250getTheLogger().debug("Really closed the resultset now."); - } catch ( NullPointerException e ) { - getTheLogger().debug( "NullPointer while closing the resultset.", e ); + // This prevents us from using the resultset again. + rs = null; + } catch (NullPointerException e) { + getTheLogger().debug("NullPointer while closing the resultset.", e); } - - if ( pst != null && pst != cst ) + } + + if (pst != null && pst != cst) { pst.close(); - pst = null; // Prevent using pst again. - if ( cst != null ) + } + + // Prevent using pst again. + pst = null; + + if (cst != null) { cst.close(); - cst = null; // Prevent using cst again. + } + // Prevent using cst again. + cst = null; } finally { conn = null; } } - protected void addQueryPart( Object object ) { - query_parts.addElement( object ); + protected void addQueryPart(Object object) { + query_parts.addElement(object); } protected void serializeData(ServiceManager manager, String value) - throws SQLException, SAXException { + throws SQLException, SAXException { if (value != null) { value = value.trim(); // Could this be XML ? - if ( value.length() > 0 && value.charAt(0) == '<') { + if (value.length() > 0 && value.charAt(0) == '<') { try { - String stripped = value; + String stripped = value; // Strip off the XML Declaration if there is one! - if( stripped.startsWith( "<?xml " ) ) { - stripped = stripped.substring( stripped.indexOf( "?>" ) + 2 ); + if (stripped.startsWith("<?xml ")) { + stripped = stripped.substring(stripped.indexOf("?>") + 2); } if (transformer.parser == null) { - transformer.parser = (SAXParser)manager.lookup(SAXParser.ROLE); + transformer.parser = (SAXParser) manager.lookup(SAXParser.ROLE); } if (transformer.compiler == null) { - transformer.compiler = (XMLSerializer)manager.lookup(XMLSerializer.ROLE); + transformer.compiler = (XMLSerializer) manager.lookup(XMLSerializer.ROLE); } if (transformer.interpreter == null) { - transformer.interpreter = (XMLDeserializer)manager.lookup(XMLDeserializer.ROLE); + transformer.interpreter = (XMLDeserializer) manager.lookup(XMLDeserializer.ROLE); } transformer.parser.parse(new InputSource(new StringReader("<root>" + stripped + "</root>")), transformer.compiler); @@ -1232,7 +1262,6 @@ filter.setIgnoreRootElement(true); transformer.interpreter.setConsumer(filter); - transformer.interpreter.deserialize(transformer.compiler.getSAXFragment()); } catch (Exception local) { // FIXME: bad coding "catch(Exception)" @@ -1240,7 +1269,7 @@ transformer.data(value); } finally { // otherwise serializer won't be reset - if (transformer.compiler!=null){ + if (transformer.compiler != null) { manager.release(transformer.compiler); transformer.compiler = null; } @@ -1254,67 +1283,74 @@ protected void serializeRow(ServiceManager manager) throws SQLException, SAXException { AttributesImpl attr = new AttributesImpl(); - if ( !isupdate && !isstoredprocedure ) { - for ( int i = 1; i <= md.getColumnCount(); i++ ) { + if (!isupdate && !isstoredprocedure) { + for (int i = 1; i <= md.getColumnCount(); i++) { String columnName = getColumnName(md.getColumnName(i)); transformer.start(columnName, attr); this.serializeData(manager, getColumnValue(i)); transformer.end(columnName); } - } else if ( isupdate && !isstoredprocedure ) { - transformer.start( "returncode", attr ); - this.serializeData(manager, String.valueOf( rv ) ); - transformer.end( "returncode" ); + } else if (isupdate && !isstoredprocedure) { + transformer.start("returncode", attr); + this.serializeData(manager, String.valueOf(rv)); + transformer.end("returncode"); rv = -1; // we only want the return code shown once. } } protected void serializeStoredProcedure(ServiceManager manager) throws SQLException, SAXException { - if ( outParametersNames == null || cst == null ) + if (outParametersNames == null || cst == null) { return; - //make sure output follows order as parameter order in stored procedure - Iterator itOutKeys = ( new TreeMap( outParameters ) ).keySet().iterator(); - Integer counter; + } + + // make sure output follows order as parameter order in stored procedure + Iterator itOutKeys = new TreeMap(outParameters).keySet().iterator(); AttributesImpl attr = new AttributesImpl(); try { - while ( itOutKeys.hasNext() ) { - counter = (Integer) itOutKeys.next(); + while (itOutKeys.hasNext()) { + Integer counter = (Integer) itOutKeys.next(); try { - if ( cst == null ) getTheLogger().debug( "SQLTransformer: cst is null" ); - if ( counter == null ) getTheLogger().debug( " SQLTransformer: counter is null" ); - Object obj = cst.getObject( counter.intValue() ); - if ( !( obj instanceof ResultSet ) ) { - transformer.start( (String) outParametersNames.get( counter ), attr ); - this.serializeData(manager, SQLTransformer.getStringValue( obj ) ); - transformer.end( (String) outParametersNames.get( counter ) ); + if (cst == null) { + getTheLogger().debug("SQLTransformer: cst is null"); + } + + if (counter == null) { + getTheLogger().debug("SQLTransformer: counter is null"); + } + + Object obj = cst.getObject(counter.intValue()); + if (!(obj instanceof ResultSet)) { + transformer.start((String) outParametersNames.get(counter), attr); + serializeData(manager, SQLTransformer.getStringValue(obj)); + transformer.end((String) outParametersNames.get(counter)); } else { ResultSet rs = (ResultSet) obj; try { - transformer.start( (String) outParametersNames.get( counter ), attr ); + transformer.start((String) outParametersNames.get(counter), attr); ResultSetMetaData md = rs.getMetaData(); - while ( rs.next() ) { - transformer.start( this.row_name, attr ); - for ( int i = 1; i <= md.getColumnCount(); i++ ) { + while (rs.next()) { + transformer.start(this.row_name, attr); + for (int i = 1; i <= md.getColumnCount(); i++) { String columnName = getColumnName(md.getColumnName(i)); transformer.start(columnName, attr); - if ( md.getColumnType( i ) == 8 ) { //prevent nasty exponent notation - this.serializeData(manager, SQLTransformer.getStringValue( rs.getBigDecimal( i ) )); + if (md.getColumnType(i) == 8) { //prevent nasty exponent notation + serializeData(manager, SQLTransformer.getStringValue(rs.getBigDecimal(i))); } else { - this.serializeData(manager, SQLTransformer.getStringValue( rs.getObject( i ) )); + serializeData(manager, SQLTransformer.getStringValue(rs.getObject(i))); } transformer.end(columnName); } - transformer.end( this.row_name ); + transformer.end(this.row_name); } } finally { rs.close(); rs = null; } - transformer.end( (String) outParametersNames.get( counter ) ); + transformer.end((String) outParametersNames.get(counter)); } - } catch ( SQLException e ) { - transformer.getTheLogger().error( "Caught a SQLException", e ); + } catch (SQLException e) { + getTheLogger().error("Caught a SQLException", e); throw e; } } @@ -1342,7 +1378,7 @@ protected int level; protected String name; - protected AncestorValue( int level, String name ) { + protected AncestorValue(int level, String name) { this.level = level; this.name = name; }