BPEL Correlation & Eventhandling
naera Jul 18, 2008 9:02 AMFor my bachelor thesis I am working on the implementation of a specific BPEL Process and I am stuck since days with an CorrelationViolation.
I optain an CorrelationViolation when I invoke the openServiceCall operation. If I delete the whole Eventhandler part, the invoking of the openServiceCall isn't a problem at all, and the correlation worked with before with several recieve/return paires instead of event handler, but this won't serve the purpose.
Any kind of help would highly be appreciated.
Thanks
Environment:
AS: jboss-4.2.2.GA
BPEL Engine: jbpm-bpel-1.1.GA
OS: Windows XP Pro SP2
optained error
15:00:39,640 ERROR [StartListener] request delivery failed due to non-recoverable exception, giving up org.jbpm.bpel.graph.exe.BpelFaultException: org.jbpm.bpel.graph.exe.FaultInstance@1be6f3c[name={http://docs.oasis-open.org/wsbpel/2.0/process/executable}correlationViolation] at org.jbpm.bpel.integration.exe.CorrelationSetInstance.checkInitialized(CorrelationSetInstance.java:117) at org.jbpm.bpel.integration.exe.CorrelationSetInstance.getProperties(CorrelationSetInstance.java:92) at org.jbpm.bpel.integration.def.Correlations.getReceptionProperties(Correlations.java:72) 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.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:173) at org.jbpm.bpel.integration.def.Correlations_$$_javassist_43.getReceptionProperties(Correlations_$$_javassist_43.java) at org.jbpm.bpel.integration.jms.RequestListener.formatSelector(RequestListener.java:106) at org.jbpm.bpel.integration.jms.RequestListener.<init>(RequestListener.java:80) at org.jbpm.bpel.integration.jms.JmsIntegrationService.jmsReceive(JmsIntegrationService.java:80) at org.jbpm.bpel.integration.jms.JmsIntegrationService.receive(JmsIntegrationService.java:70) at org.jbpm.bpel.graph.exe.ScopeInstance.enableEvents(ScopeInstance.java:221) at org.jbpm.bpel.integration.def.ProcessInstanceStarter.visit(ProcessInstanceStarter.java:144) at org.jbpm.bpel.integration.def.ProcessInstanceStarter.visit(ProcessInstanceStarter.java:61) at org.jbpm.bpel.integration.def.ReceiveAction.initializeProcessInstance(ReceiveAction.java:87) 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.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:173) at org.jbpm.bpel.integration.def.ReceiveAction_$$_javassist_93.initializeProcessInstance(ReceiveAction_$$_javassist_93.java) at org.jbpm.bpel.integration.jms.StartListener.deliverRequest(StartListener.java:210) at org.jbpm.bpel.integration.jms.StartListener.onMessage(StartListener.java:168) at org.jboss.mq.SpyMessageConsumer.run(SpyMessageConsumer.java:682) at java.lang.Thread.run(Thread.java:595)
createServiceCall.bpel
<process name="createServiceCall" targetNamespace="http://coresystems.ch/bt/bpel/createServiceCall" xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://coresystems.ch/bt/bpel/createServiceCall" xmlns:nswsdl="http://coresystems.ch/bt/wsdl/createServiceCall" xmlns:sxt="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Trace" xmlns:sxed="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Editor" xmlns:ns0="http://www.coresystems.ch/webservices" xmlns:ns1="http://coresystems.ch/bt/xsd/createServiceCall"> <!-- IMPORTS OF WSDL FILES --> <import namespace="http://coresystems.ch/bt/wsdl/createServiceCall" location="createServiceCall.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/> <!-- PARTNER LINK DECLARATION --> <partnerLinks> <partnerLink name="ClientPartnerLink" partnerLinkType="nswsdl:ClientPartnerLink" myRole="customer"/> </partnerLinks> <!-- VARIABLE DECLARATIONS --> <variables> <variable name="businessPartnerID" type="xsd:string"/> <variable name="serviceCallID" type="xsd:string"/> <variable name="systemOrEquipIsChosen" type="xsd:boolean"/> <variable name="openServiceCallInput" messageType="nswsdl:openServiceRequestInMessage"/> <variable name="openServiceCallOutput" messageType="nswsdl:openServiceRequestOutMessage"/> </variables> <!-- PROCESS ITSELF --> <correlationSets> <correlationSet name="serviceCallCreation" properties="nswsdl:requestID"/> </correlationSets> <eventHandlers> <onEvent partnerLink="ClientPartnerLink" operation="getSystems" portType="nswsdl:openServiceRequest" variable="getSystemsIn" messageType="nswsdl:getSystemsOperationRequest"> <correlations> <correlation set="serviceCallCreation" initiate="no"/> </correlations> <scope name="Scope1"> <variables> <variable name="getSystemsOut" messageType="nswsdl:getSystemsOperationResponse"/> <variable name="getSystemsIn" messageType="nswsdl:getSystemsOperationRequest"/> </variables> <sequence name="Sequence1"> <assign name="Assign1"> <copy> <from variable="serviceCallID"/> <to>$getSystemsOut.getSystemsObject/serviceCallID</to> </copy> </assign> <reply name="replyGetSystems" partnerLink="ClientPartnerLink" operation="getSystems" portType="nswsdl:openServiceRequest" variable="getSystemsOut"> <correlations> <correlation set="serviceCallCreation" initiate="no"/> </correlations> </reply> </sequence> </scope> </onEvent> </eventHandlers> <sequence name="mainSequence"> <receive name="openServiceCall" createInstance="yes" partnerLink="ClientPartnerLink" operation="openServiceRequest" portType="nswsdl:openServiceRequest" variable="openServiceCallInput"> <correlations> <correlation set="serviceCallCreation" initiate="yes"/> </correlations> </receive> <assign name="assignIDs"> <copy> <from>$openServiceCallInput.openServiceObject/businessPartnerID</from> <to variable="businessPartnerID"/> </copy> <copy> <from>$openServiceCallInput.openServiceObject/serviceCallID</from> <to variable="serviceCallID"/> </copy> <copy> <from>$openServiceCallInput.openServiceObject/serviceCallID</from> <to>$openServiceCallOutput.openServiceObject/serviceCallID</to> </copy> <copy> <from>true()</from> <to>$openServiceCallOutput.openServiceObject/serviceCreationSuccessfull</to> </copy> </assign> <reply name="openServiceCallReturn" partnerLink="ClientPartnerLink" operation="openServiceRequest" portType="nswsdl:openServiceRequest" variable="openServiceCallOutput"> <correlations> <correlation set="serviceCallCreation" initiate="no"/> </correlations> </reply> </sequence> </process>
createServiceCall.wsdl
<?xml version="1.0" encoding="UTF-8"?> <definitions name="createServiceCall" targetNamespace="http://coresystems.ch/bt/wsdl/createServiceCall" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://coresystems.ch/bt/wsdl/createServiceCall" xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" xmlns:vprop="http://docs.oasis-open.org/wsbpel/2.0/varprop" xmlns:ns0="http://coresystems.ch/bt/xsd/createServiceCall" xmlns:ns1="http://coresystems.ch/bt/xsd/createServiceCall"> <!-- MESSAGES --> <types> <xsd:schema targetNamespace="http://coresystems.ch/bt/wsdl/createServiceCall" xmlns:tns="http://coresystems.ch/bt/wsdl/createServiceCall" xmlns:ns2="http://www.coresystems.ch/webservices"> <xsd:import schemaLocation="createServiceCallSchema.xsd" namespace="http://www.coresystems.ch/webservices"/> <xsd:element name="openServiceRequestInType"> <xsd:complexType> <xsd:sequence> <xsd:element name="businessPartnerID" type="xsd:string"></xsd:element> <xsd:element name="serviceCallID" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="openServiceRequestOutType"> <xsd:complexType> <xsd:sequence> <xsd:element name="serviceCreationSuccessfull" type="xsd:boolean"></xsd:element> <xsd:element name="serviceCallID" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="getSystemsInType"> <xsd:complexType> <xsd:sequence> <xsd:element name="serviceCallID" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="getSystemsOutType"> <xsd:complexType> <xsd:sequence> <xsd:element name="serviceCallID" type="xsd:string"></xsd:element> <xsd:element name="systemArray" type="ns2:ArrayOfBPSystemInfo"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </types> <message name="openServiceRequestInMessage"> <part name="openServiceObject" element="tns:openServiceRequestInType"/> </message> <message name="openServiceRequestOutMessage"> <part name="openServiceObject" element="tns:openServiceRequestOutType"/> </message> <message name="getSystemsOperationRequest"> <part name="getSystemsObject" element="tns:getSystemsInType"/> </message> <message name="getSystemsOperationResponse"> <part name="getSystemsObject" element="tns:getSystemsOutType"/> </message> <portType name="openServiceRequest"> <operation name="openServiceRequest"> <input name="input" message="tns:openServiceRequestInMessage"/> <output name="output" message="tns:openServiceRequestOutMessage"/> </operation> <operation name="getSystems"> <input name="input1" message="tns:getSystemsOperationRequest"/> <output name="output1" message="tns:getSystemsOperationResponse"/> </operation> </portType> <!-- PARTNERLINKS --> <plnk:partnerLinkType name="ClientPartnerLink"> <plnk:role name="customer" portType="tns:openServiceRequest"/> </plnk:partnerLinkType> <vprop:property name="requestID" type="xsd:string"/> <vprop:propertyAlias propertyName="tns:requestID" messageType="tns:openServiceRequestOutMessage" part="openServiceObject"> <vprop:query>/tns:openServiceRequestOutType/serviceCallID</vprop:query> </vprop:propertyAlias> <vprop:propertyAlias propertyName="tns:requestID" messageType="tns:getSystemsOperationRequest" part="getSystemsObject"> <vprop:query>/tns:getSystemsInType/serviceCallID</vprop:query> </vprop:propertyAlias> <vprop:propertyAlias propertyName="tns:requestID" messageType="tns:getSystemsOperationResponse" part="getSystemsObject"> <vprop:query>/tns:getSystemsOutType/serviceCallID</vprop:query> </vprop:propertyAlias> <vprop:propertyAlias propertyName="tns:requestID" messageType="tns:openServiceRequestInMessage" part="openServiceObject"> <vprop:query>/tns:openServiceRequestInType/serviceCallID</vprop:query> </vprop:propertyAlias> </definitions>