You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ode.apache.org by "lorenzo (JIRA)" <ji...@apache.org> on 2012/06/06 10:47:23 UTC

[jira] [Commented] (ODE-260) Executing SOAP services, which doesn't return value

    [ https://issues.apache.org/jira/browse/ODE-260?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13290025#comment-13290025 ] 

lorenzo commented on ODE-260:
-----------------------------

I have an update on this issue. We tracked down the cause of the problem to a BPEL script "error"(?).

We figured out that the empty CLOB variable was not persisted correctly to the database due to some JDBC/JPA transaction problem.

Ode does not commit transactions until a blocking instruction is found. Check this thread for details:

http://web.archiveorange.com/archive/v/6C8plvSBZRXqDlQzI3Lq

(official link: http://mail-archives.apache.org/mod_mbox/ode-user/201004.mbox/thread)

So we forced a commit adding this instruction right after the assigned of the empty CLOB variable

	<bpel:wait name="Commit">
		<bpel:for>'PT1S'</bpel:for>
	</bpel:wait>

This is the instruction that "missed" the commit of the variable "xyz-response" 

<bpel:invoke name="xyz" partnerLink="XyzService" operation="findXyz" portType="dmns:XyzPort" inputVariable="xyz-request" outputVariable="xyz-response"/>

I cannot say if this is due to something wrong in our bpel or something that should be investigated in the ode transaction handling. This problem does not happen with in memory BPEL processes.

Anyway the problem does not happen at variable reading time but before, so the "patch" proposed in the previous comment can not fix this.

Even the VARCHAR2 workaround probably can be avoided with the "commit trick".



                
> Executing SOAP services, which doesn't return value
> ---------------------------------------------------
>
>                 Key: ODE-260
>                 URL: https://issues.apache.org/jira/browse/ODE-260
>             Project: ODE
>          Issue Type: Bug
>          Components: BPEL Runtime
>    Affects Versions: 1.1, 1.1.1
>         Environment: Windows XP Pro, JDK 1.5.0.07, Oracle 10g XE, Apache Tomcat 5.5.25, OpenJPA
>            Reporter: Alexey Ousov
>             Fix For: 1.2
>
>         Attachments: ODE-260.patch, ODE-260v01.patch, ODE-260v02.patch
>
>
> Very strange things happen, when executing exetrnal services in two-way style, and this service doesn't return values. Something like this:
> <?xml version='1.0' encoding='utf-8'?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing">
>   <soapenv:Header>
>     <wsa:Action>http://www.comped.it/te/dbService/dbService/commitTransactionResponse</wsa:Action>
>     <wsa:RelatesTo>uuid:hqejbhcnphr35voswr4cg3</wsa:RelatesTo>
>   </soapenv:Header>
>   <soapenv:Body />
> </soapenv:Envelope>
> First of all I got the following exception (happens only if INFO logging is enabled):
> 16:30:19,859 ERROR ExternalService$4.call(333) : Unable to process response: Cannot stringify null Node!
> java.lang.IllegalArgumentException: Cannot stringify null Node!
> 	at org.apache.ode.utils.DOMUtils.domToString(DOMUtils.java:419)
> 	at org.apache.ode.axis2.ExternalService$4.call(ExternalService.java:328)
> 	at org.apache.ode.axis2.ExternalService$4.call(ExternalService.java:295)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:179)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$1.call(SimpleScheduler.java:160)
> 	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)
> I fixed it, but then I've got the following (because element was empty string):
> 18:03:17,843 DEBUG LoggingErrorHandler.fatalError(89) : :-1:-1:FATAL:Premature end of file.
> 18:03:17,859 ERROR INVOKE$1.onResponse(116) : Exception while processing invoke response
> java.lang.RuntimeException: org.xml.sax.SAXParseException: Premature end of file.
> 	at org.apache.ode.dao.jpa.MessageDAOImpl.getData(MessageDAOImpl.java:76)
> 	at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.mergeHeaders(BpelRuntimeContextImpl.java:1153)
> 	at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.getPartnerResponse(BpelRuntimeContextImpl.java:1111)
> 	at org.apache.ode.bpel.runtime.INVOKE$1.onResponse(INVOKE.java:114)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
> 	at org.apache.ode.jacob.vpu.JacobVPU$JacobThreadImpl.run(JacobVPU.java:451)
> 	at org.apache.ode.jacob.vpu.JacobVPU.execute(JacobVPU.java:139)
> 	at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.execute(BpelRuntimeContextImpl.java:832)
> 	at org.apache.ode.bpel.engine.BpelProcess.handleWorkEvent(BpelProcess.java:392)
> 	at org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngineImpl.java:328)
> 	at org.apache.ode.bpel.engine.BpelServerImpl.onScheduledJob(BpelServerImpl.java:373)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:341)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:340)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:179)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:339)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:336)
> 	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)
> Caused by: org.xml.sax.SAXParseException: Premature end of file.
> 	at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
> 	at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
> 	at org.apache.ode.utils.DOMUtils.parse(DOMUtils.java:622)
> 	at org.apache.ode.utils.DOMUtils.stringToDOM(DOMUtils.java:548)
> 	at org.apache.ode.dao.jpa.MessageDAOImpl.getData(MessageDAOImpl.java:74)
> 	... 23 more
> And finally I got the following exception:
> 18:35:48,515 ERROR INVOKE$1.onResponse(116) : Exception while processing invoke response
> java.lang.NullPointerException
> 	at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.mergeHeaders(BpelRuntimeContextImpl.java:1160)
> 	at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.getPartnerResponse(BpelRuntimeContextImpl.java:1111)
> 	at org.apache.ode.bpel.runtime.INVOKE$1.onResponse(INVOKE.java:114)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
> 	at org.apache.ode.jacob.vpu.JacobVPU$JacobThreadImpl.run(JacobVPU.java:451)
> 	at org.apache.ode.jacob.vpu.JacobVPU.execute(JacobVPU.java:139)
> 	at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.execute(BpelRuntimeContextImpl.java:832)
> 	at org.apache.ode.bpel.engine.BpelProcess.handleWorkEvent(BpelProcess.java:392)
> 	at org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngineImpl.java:328)
> 	at org.apache.ode.bpel.engine.BpelServerImpl.onScheduledJob(BpelServerImpl.java:373)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:341)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:340)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:179)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:339)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:336)
> 	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)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira