Throwing an exception from XSLT

Just wanted to share a finding with the Oracle XDB community and possibly suggest an enhancement to the xdb product development team (care of MDRAKE).
I had a scenario where I wanted to throw an exception from the XSLT.
A little Googling revealed this helpful post:
http://weblogs.asp.net/george_v_reilly/archive/2006/03/01/439402.aspx
...so I gave it a shot.
In my XSLT, I have a <xsl:choose> block with the following <xsl:otherwise> block:
<xsl:otherwise>
    <xsl:message terminate="yes">Unknown Document Type</xsl:message>                          
</xsl:otherwise>I used a stub test to run this through, giving it a file which would exercise the exception:
select xmltype(bfilename('XML_RESOURCES', 'data.xml'),0).transform(xmltype(bfilename('XML_RESOURCES', 'sanitize_xml.dev.xsl'),0))
from dual;..and to my 'joy', I did get an exception:
ORA-30998: transformation error: execution of compiled XSLT on XML DOM failedHmm...would of been nicer to get something like what Eclipse/Xalan pops out:
file:/H:/eclipse_indigo_workspace/XSLT/sanitize_xml.xsl; Line #28; Column #59; Unknown Document Type
(Location of error unknown)Stylesheet directed termination...i.e. my custom error message "Unknown Document Type" isn't output by Oracle.
Just to be safe, I tried a file which would NOT exercise this xsl:otherwise block and it did run through OK.
So, could XDB report a better error?
Thoughts?

SQL> VAR XSL VARCHAR2(4000)
SQL> --
SQL> begin
  2    :XSL :=
  3  '<?xml version="1.0" encoding="UTF-8"?>
  4  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  5     <xsl:output method="xml" indent="yes"/>
  6     <xsl:template match="/">
  7             <Result>
  8                     <xsl:choose>
  9                             <xsl:when test="Input=''1''">
10                                     <Output>1</Output>
11                             </xsl:when>
12                             <xsl:when test="Input=''2''">
13                                     <xsl:message>The value is 2</xsl:message>
14                                     <Output>2</Output>
15                             </xsl:when>
16                             <xsl:when test="Input=''3''">
17                                     <xsl:message terminate="no">The value is 3</xsl:message>
18                                     <Output>3</Output>
19                             </xsl:when>
20                             <xsl:otherwise>
21                                     <xsl:message terminate="yes">Invalid value</xsl:message>
22                                     <Output>Bad Input</Output>
23                             </xsl:otherwise>
24                     </xsl:choose>
25             </Result>
26     </xsl:template>
27  </xsl:stylesheet>';
28  end;
29  /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.00
SQL> select XMLTRANSFORM(XMLTYPE('<Input>1</Input>'),XMLTYPE(:XSL))
  2    from dual
  3  /
<?xml version="1.0" encoding="WINDOWS-1252"?>
<Result>
  <Output>1</Output>
</Re
Elapsed: 00:00:00.01
SQL> select XMLTRANSFORM(XMLTYPE('<Input>2</Input>'),XMLTYPE(:XSL))
  2    from dual
  3  /
<?xml version="1.0" encoding="WINDOWS-1252"?>
<Result>
  <Output>2</Output>
</Re
Elapsed: 00:00:00.00
SQL> select XMLTRANSFORM(XMLTYPE('<Input>3</Input>'),XMLTYPE(:XSL))
  2    from dual
  3  /
<?xml version="1.0" encoding="WINDOWS-1252"?>
<Result>
  <Output>3</Output>
</Re
Elapsed: 00:00:00.01
SQL> select XMLTRANSFORM(XMLTYPE('<Input>4</Input>'),XMLTYPE(:XSL))
  2    from dual
  3  /
ERROR:
ORA-30998: transformation error: execution of compiled XSLT on XML DOM failed
no rows selected
Elapsed: 00:00:00.01
SQL>
SQL>The actuall error is not unreasonalbe. The Execution did fail beacuse you terminated it.. Contacting Oralce Support may be a little excessive...
Now with respect to message the question is where...
We 'could' output into the same buffer as is used by DBMS_OUTPUT, but that has limits in terms of the amount of output that can be generated.
We could write it to the trace file, but that may be difficulat for a developer to get to
We could write it to a log file in the XDB repository, but where and how to name it...
We could another parameter to XMLTransform, which would be a Message Buffer
All of these are in effect enhancements..
BTW I checked with XML Spy and they seem to ignore message too, so I'm wondering how widely used this is...
We cannot add it to the output of the XSL since XMLTransform defines the output of the XML to be well formed XML, and adding a random set of text nodes would viloate that rule..

Similar Messages

  • Is it possible to throw an exception from a handler chain with JAXWS???

    I know I cannot throw directly an exception from the handler cause my handler extends SOAPHandler and the method handlerMessage cannot throw exceptions. The problem is that I would like to validate some authorization and if the client doesn't have the appropriate rights, I would like to throw an exception from the handler without calling the web service itself, so the client would receive a valid soap response from the server. Is it possible?? Is there another mechanism that I can use to do that??
    Thanks a lot
    Korg

    You can throw a ProtocolException or RuntimeException from handleMessage().
    If you throw ProtocolException, HandleFault() is called on previously invoked handlers.
    If you throw a RuntimeException, handleFault() or handleMessage() is not called on previously invoked handlers, and the Exception is converted to Fault message and dispatched.

  • Is it possible to throw an exception from run method of a thread?

    Is it possible to throw an exception from "run method of a thread"(implemented as runnable implementation)?
    Is it advisable to do so?

    Is it possible to throw an exception from "run method
    of a thread"(implemented as runnable
    implementation)?Yes, an unchecked one. Runtime exceptions.
    Is it advisable to do so?If you mess up it happens automatically. But basically: no.

  • Getting the name of the page that throws an exception from an error page

    How can I get the name of the page that throws an
    error exception from an error page?.
    Thanks.

    In each of your jsp pages, u should set the name of page in the request object. e.g.
    In jsp page called main.jsp you should do request.setAttribute("pageName","main.jsp");
    Then in error page you can get the name like
    String pageInError = (String) request.getAttribute("pageName");
    I hope that answers your question.
    thx

  • Throwing Runtime Exceptions from BPM. How?

    Hi !
    I want to make appear a red flag in the SXMB_MONI as a result of a custom condition inside a BPM. I tried with the control step, but it makes no "red flag".
    Should I make a transform step between 2 dummy message types with a UDF that throws the runtime exception there?? is there another way ?? We want a red flag as a result of a expired deadline while waiting a file adapter transport acknowledgement.
    Thanks !!
    Matias.

    Matias,
    As you said before you want the BPM to be errored out if it reach the deadline, am I right. In control step if u say cancel process it equivalent to logically deleting the work items, so obviously you will get an succesfull message. What I suggest you to do is in  Deadline branch - control branch select throw exception. The exception name has to be defined in Block level. So if you throw an exception it will look for the exception branch in the same block level if not the higher(super)block level, if it couldn't find the exception branch it will run out to error. Actually the exception branch is used to catch that exception and continue the rest of the process, so i think there is no need for defining the exception branch itself.
    Hope it helps you!!!
    Best regards,
    raj.

  • Throw an exception from one class to another?

    I have an applet that analyzes different sorting algorithms. Each sorting algorithm is a seperate class. The applet passes the sorting algorithm class an unsorted array, the sorting algorithm sorts the array, and returns the sorted array to the applet. Sometimes the sorting class will generate a stack overflow exception. How do i catch the exception in the sorting class and throw it to the applet, which can then display a dialog box. In the sorting class I have setup a try/catch block that throws the exception and in the class decleration it says "throws Exception". The code in the applet that executes the sort class is inside of at try block as well. When the prog generates an exception in the sorting class it wont throw and be caught by my applet. How can this be done?
    Thanks,
    Dave

    StackOverflowException is not descendand of Exception class:
    java.lang.Object
      |
      +--java.lang.Throwable
            |
            +--java.lang.Error
                  |
                  +--java.lang.VirtualMachineError
                        |
                        +--java.lang.StackOverflowErrorSo if you like to catch it dont declare method to throw Exception (Error class is unchecked exception so it doesn't need to be declared to be thrown). Just try to catch StackOverflow or Throwable. Good luck !

  • How do i throw BPEL exception from java embedded activity

    Hello everybody,
    i want to use some embedded java code in my BPEL process (bpelx:exec). This code would sometimes throw exceptions. How can i deal with these exceptions to control my BPEL process? I would like, in a sense, to do some catching of java exceptions but at the BPEL level... for example, my java code would throw an exception, that my BPEL process would "catch" and react the way i want. Is it possible to do that?
    Thanks for your help!

    Re: Embedded Java in BPEL and exception handling

  • Calling a PP03 BDC  from abap webdynpro throws an exception from the class

    Hi Experts,
    I am calling a BDC FM for PP03 TCPDE form abap webdynpro.
    When i run the standalone FM, it works fine and When called from Webdynpro its giving a dump saying an exception is raised in the class CL_GUI_SPLITTER_CONTAINER.
    Can you please let me know how to resolve the issue? Your siggestions will be of great help to me.
    Thanks,
    Shilpa

    >
    shilpa hv wrote:
    > Hi Experts,
    >
    > I am calling a BDC FM for PP03 TCPDE form abap webdynpro.
    > When i run the standalone FM, it works fine and When called from Webdynpro its giving a dump saying an exception is raised in the class CL_GUI_SPLITTER_CONTAINER.
    >
    >
    > Can you please let me know how to resolve the issue? Your siggestions will be of great help to me.
    >
    >
    > Thanks,
    > Shilpa
    Hi,
    The FM might be calling a dialog or bringing a GUI screen up. This would cause the Webdynpro session to disconnect abruptly.
    Any conversion exit, GUI screen,dialog popup, transaction handling..etc would cause the webdynpro to disconnect. So you cannot use all FM's as it is.

  • Throw JBO exception from doDML method-urgent HELP

    Hi,
    I am catching an exception on deleting a parent record without deleting a child record(FK constraint) in doDML delete operation method,when i am throwing a JBOexception with a custom message with in the catch block it is not refelecting in the front end,how can i display the FK contraint as a custom message in the front end?
    however i was able to throw a jbo exception in TP2 with in the doDml method,which was displaying to the front end.
    im using ADf TP3 11g
    -regards

    Hi,
    a similar question was posted last week. I replied saying that TP3 is supposed to work as TP2. If this isn't the case, please wait for TP4 to verify if the problem still exist and if, post another message with a reproducible testcase. TP4 will be out soon
    Frank

  • Throwing Business Exception from Human Task

    Hi,
    Can anyone point me to some examples, of how can I configure a Human Task to throw a business exception in a BPMN process ?
    I want to provide th user with the ability of completing the task normaly, or launch a business exception like, cancel the order, or lack of stock.
    I'm using Fusion 11g.
    Thank You.
    /RG

    Hi
    Thanks for the reply. But, I'm not sure I understood you correctly. What I want, is not to capture an exception after a human task, but to generate one in it. I want to add an error boundary event to a human task. The user can fill the form normally (for example a purchase order) and the normal flow continues or he can generate an exception (like cancel case, or lack of stock) that will be cought by the error boundary event.
    What I want to know is how can I generate a business exception inside a human task? For example in the interface.
    Is this the right way to do it ? Am I missing something ?

  • Throwing jbo exception from AppModule class

    If a JBO exception does not appear on the JSF page when thrown from the AppModule class, what are some things that should be checked?

    Jaime,
    I'm not really sure what your question is, but backing beans would generally be considered part of the controller layer, in my opinion.
    JBO exceptions are typically raised from the Model layer.
    What exactly are you trying to do here? Can you share the use case?
    John

  • How to throw custom exception from sessionbean

    I define an AppException generalize from EJBException.
    public class AppException extends EJBException{
    when error occurs in sessionbean,I throw AppException, Container perform rollback operation. but at client. I only get EJBException, Why? and How can I get AppException from sessionbean?

    AppException extends RuntimeException

  • Bug in Sun code sample... throwing an exception from a static variable decl

    I got this line from a Sun tutorial (on logging):
    private static FileHandler fh = new FileHandler("mylog.txt");
    Declared in a class as a variable. The compiler (1.4) warns that an IOException must be thrown or caught, and refuses to compile this line. I thought I could program Java (been at it for 4 years) until now, and I realize that I don't know what to do. How do you catch an exception thrown outside of a method? Is this really such a hard case, or am I stupidly missing something obvious?
    Everlasting gratitude to the kind person who can solve my quandry.
    (Code sample taken from http://java.sun.com/j2se/1.4.1/docs/guide/util/logging/overview.html#2.3)

    You can do this:
    private static FileHandler fh;
    static
       try
          fh = new FileHandler("mylog.txt");
       } catch (IOException e)
          //Handle the exception
    }I don't think there's anyway of handling exceptions outside the scope of a function.
    Regards,
    Nille

  • How to throws exception from subprocess?

    Hi,
    I use subprocess in my process and I need throws exception from subprocess to my main process.
    Thanks for help.
    Jakub

    The only to throw an exception from a sub process is by leveraging the Exception event (from the event view).
    You need to throw the exception, by dragging the Exception event and choose Throw into your subprocess. Then you need to add an exception "catcher" in the parent process to catch the Exception.
    Jasmin

  • How to throw bundled exceptions thrown by checkErrors()

    Hi,
    I call pl/sql to do update, and call checkErrors() , the code looks like following, but it doesn't display read friendly message on the screen. What is the right way to throw bundled exception from checkErrors() method?
    try{
    xxg2cGoalPk.startWf (conn,
    new BigDecimal(srpGoalHeaderId),
    new BigDecimal(userId),
    returnStatus,
    msgCount,
    msgData);
    int msgCount1 = 0;
    if(msgCount[0] != null){
    msgCount1 = Integer.parseInt(msgCount[0].toString());
    String returnStatus1 = returnStatus[0];
    String msgData1 = msgData[0];
    OAExceptionUtils.checkErrors(tx,msgCount1, returnStatus1, msgData1);
    catch(OAException e) {
    e.printStackTrace();
    throw new OAException(e.getDetailMessage(),OAException.ERROR);
    thanks
    Lei

    What Shiv said is only an alternative, but what you are using is correct.I haven't tested but as per javadoc of
    OAExceptionUtils.checkErrors(tx,msgCount1, returnStatus1, msgData1);
    will itself raise bundled exceptions. You need to write this line outside try/catch block.
    --Mukul                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

Maybe you are looking for

  • Information-, Warning- or Error Message

    I am currently working on an application to be used in windows environment, but we are of course developing it in java. My problem is that I am not sure what type of message I should display to the user when they enter invalid information. I have alw

  • What should I do about wifi issue if reseting SMC didn't work?

    I tried reseting the SMC and the wifi connection issue still exists. I've tried just about everything, from disabling bluetooth on Terminal to reinstalling the wifi. Still having issues with Wifi dropping every 30 or 60 seconds. Does anyone know of a

  • Adobe Acrobat 6-Compatibility Issues Message

    Does anyone know why when I try opening Adobe Acrobat 6 that I get "This program has known compatibility issues" message? That is as far as I can get opening acrobat. When I press run program, the adobe reader opens instead. Thanks for your help.

  • Open .sql file, pop out error message box

    When I double-click the .sql file, sql developer open this file, but windows pop an error message box: windows can't find c:\aaa\bbb.sql. Make sure you type the file name correctly...... I don't know why? my sql developer version is 1.0.0.15.57, OS i

  • Setting Datasource Location

    Hello, I have a complex report and I am trying to avoid having to re-create it. The report's driving table (the left-outermost table) stores data for each employee by period.  So say you have 3 periods, Jan09, Feb09, and Mar09,  you will have 3 recor