ode-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kharche, Jitendra" <Jitendra.Khar...@geometricglobal.com>
Subject RE: Initializing fault variable
Date Thu, 05 Dec 2013 11:47:23 GMT
Hi Tammo,

The fault is getting caught correctly.

I have modified the process now as follows:
1. Added an element ExternalFault in process WSDL as follows

<element name="ExternalFault">
  <complexType>
    <sequence>
      <element name="code" type="string"/>
      <element name="summary" type="string"/>
      <element name="detail" type="string"/>
    </sequence>
  </complexType>
</element>

2. Defined a variable ExternalFault in BPEL of type element ExternalFault defined above
3. Catch the fault (WSException thrown by web service) as earlier (Catch Block 1)
4. Capture the exception details into ExternalFault variable using Assign activity "Assign1"
5. Throw a new fault (named "SomeFault") within the process.
6. Then I added a Catch on the Start activity (Catch Block 2) to catch the thrown fault (named
"SomeFault")
7.  Moved the Invoke activity from Catch Block 1 to Catch Block 2 to send notification.

But again the invoke activity did not get invoked.

After spending 2 days I found the reason of Invoke activity in the Catch block not getting
invoked.
The reason is that if the name of variable I have defined to collect exception information
(i.e. ExternalFault) and the fault I am throwing on catching the web service fault is same,
then the invoke activity irrespective of its location (in Catch Block 1 or Catch Block 2)
does not get invoked.

That is if I change the fault name from "SomeFault" to "ExternalFault" then it stops working.

It seems to be a bug.
However the original problem (Invoke activity in a Catch not getting invoked) remains unanswered.

Attaching modified bpel and web service.

Regards,
Jitendra

-----Original Message-----
From: Tammo van Lessen [mailto:tvanlessen@gmail.com] 
Sent: Thursday, December 05, 2013 3:38 PM
To: user
Subject: Re: Initializing fault variable

Hi Jitendra,

are you sure that the fault was really caught? If it was not caught, it will be passed to
the callee, looks like this is what happened. Do the faultname and type match to what is declared
in the WSDL?

Tammo


On Tue, Dec 3, 2013 at 7:28 AM, Kharche, Jitendra < Jitendra.Kharche@geometricglobal.com>
wrote:

> Thanks Tammo.
>
> It worked.
> However the next invoke activity to send an email is not getting invoked.
>
> On receiving the fault from web service, I am setting 2 variables 
> mailSubject and mailMessage. Then I prepare the NotificationRequest 
> (variable NotificationServicePLRequest) by assigning the respective 
> values from mailSubject and mailMessage. However I am not getting and 
> email. My mail server is configured correctly and works in some another processes.
>
> I guess the invoke activity is not at all getting executed. What am I 
> missing?
>
> One more thing. In this case I get following response from the process 
> <soapenv:Envelope 
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
> ">
>    <soapenv:Body>
>       <soapenv:Fault>
>          <faultcode>soapenv:Server</faultcode>
>          <faultstring xmlns:axis2ns3="http://testws1.ws.test.jk/
> ">axis2ns3:WSException</faultstring>
>          <detail>
>             <ns2:WSException xmlns:ns2="http://testws1.ws.test.jk/"
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>                <id>0</id>
>                <message>Helper failed. Reason: Failed</message>
>             </ns2:WSException>
>          </detail>
>       </soapenv:Fault>
>    </soapenv:Body>
> </soapenv:Envelope>
>
> Whereas I think it should be
> <soapenv:Envelope 
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
> ">
>    <soapenv:Body>
>       <TestProcessResponse xmlns="http://jk.test.bpel.TestProcess"
> xmlns:tns="http://jk.test.bpel.TestProcess" xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance">
>          <tns:result>Failed</tns:result>
>       </TestProcessResponse>
>    </soapenv:Body>
> </soapenv:Envelope>
>
> Why the process is sending the fault (that I have caught) to the 
> process caller. I want to catch the fault and report it via notification.
>
> Regards,
> Jitendra
>
> -----Original Message-----
> From: Tammo van Lessen [mailto:tvanlessen@gmail.com]
> Sent: Monday, December 02, 2013 6:45 PM
> To: user
> Subject: Re: Initializing fault variable
>
> So you want to get access to the fault message? This is AFAIK not 
> possible with a catch all. You can use a <catch> and define a 
> faultVariable, to which the fault details will be assigned.
>
> HTH,
>   Tammo
>
>
> On Mon, Dec 2, 2013 at 2:08 PM, Kharche, Jitendra < 
> Jitendra.Kharche@geometricglobal.com> wrote:
>
> > Thanks Tammo.
> >
> > You are right.
> >
> > But as I mentioned
> > If I explicitly initialize the variable TestWSPLException with some 
> > default values, then I do not get any error on the tomcat console, 
> > but the actual failure message coming from the web service in the 
> > fault is lost and I get the mail with the default values I have set 
> > during initialization of the variable.
> >
> > Regards,
> > Jitendra
> >
> > -----Original Message-----
> > From: Tammo van Lessen [mailto:tvanlessen@gmail.com]
> > Sent: Monday, December 02, 2013 6:17 PM
> > To: user
> > Subject: Re: Initializing fault variable
> >
> > Hi Jitendra,
> >
> > thanks for the attachment. Apparently the variable TestWSPLException 
> > is never written and thus not initialized. This is causing the 
> > selectionFailure in the 4th copy statement in the catch all. I think 
> > if you make sure that some data is written to this variable, you 
> > should
> be fine.
> >
> > Best,
> >   Tammo
> >
> >
> > On Mon, Dec 2, 2013 at 1:30 PM, Kharche, Jitendra < 
> > Jitendra.Kharche@geometricglobal.com> wrote:
> >
> > > Thanks Tammo for quick reply.
> > > Please find attached the BPEL and Web Service.
> > >
> > > Regards,
> > >
> > >
> > > -----Original Message-----
> > > From: Tammo van Lessen [mailto:tvanlessen@gmail.com]
> > > Sent: Monday, December 02, 2013 5:32 PM
> > > To: user
> > > Subject: Re: Initializing fault variable
> > >
> > > Hi Jitendra,
> > >
> > > could you attach your bpel process, ideally the whole deployable?
> > > That would make it easier to analyze the issue. It looks like 
> > > you're using an xpath expression in the to-spec of an assign. This 
> > > only works if the variable is prepopulated with the XML structure.
> > >
> > > Thanks,
> > >   Tammo
> > >
> > >
> > > On Mon, Dec 2, 2013 at 11:16 AM, jk <jitendrakharche@gmail.com> wrote:
> > >
> > > > Hi,
> > > >
> > > > I have a BPEL process deployed in ODE 1.3.6 on Tomcat 7.0.42.
> > > > This process invokes a web service that throws an exception.
> > > > In the process I have used a FaultHandler having a CatchAll on 
> > > > that invoke activity.
> > > > In this CatchAll, I assign 2 variables "mailSubject" and
> "mailMessage"
> > > > that I use later to send failure mail notificatrion.
> > > > However when the web service fault message is received I get 
> > > > following exception on the tomcat console.
> > > >
> > > > *org.apache.ode.bpel.common.FaultException: The variable 
> > > > TestWSPLException isn't properly initialized.*
> > > >
> > > > I have declared the variable TestWSPLException in BPEL with the 
> > > > messageType equal to the exception thrown by the web service.
> > > >
> > > > Why ODE is not initializing the variable on receiving the fault?
> > > > If I explicitely initialize the variable TestWSPLException with 
> > > > some default values, then I do not get any error on the tomcat 
> > > > console, but the actual failure message coming from the web 
> > > > service in the fault is lost and I get the mail with the dafault 
> > > > values I have set during initialization of the variable.
> > > >
> > > > I am attaching both the BPEL and WebService files.
> > > > The complete startck trace is given below.
> > > >
> > > > 15:38:28,341 WARN  [ExternalService] Fault response:
> > > > faultName=WSException
> > > > faultType={http://testws1.ws.test.jk/}WSException
> > > > <?xml version="1.0" encoding="UTF-8"?> 
> > > > <message><WSException><ns2:WSException
> > > > xmlns:ns2="http://testws1.ws.test.jk/"
> > > > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/
> > > > "><id>0</id><message>Hel
> > > > per failed. Reason:
> > > > Failed</message></ns2:WSException></WSException></message>
> > > > 15:38:28,356 ERROR [JaxenContexts] bpws:getVariableValue threw 
> > > > FaultException
> > > > org.apache.ode.bpel.common.FaultException: The variable 
> > > > TestWSPLException isn't properly initialized.
> > > >         at
> > > >
> > > >
> > > org.apache.ode.bpel.runtime.ScopeFrame.fetchVariableData(ScopeFrame.
> > > ja
> > > va:199)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.bpel.runtime.ScopeFrame.fetchVariableData(ScopeFrame.
> > > ja
> > > va:209)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.bpel.runtime.ExprEvaluationContextImpl.readVariable
> > > (E
> > > xp
> > > rEvaluationContextImpl.java:96)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.bpel.elang.xpath10.runtime.JaxenContexts.getVariabl
> > > eV
> > > al
> > > ue(JaxenContexts.java:173)
> > > >         at
> > > > org.jaxen.ContextSupport.getVariableValue(ContextSupport.java:215)
> > > >         at org.jaxen.Context.getVariableValue(Context.java:196)
> > > >         at
> > > >
> > > >
> > > org.jaxen.expr.DefaultVariableReferenceExpr.evaluate(DefaultVariab
> > > le
> > > Re
> > > ferenceExpr.java:106)
> > > >         at
> > > > org.jaxen.expr.DefaultPathExpr.evaluate(DefaultPathExpr.java:137)
> > > >         at
> > > >
> > > >
> > > org.jaxen.expr.DefaultFunctionCallExpr.evaluateParams(DefaultFunct
> > > io
> > > nC
> > > allExpr.java:195)
> > > >         at
> > > >
> > > >
> > > org.jaxen.expr.DefaultFunctionCallExpr.evaluate(DefaultFunctionCal
> > > lE
> > > xp
> > > r.java:179)
> > > >         at
> > > > org.jaxen.expr.DefaultXPathExpr.asList(DefaultXPathExpr.java:102)
> > > >         at
> > org.jaxen.BaseXPath.selectNodesForContext(BaseXPath.java:677)
> > > >         at org.jaxen.BaseXPath.selectNodes(BaseXPath.java:216)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.bpel.elang.xpath10.runtime.XPath10ExpressionRuntime
> > > .e
> > > va
> > > luate(XPath10ExpressionRuntime.java:103)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.bpel.runtime.ExpressionLanguageRuntimeRegistry.eval
> > > ua
> > > te
> > > (ExpressionLanguageRuntimeRegistry.java:80)
> > > >         at
> > org.apache.ode.bpel.runtime.ASSIGN.evalRValue(ASSIGN.java:225)
> > > >         at org.apache.ode.bpel.runtime.ASSIGN.copy(ASSIGN.java:399)
> > > >         at org.apache.ode.bpel.runtime.ASSIGN.run(ASSIGN.java:87)
> > > >         at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown
> Source)
> > > >         at
> > > >
> > > >
> > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAc
> > > ce
> > > ss
> > > orImpl.java:25)
> > > >         at java.lang.reflect.Method.invoke(Method.java:597)
> > > >         at
> > > >
> > org.apache.ode.jacob.vpu.JacobVPU$JacobThreadImpl.run(JacobVPU.java:
> > 45
> > 1)
> > > >         at
> org.apache.ode.jacob.vpu.JacobVPU.execute(JacobVPU.java:139)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.bpel.engine.BpelRuntimeContextImpl.execute(BpelRunt
> > > im
> > > eC
> > > ontextImpl.java:978)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.bpel.engine.BpelProcess.handleJobDetails(BpelProcess.
> > > ja
> > > va:456)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngin
> > > eI
> > > mp
> > > l.java:460)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.bpel.engine.BpelServerImpl.onScheduledJob(BpelServe
> > > rI
> > > mp
> > > l.java:450)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.scheduler.simple.SimpleScheduler$RunJob$1.call(Simp
> > > le
> > > Sc
> > > heduler.java:523)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.scheduler.simple.SimpleScheduler$RunJob$1.call(Simp
> > > le
> > > Sc
> > > heduler.java:517)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(Si
> > > mp
> > > le
> > > Scheduler.java:289)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(Si
> > > mp
> > > le
> > > Scheduler.java:244)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.scheduler.simple.SimpleScheduler$RunJob.call(Simple
> > > Sc
> > > he
> > > duler.java:517)
> > > >         at
> > > >
> > > >
> > > org.apache.ode.scheduler.simple.SimpleScheduler$RunJob.call(Simple
> > > Sc
> > > he
> > > duler.java:501)
> > > >         at
> > > > java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> > > >         at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> > > >         at
> > > >
> > > >
> > > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolE
> > > xe
> > > cu
> > > tor.java:886)
> > > >         at
> > > >
> > > >
> > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.
> > > java:908)
> > > >         at java.lang.Thread.run(Thread.java:662)
> > > > TestProcess.zip
> > > > <http://apache-ode.996305.n3.nabble.com/file/n16976/TestProcess.
> > > > zi
> > > > p>
> > > > TestWS1.war <
> > > > http://apache-ode.996305.n3.nabble.com/file/n16976/TestWS1.war>
> > > >
> > > >
> > > >
> > > > --
> > > > View this message in context:
> > > > http://apache-ode.996305.n3.nabble.com/Initializing-fault-variab
> > > > le
> > > > -t
> > > > p1 6976.html Sent from the Apache Ode User mailing list archive 
> > > > at Nabble.com.
> > > >
> > >
> > >
> > >
> > > --
> > > Tammo van Lessen - http://www.taval.de
> > >
> >
> >
> >
> > --
> > Tammo van Lessen - http://www.taval.de
> >
>
>
>
> --
> Tammo van Lessen - http://www.taval.de
>



--
Tammo van Lessen - http://www.taval.de

Mime
View raw message