[jboss-user] [JBoss jBPM] - Re: How to use faultVariable in fault handler?

jiehuan_li do-not-reply at jboss.com
Mon Jul 17 10:15:56 EDT 2006


Alex,

Thanks for the reply.  I tried defining the variable in the enclosing scope and then referencing it in the faultHandler by faultVariable, but I ran into a dilemma.  If I try to deploy the definition with the faultVariable specified in the faultHandler, I am getting the following exception:


  | 10:05:41,967 ERROR [[DeployServlet]] Servlet.service() for servlet DeployServlet threw exception
  | org.jbpm.jpdl.JpdlException: [[ERROR] jbpmbpel.bpel catch must specify either a faultMessageType or a faultElement [/process/faultHandlers/catch]]
  |         at org.jbpm.jpdl.par.ProcessArchive.parseProcessDefinition(ProcessArchive.java:84)
  |         at org.jbpm.bpel.web.deploy.DeployServlet.doGet(DeployServlet.java:49)
  |         at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
  |         at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  |         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
  |         at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
  |         at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
  |         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  |         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  |         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  |         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  |         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
  |         at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
  |         at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
  |         at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
  |         at java.lang.Thread.run(Thread.java:595)
  | 

Then I added 'faultElement' in the 'catch', I am getting the following exception:

  | 09:28:51,999 ERROR [[DeployServlet]] Servlet.service() for servlet DeployServlet threw exception
  | org.jbpm.jpdl.JpdlException: [[ERROR] jbpmbpel.bpel(36) cvc-complex-type.3.2.2: Attribute 'faultElement' is not allowed to appear in element 'catch'.]
  |         at org.jbpm.jpdl.par.ProcessArchive.parseProcessDefinition(ProcessArchive.java:84)
  |         at org.jbpm.bpel.web.deploy.DeployServlet.doGet(DeployServlet.java:49)
  |         at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
  |         at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  |         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
  |         at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
  |         at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
  |         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  |         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  |         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  |         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  |         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
  |         at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
  |         at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
  |         at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
  |         at java.lang.Thread.run(Thread.java:595)
  | 

Below is my code:


  | <?xml version="1.0" encoding="UTF-8"?>
  | <process name="jbpmbpelFrontEnd" targetNamespace="com:vizuri:bpel:jbpmbpel"
  |   xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
  |   xmlns:tns="com:vizuri:bpel:jbpmbpel" xmlns:jbpmbpel="com:vizuri:bpel:jbpmbpel" xmlns:typ="com:vizuri:bpel:types"
  |   xmlns:svc="http://webservice.vizuri.com/jaws" xmlns:svc2="http://webservice.vizuri.com/jaws"
  |   xmlns:bpel="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
  |   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  |   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  |   xsi:schemaLocation="http://schemas.xmlsoap.org/ws/2003/03/business-process/
  |    http://schemas.xmlsoap.org/ws/2003/03/business-process/">
  | 
  |   <variables>
  |     <variable name="operationFlt" messageType="jbpmbpel:operationFault" />
  |     <variable name="svcFlt" element="svc:JSR181WebServiceException" />
  |   </variables>
  | <faultHandlers>
  |        <catch faultName="svc:JSR181WebServiceException" faultVariable="svcFlt">
  |             <sequence>
  |        		<assign name="copyStep2Fault">
  |       			<copy>
  |         			<from variable="svcFlt" query="/JSR181WebServiceException/svc:code"/>
  |         			<to variable="operationFlt" part="detail"/>
  |       			</copy>      
  | 		</assign>
  |             <reply operation="connect2" partnerLink="jbpmbpelRelation" portType="jbpmbpel:jbpmbpelFrontEnd"
  |                       variable="operationFlt" faultName="jbpmbpel:step2Fault" />
  |             </sequence>
  |        </catch>
  |   </faultHandlers>
  | </process>
  | 

I understand that adding 'faultElement' in catch causes problem because bpel 1.1 schema doesn't allow it, but why do I get the first exception when I don't have faultElement or faultMessageType in catch?

Jiehuan

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3958474#3958474

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3958474



More information about the jboss-user mailing list