ode-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jens Goldhammer <Goldhammer.J...@gmx.net>
Subject Re: Error handling in bpel processes
Date Wed, 10 Oct 2007 14:32:38 GMT

I have reopened the fixed issue in JIRA. All details under 
https://issues.apache.org/jira/browse/ODE-194?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
JIRA 



Alex Boisvert wrote:
> 
> Excellent, I've also created a similar test case... I'm not sure if they
> trigger the same bug yet but I'll be looking at both of them next week.
> 
> thanks!!
> alex
> 
> 
> On 10/5/07, Jens Goldhammer <Goldhammer.Jens@gmx.net> wrote:
>>
>>
>> Ok, I have opened an issue
>> (https://issues.apache.org/jira/browse/ODE-194)
>> and included a minimal runnable example for showing the error.
>>
>>
>> Jens Goldhammer wrote:
>> >
>> > Ok, I have made further analysis. I tested the service with a generated
>> > axis2-client and I see that I am getting back the fault correctly, i.e.
>> I
>> > can access the self-defined faultcode, faultActor and so on.
>> >
>> > My wsdl definition for this wsdl fault contains following:
>> >
>> >     <xsd:element name="faultCode" type="xsd:string">
>> >         <xsd:annotation>
>> >             <xsd:documentation>
>> >                               faultCode consists of a five letter
>> identifier plus a
>> >                               three digit id (serial number). For
>> example, "GENEX001"
>> >                               is a generic error and "AUTEX001" is a
>> authenification
>> >                               error
>> >                       </xsd:documentation>
>> >         </xsd:annotation>
>> >     </xsd:element>
>> >     <xsd:element name="faultString" type="xsd:string">
>> >         <xsd:annotation>
>> >             <xsd:documentation>
>> >                               corresponding description of the
>> faultCode
>> >                       </xsd:documentation>
>> >         </xsd:annotation>
>> >     </xsd:element>
>> >     <xsd:element name="faultActor" type="xsd:string">
>> >         <xsd:annotation>
>> >             <xsd:documentation>
>> >                               element displays url of the webservice
>> where the
>> >                               exception occured
>> >                       </xsd:documentation>
>> >         </xsd:annotation>
>> >     </xsd:element>
>> >     <xsd:element name="faultDetail" type="xsd:string">
>> >         <xsd:annotation>
>> >             <xsd:documentation>
>> >                               element pictures the actual exception
>> message and
>> >                               complete stack trace.
>> >                       </xsd:documentation>
>> >         </xsd:annotation>
>> >     </xsd:element>
>> >
>> >
>> >     <xsd:element name="LogFault">
>> >         <xsd:annotation>
>> >             <xsd:documentation>
>> >                               fault element for handling errors during
>> the logservice
>> >                       </xsd:documentation>
>> >         </xsd:annotation>
>> >         <xsd:complexType>
>> >             <xsd:sequence>
>> >                 <xsd:element ref="types:faultCode"/>
>> >                 <xsd:element ref="types:faultString"/>
>> >                 <xsd:element ref="types:faultActor"/>
>> >                 <xsd:element ref="types:faultDetail"/>
>> >             </xsd:sequence>
>> >         </xsd:complexType>
>> >     </xsd:element>
>> >
>> >
>> > I send a response and I am getting back following response:
>> >
>> > <soapenv:Envelope
>> > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
>> >    <soapenv:Body>
>> >       <soapenv:Fault>
>> >          <faultcode>soapenv:Server</faultcode>
>> >          <faultstring>LogFaultException</faultstring>
>> >          <detail>
>> >             <ns2:LogFault
>> > xmlns:ns2="http://cis.log.interface.de.ibm.com/types">
>> >                <s547:faultCode
>> >
>> xmlns:s547="http://cis.de.ibm.com/simpleTypes">LOGEX002</s547:faultCode>
>> >                <s548:faultString
>> > xmlns:s548="http://cis.de.ibm.com/simpleTypes">Database for LogService
>> not
>> > available.</s548:faultString>
>> >                <s549:faultActor
>> > xmlns:s549="http://cis.de.ibm.com/simpleTypes">logRun</s549:faultActor>
>> >                <s550:faultDetail
>> > xmlns:s550="http://cis.de.ibm.com/simpleTypes">no
>> > stacktrace.</s550:faultDetail>
>> >             </ns2:LogFault>
>> >          </detail>
>> >       </soapenv:Fault>
>> >    </soapenv:Body>
>> > </soapenv:Envelope>
>> >
>> > I have tested it with an autogenerated axis-client and a
>> junit-testmethod.
>> > If the logfaultexception is thrown by the service, I can output the
>> > faultActor, faultString, detail and code in the catch-block.
>> >
>> >       /**
>> >        * Auto generated test method
>> >        */
>> >       public void testlogRun() {
>> >
>> >               LogRunResponseVO logRun = null;
>> >               try {
>> >                       com.ibm.de.cis.log.client.CisLogServiceStub stub
>> =
>> new
>> > com.ibm.de.cis.log.client.CisLogServiceStub(
>> >                                       endpoint);
>> >
>> com.ibm.de.cis.log.client.CisLogServiceStub.LogRunRequestVO
>> > logRunRequestVO18 =
>> > (com.ibm.de.cis.log.client.CisLogServiceStub.LogRunRequestVO)
>> > getTestObject(
>> com.ibm.de.cis.log.client.CisLogServiceStub.LogRunRequestVO.class);
>> >                       logRunRequestVO18.setEmptyparam(
>> >                       logRun = stub.logRun(logRunRequestVO18);
>> >               } catch (AxisFault e) {
>> >                       e.printStackTrace();
>> >               } catch (RemoteException e) {
>> >                       e.printStackTrace();
>> >               } catch (LogFaultException e) {
>> >                       LogFault fault = e.getFaultMessage();
>> >                       System.out.println("Actor: " +
>> fault.getFaultActor
>> ());
>> >                       System.out.println("Code:" + fault.getFaultCode
>> ());
>> >                       System.out.println("Detail:" +
>> fault.getFaultDetail());
>> >                       System.out.println("FaultString:" +
>> fault.getFaultString());
>> >                       e.printStackTrace();
>> >               } catch (Exception e) {
>> >                       e.printStackTrace();
>> >               }
>> >               System.out.println(logRun.getRunId());
>> >
>> >       }
>> >
>> > Question is why Ode cannot access these information? Following
>> stacktrace
>> > is available in Ode.
>> >
>> > <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope
>> > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
>> "><soapenv:Header><addr:To
>> > xmlns:addr="http://www.w3.org/2005/08/addressing">
>> http://localhost:8180/cisLogWeb/services/cisLogService
>> </addr:To><addr:Action
>> > xmlns:addr="http://www.w3.org/2005/08/addressing">
>> http://cis.log.interface.de.ibm.com/service/logRun
>> </addr:Action><addr:ReplyTo
>> > xmlns:addr="http://www.w3.org/2005/08/addressing"><addr:Address>
>> http://www.w3.org/2005/08/addressing/anonymous
>> </addr:Address></addr:ReplyTo><addr:MessageID
>> > xmlns:addr="http://www.w3.org/2005/08/addressing
>> ">uuid:hqejbhcnphr2n1qwgjen65</addr:MessageID></soapenv:Header><soapenv:Body><axis2ns2:LogRunRequestVO
>> > xmlns:axis2ns2="http://cis.log.interface.de.ibm.com/types"
>> > xmlns:types="http://cis.log.interface.de.ibm.com/types">
>> >                                     <xsd:emptyparam
>> > xmlns:xsd="http://cis.de.ibm.com/simpleTypes">true</xsd:emptyparam>
>> >
>> > </axis2ns2:LogRunRequestVO></soapenv:Body></soapenv:Envelope>
>> > 10:48:58,462 DEBUG [SessionOutHandler] <?xml version='1.0'
>> > encoding='utf-8'?><soapenv:Envelope
>> > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
>> "><soapenv:Header><addr:To
>> > xmlns:addr="http://www.w3.org/2005/08/addressing">
>> http://localhost:8180/cisLogWeb/services/cisLogService
>> </addr:To><addr:Action
>> > xmlns:addr="http://www.w3.org/2005/08/addressing">
>> http://cis.log.interface.de.ibm.com/service/logRun
>> </addr:Action><addr:ReplyTo
>> > xmlns:addr="http://www.w3.org/2005/08/addressing"><addr:Address>
>> http://www.w3.org/2005/08/addressing/anonymous
>> </addr:Address></addr:ReplyTo><addr:MessageID
>> > xmlns:addr="http://www.w3.org/2005/08/addressing
>> ">uuid:hqejbhcnphr2n1qwgjen65</addr:MessageID></soapenv:Header><soapenv:Body><axis2ns2:LogRunRequestVO
>> > xmlns:axis2ns2="http://cis.log.interface.de.ibm.com/types"
>> > xmlns:types="http://cis.log.interface.de.ibm.com/types">
>> >                                     <xsd:emptyparam
>> > xmlns:xsd="http://cis.de.ibm.com/simpleTypes">true</xsd:emptyparam>
>> >
>> > </axis2ns2:LogRunRequestVO></soapenv:Body></soapenv:Envelope>
>> > DEBUG - GeronimoLog.debug(66) | Found a header in incoming message,
>> > checking if there are endpoints there.
>> > 10:48:59,503 DEBUG [SessionInHandler] Found a header in incoming
>> message,
>> > checking if there are endpoints there.
>> > ERROR - GeronimoLog.error(108) | Error sending message
>> > (mex={PartnerRoleMex#hqejbhcnphr2n1qwgjen64 [PID
>> > {http://com.ibm.de.cis/archive}cisArchive-40] calling
>> > org.apache.ode.bpel.epr.URLEndpoint@c88805.logRun(...)}):
>> > LogFaultException
>> > org.apache.axis2.AxisFault: LogFaultException
>> >       at
>> >
>> org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java
>> :486)
>> >       at
>> > org.apache.axis2.description.OutInAxisOperationClient.handleResponse(
>> OutInAxisOperation.java:343)
>> >       at
>> > org.apache.axis2.description.OutInAxisOperationClient.send(
>> OutInAxisOperation.java:389)
>> >       at
>> > org.apache.axis2.description.OutInAxisOperationClient.executeImpl(
>> OutInAxisOperation.java:211)
>> >       at
>> > org.apache.axis2.client.OperationClient.execute(OperationClient.java
>> :163)
>> >       at
>> > org.apache.ode.axis2.ExternalService$1$1.call(ExternalService.java:148)
>> >       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java
>> :269)
>> >       at java.util.concurrent.FutureTask.run(FutureTask.java:123)
>> >       at
>> > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(
>> ThreadPoolExecutor.java:650)
>> >       at
>> > java.util.concurrent.ThreadPoolExecutor$Worker.run(
>> ThreadPoolExecutor.java:675)
>> >       at java.lang.Thread.run(Thread.java:595)
>> > 10:48:59,513 ERROR [ExternalService] Error sending message
>> > (mex={PartnerRoleMex#hqejbhcnphr2n1qwgjen64 [PID
>> > {http://com.ibm.de.cis/archive}cisArchive-40] calling
>> > org.apache.ode.bpel.epr.URLEndpoint@c88805.logRun(...)}):
>> > LogFaultException
>> > org.apache.axis2.AxisFault: LogFaultException
>> >       at
>> >
>> org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java
>> :486)
>> >       at
>> > org.apache.axis2.description.OutInAxisOperationClient.handleResponse(
>> OutInAxisOperation.java:343)
>> >       at
>> > org.apache.axis2.description.OutInAxisOperationClient.send(
>> OutInAxisOperation.java:389)
>> >       at
>> > org.apache.axis2.description.OutInAxisOperationClient.executeImpl(
>> OutInAxisOperation.java:211)
>> >       at
>> > org.apache.axis2.client.OperationClient.execute(OperationClient.java
>> :163)
>> >       at
>> > org.apache.ode.axis2.ExternalService$1$1.call(ExternalService.java:148)
>> >       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java
>> :269)
>> >       at java.util.concurrent.FutureTask.run(FutureTask.java:123)
>> >       at
>> > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(
>> ThreadPoolExecutor.java:650)
>> >       at
>> > java.util.concurrent.ThreadPoolExecutor$Worker.run(
>> ThreadPoolExecutor.java:675)
>> >       at java.lang.Thread.run(Thread.java:595)
>> > DEBUG - GeronimoLog.trace(54) |
>> Mex[hqejbhcnphr2n1qwgjen64].setPortOp(...)
>> > 10:48:59,663 DEBUG [MessageExchangeImpl]
>> > Mex[hqejbhcnphr2n1qwgjen64].setPortOp(...)
>> >
>> > Thanks for your help.
>> > Jens
>> >
>> >
>> > Jens Goldhammer wrote:
>> >>
>> >>
>> >>
>> >> Alex Boisvert wrote:
>> >>>
>> >>> On 10/2/07, Jens Goldhammer <Goldhammer.Jens@gmx.net> wrote:
>> >>>>
>> >>>> I believe in my case that Axis2 cannot acces the fault which the
>> >>>> service
>> >>>> responses to ODE back. Here the initial business fault become an
ODE
>> >>>> fault
>> >>>> and behave as you have described already.
>> >>>> Or does the stacktrace below has an other meaning?
>> >>>>
>> >>>> org.apache.axis2.AxisFault: LogFaultException
>> >>>>         at
>> >>>> org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(
>> Utils.java
>> >>>> :486)
>> >>>
>> >>>
>> >>> The stacktrace indicates Ode detected the fault and is re-throwing
>> it.
>> >>> But
>> >>> I'm not sure I understand what doesn't work for you.... is it that,
>> >>>
>> >>> 1) Your service sends back a Fault (described in WSDL) and you can't
>> >>> catch
>> >>> it in your process?
>> >>>
>> >>> 2) Your service sends back a Fault (not in WSDL) and you use
>> >>> "faultOnFailure=true" but you can't catch it in your process?
>> >>>
>> >>> In either case, if you can simplify your setup and attach your files
>> to
>> >>> a
>> >>> Jira issue we could look into things in detail.
>> >>>
>> >>> alex
>> >>>
>> >>>
>> >>
>> >> It is the first point- I send back a fault and I cannot catch it in
>> >> Ode... and I don´t know why...
>> >> I see that there is an wsdl fault, but Ode does not execute the fault
>> >> handler for this fault...
>> >>
>> >>
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Error-handling-in-bpel-processes-tf4555881.html#a13055706
>> Sent from the Apache Ode User mailing list archive at Nabble.com.
>>
>>
> 
> 

-- 
View this message in context: http://www.nabble.com/Error-handling-in-bpel-processes-tf4555881.html#a13136987
Sent from the Apache Ode User mailing list archive at Nabble.com.


Mime
View raw message