Warrell,

So what you are saying is that I can not do SQL exception (or error) handling inside that SQL transformer
and have to do it from outside (and after the transformer itself).
That is a pity, because in the same sql transformer file I have lots of column validations
which call it to show user errors, so it would be very convenient.

OK, so here is my new transformer. Please tell me if it looks OK to you.
Have inserted it right after SQL Trasformer [before presentation screen.]
Still doesn't work.
<?xml version='1.0' encoding='UTF-8'?>            <!-- Created to handle SQLExceptions during DB insert or update -->
<xsl:stylesheet version='1.0'    
        xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
        xmlns:sql="http://apache.org/cocoon/SQL/2.0">

<xsl:output method='xml' indent='yes'/>


<xsl:template match="/">
    <page>       
        <content>
            <xsl:apply-templates/>
        </content>
    </page>
</xsl:template>


<xsl:template match='mainTemplate'>
    <xsl:if test="count(//sql:error[1]) > 0">  <!-- Do SQLExceptions check -->
        <error>       
            <message>ERROR: Can not insert/update the record into the database (not recorded)</message>           
        </error>       
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

 
Thank you,
Oleg.


----- Original Message ----
From: [EMAIL PROTECTED]
To: [email protected]
Sent: Monday, March 27, 2006 10:19:10 AM
Subject: Re: Handling SQL Transformer exceptions


Hi Oleg,

Thanks for clearing that up. Have you put that error-handling code in the stage of the pipeline that follows the SQL transform? The XML document after your SQLTrnsformer stage will consist of Error elements so you will have to provide templates for them if you want to handle them. That is, if the XSL that outputs the <sql:query> elements is in query.xsl then the error handling should be in process.xsl

        <map:transform src=""/>
        <map:transform type="sql">
                <map:parameter name="use-connection" value="db"/>
        </map:transform>
        <map:transform src=""/>

Of course, you will also provide templates for the <sql:row> elements generated when there are no errors!

Hope this helps
Warrell Harries | IT Services, West Sussex County Council | Location: Northleigh House
Office: +44 (0) 1243-756837
| Email: [EMAIL PROTECTED]




Oleg Konovalov <[EMAIL PROTECTED]>

27/03/2006 15:59

Please respond to
[email protected]

To
[email protected]
cc
Subject
Re: Handling SQL Transformer exceptions





Warrell,

>I don't think that you can call this a 'bug in Cocoon'!

I meant, a bug in my app (DB problem is not shown to the user and not handled, just fails to insert and let user guess what happened).
I use Cocoon 2.0.4, not 2.1. Would it mean any difference for handling SQLTransformer exceptions ?

 
Thank you,
Oleg.



----- Original Message ----
From: [EMAIL PROTECTED]
To: [email protected]
Sent: Monday, March 27, 2006 8:54:35 AM
Subject: Re: Handling SQL Transformer exceptions


Hi Oleg,


I don't think that you can call this a 'bug in Cocoon'! Do you really mean a Cocoon 2.0 version or just generally version 2 of Cocoon?


It seems you are building a generic DB query tool so I suppose the following is not appropriate but I would argue that this is not the desired way to use the SQLTransformer since the overall Application design should prevent any constraints ever being violated. In my view, such Constraints are fundamental rules that are there to define the parameters of the system and not just as a last line of defence or for the creation of indexes. However,  to handle such Processing Exceptions in Cocoon you should take a look at :-


http://cocoon.apache.org/2.1/userdocs/concepts/errorhandling.html

if, of course, you are using Cocoon 2.1.


Hope this helps


Warrell
Warrell Harries | IT Services, West Sussex County Council | Location: Northleigh House
Office: +44 (0) 1243-756837
| Email: [EMAIL PROTECTED]




Oleg Konovalov <[EMAIL PROTECTED]>

27/03/2006 14:26

Please respond to
[email protected]


To
cocoon list <[email protected]>
cc
Subject
Handling SQL Transformer exceptions







Hi,

I am trying to fix the bug in the Cocoon 2.0 application:
- it is not handling exceptions from SQLTransformer in the GUI,
need to show user an error that Insert failed.

Here is an exception we often get:
ERROR   (2006-03-24) 15:29.31:855   [sitemap.transformer.sql] (/myapp) Thread-11/SQLTransformer$Query: Caught a SQLException
java.sql.SQLException: ORA-00001: unique constraint (MBRDEV.UKC_ASSOC_COT) violated
  at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)

Here is a simplified version of my XSL:
<xsl:template match="/">
  <page>
      <title><xsl:value-of select='$table'/><xsl:text> modification</xsl:text></title>
      <content>
          <xsl:apply-templates/>
      </content>
  </page>
</xsl:template>

<xsl:template name='doInsert'>
  <xsl:param name='row'/>
  <xsl:param name='table'/>
 
  <sql:execute-query>
      <sql:query>
          <xsl:text>insert into </xsl:text>
          <xsl:value-of select='$table'/>
          .........
      </sql:query>
  </sql:execute-query>
 
  <!-- This is the code I added to handle that exception which is supposed to show it to the user -->
  <xsl:if test="count(//sql:error[1]) > 0">  
      <xsl:call-template name='buildErrorMessage'>
          <xsl:with-param name='row' select='.'/>
          <xsl:with-param name='message'><xsl:text>ERROR: Can not insert the row into the database (not recorded)</xsl:text></xsl:with-param>
      </xsl:call-template>            
  </xsl:if>
 
</xsl:template>
....

Am I doing it right and in correct place ("This is the code...") ?

For some reason it doesn't seem to work (maybe that condition is false: "count(//sql:error[1]) > 0"  ?)


Sorry for the newbie question. Any help is very appreciated.


Thank you in advance,
Oleg.




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--
This e-mail and any attachments are confidential and intended solely for the persons addressed. If it has come to you in error please reply to advise us but you should not read it, copy it, show it to anyone else nor make any other use of its content.   West Sussex County Council takes steps to ensure e-mails and attachments are virus-free but you should carry out your own checks before opening any attachment.


--
This e-mail and any attachments are confidential and intended solely for the persons addressed. If it has come to you in error please reply to advise us but you should not read it, copy it, show it to anyone else nor make any other use of its content.   West Sussex County Council takes steps to ensure e-mails and attachments are virus-free but you should carry out your own checks before opening any attachment.

Reply via email to