无法接收 HumanTask 对 BPEL 流程的响应

Unable to receive HumanTask response to the BPEL process


我对 WSO2 BPS 3.2.0 和 BPEL 都很陌生。我使用 bpel4people 扩展创建了一个用于触发 HumanTask 的 BPEL 流程。为此,我使用了 BPS 附带的示例人工任务。我可以成功解雇任务。但是一旦我完成任务,我的 bpel 流程就不会收到任务的响应。有什么特别的程序可以得到回复吗?这是我的 bpel 进程和 HumanTask 的 WSDL 文件。

bpel 文件..

<!-- JavaTraining BPEL Process [Generated by the Eclipse BPEL Designer] -->
<!-- Date: Mon Mar 05 12:13:11 IST 2012 -->
<bpel:process name="JavaTraining" targetNamespace="http://loits.com/bps/training" suppressJoinFailure="yes" xmlns:tns="http://loits.com/bps/training" xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:ns1="http://www.w3.org/2001/XMLSchema"
xmlns:ns2="http://www.example.com/claims/" xmlns:xsd="http://www.example.com/claims/schema" xmlns:b4p="http://docs.oasis-open.org/ns/bpel4people/bpel4people/200803">

  <!-- Import the client WSDL -->
  <bpel:extensions>
    <bpel:extension namespace="http://docs.oasis-open.org/ns/bpel4people/bpel4people/200803" mustUnderstand="yes"></bpel:extension>
  </bpel:extensions>
  <bpel:import namespace="http://www.example.com/claims/" location="ClaimsApprovalTask.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"></bpel:import>
  <bpel:import location="JavaTrainingArtifacts.wsdl" namespace="http://loits.com/bps/training" importType="http://schemas.xmlsoap.org/wsdl/" />

  <!-- ================================================================= -->
  <!-- PARTNERLINKS                                                      -->
  <!-- List of services participating in this BPEL process               -->
  <!-- ================================================================= -->
  <bpel:partnerLinks>
    <!-- The 'client' role represents the requester of this service. -->
    <bpel:partnerLink name="client" partnerLinkType="tns:JavaTraining" myRole="JavaTrainingProvider" />
    <bpel:partnerLink name="b4pPtlnk" partnerLinkType="tns:b4pPtlnkType" myRole="requester" partnerRole="receiever"></bpel:partnerLink>
  </bpel:partnerLinks>

  <!-- ================================================================= -->
  <!-- VARIABLES                                                         -->
  <!-- List of messages and XML documents used within this BPEL process  -->
  <!-- ================================================================= -->
  <bpel:variables>
    <!-- Reference to the message passed as input during initiation -->
    <bpel:variable name="input" messageType="tns:JavaTrainingRequestMessage" />

    <!-- 
          Reference to the message that will be returned to the requester
          -->
    <bpel:variable name="output" messageType="tns:JavaTrainingResponseMessage" />
    <bpel:variable name="dummyVar" type="ns1:boolean"></bpel:variable>
    <bpel:variable name="b4pIn" messageType="ns2:ClaimApprovalRequest"></bpel:variable>
    <bpel:variable name="b4pOut" messageType="ns2:ClaimApprovalResponse"></bpel:variable>
  </bpel:variables>

  <!-- ================================================================= -->
  <!-- ORCHESTRATION LOGIC                                               -->
  <!-- Set of activities coordinating the flow of messages across the    -->
  <!-- services integrated within this business process                  -->
  <!-- ================================================================= -->
  <bpel:sequence name="main">

    <!-- Receive input from requester. 
             Note: This maps to operation defined in JavaTraining.wsdl 
             -->
    <bpel:receive name="receiveInput" partnerLink="client" portType="tns:JavaTraining" operation="process" variable="input" createInstance="yes" />

    <!-- Generate reply to synchronous request -->
    <bpel:if name="If_amount_1000">
      <bpel:condition expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
        <![CDATA[number($input.payload/tns:amount) > number(1000)]]>
      </bpel:condition>
      <bpel:sequence>
        <bpel:assign validate="no" name="Assign1">
          <bpel:copy>
            <bpel:from>
              <bpel:literal>
                <tschema:ClaimApprovalData xmlns:tschema="http://www.example.com/claims/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                  <tschema:cust>
                    <tschema:id>tschema:id</tschema:id>
                    <tschema:firstname>tschema:firstname</tschema:firstname>
                    <tschema:lastname>tschema:lastname</tschema:lastname>
                  </tschema:cust>
                  <tschema:amount>0.0</tschema:amount>
                  <tschema:region>tschema:region</tschema:region>
                  <tschema:priority>0</tschema:priority>
                </tschema:ClaimApprovalData>
              </bpel:literal>
            </bpel:from>
            <bpel:to variable="b4pIn" part="ClaimApprovalRequest"></bpel:to>
          </bpel:copy>
          <bpel:copy>
            <bpel:from part="payload" variable="input">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[tns:customer/tns:custId]]>
              </bpel:query>
            </bpel:from>
            <bpel:to part="ClaimApprovalRequest" variable="b4pIn">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[xsd:cust/xsd:id]]>
              </bpel:query>
            </bpel:to>
          </bpel:copy>
          <bpel:copy>
            <bpel:from part="payload" variable="input">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[tns:customer/tns:firstName]]>
              </bpel:query>
            </bpel:from>
            <bpel:to part="ClaimApprovalRequest" variable="b4pIn">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[xsd:cust/xsd:firstname]]>
              </bpel:query>
            </bpel:to>
          </bpel:copy>
          <bpel:copy>
            <bpel:from part="payload" variable="input">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[tns:customer/tns:lastName]]>
              </bpel:query>
            </bpel:from>
            <bpel:to part="ClaimApprovalRequest" variable="b4pIn">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[xsd:cust/xsd:lastname]]>
              </bpel:query>
            </bpel:to>
          </bpel:copy>
          <bpel:copy>
            <bpel:from part="payload" variable="input">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[tns:amount]]>
              </bpel:query>
            </bpel:from>
            <bpel:to part="ClaimApprovalRequest" variable="b4pIn">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[xsd:amount]]>
              </bpel:query>
            </bpel:to>
          </bpel:copy>
          <bpel:copy>
            <bpel:from part="payload" variable="input">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[tns:priority]]>
              </bpel:query>
            </bpel:from>
            <bpel:to part="ClaimApprovalRequest" variable="b4pIn">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[xsd:priority]]>
              </bpel:query>
            </bpel:to>
          </bpel:copy>
          <bpel:copy>
            <bpel:from part="payload" variable="input">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[tns:region]]>
              </bpel:query>
            </bpel:from>
            <bpel:to part="ClaimApprovalRequest" variable="b4pIn">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[xsd:region]]>
              </bpel:query>
            </bpel:to>
          </bpel:copy>

        </bpel:assign>
        <bpel:extensionActivity>
          <b4p:peopleActivity name="HumanTask" inputVariable="b4pIn" outputVariable="b4pOut">
            <b4p:remoteTask partnerLink="b4pPtlnk" operation="approve" responseOperation="approvalResponse"></b4p:remoteTask>
          </b4p:peopleActivity>
        </bpel:extensionActivity>

        <bpel:assign validate="no" name="Assign3">
          <bpel:copy>
            <bpel:from part="ClaimApprovalResponse" variable="b4pOut">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[xsd:approved]]>
              </bpel:query>
            </bpel:from>
            <bpel:to variable="dummyVar"></bpel:to>
          </bpel:copy>
        </bpel:assign>
        <bpel:if name="If_approved">
          <bpel:condition expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
            <![CDATA[$dummyVar = true()]]>
          </bpel:condition>
          <bpel:assign validate="no" name="Assign">
            <bpel:copy>
              <bpel:from>
                <bpel:literal>
                  <tns:JavaTrainingResponse xmlns:tns="http://loits.com/bps/training" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                    <tns:result>tns:result</tns:result>
                  </tns:JavaTrainingResponse>
                </bpel:literal>
              </bpel:from>
              <bpel:to variable="output" part="payload"></bpel:to>
            </bpel:copy>
            <bpel:copy>
              <bpel:from expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA["Approved"]]>
              </bpel:from>
              <bpel:to part="payload" variable="output">
                <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                  <![CDATA[tns:result]]>
                </bpel:query>
              </bpel:to>
            </bpel:copy>
          </bpel:assign>
          <bpel:else>
            <bpel:assign validate="no" name="Assign4">
              <bpel:copy>
                <bpel:from>
                  <bpel:literal>
                    <tns:JavaTrainingResponse xmlns:tns="http://loits.com/bps/training" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                      <tns:result>tns:result</tns:result>
                    </tns:JavaTrainingResponse>
                  </bpel:literal>
                </bpel:from>
                <bpel:to variable="output" part="payload"></bpel:to>
              </bpel:copy>
              <bpel:copy>
                <bpel:from expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                  <![CDATA["Rejected"]]>
                </bpel:from>
                <bpel:to part="payload" variable="output">
                  <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                    <![CDATA[tns:result]]>
                  </bpel:query>
                </bpel:to>
              </bpel:copy>
            </bpel:assign>
          </bpel:else>
        </bpel:if>
      </bpel:sequence>
      <bpel:else>
        <bpel:assign validate="no" name="Assign2">

          <bpel:copy>
            <bpel:from>
              <bpel:literal>
                <tns:JavaTrainingResponse xmlns:tns="http://loits.com/bps/training" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                  <tns:result>tns:result</tns:result>
                </tns:JavaTrainingResponse>
              </bpel:literal>
            </bpel:from>
            <bpel:to variable="output" part="payload"></bpel:to>
          </bpel:copy>
          <bpel:copy>
            <bpel:from expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
              <![CDATA["Approved Automatically"]]>
            </bpel:from>
            <bpel:to part="payload" variable="output">
              <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                <![CDATA[tns:result]]>
              </bpel:query>
            </bpel:to>
          </bpel:copy>
        </bpel:assign>
      </bpel:else>
    </bpel:if>
    <bpel:reply name="replyOutput" partnerLink="client" portType="tns:JavaTraining" operation="process" variable="output" />
  </bpel:sequence>
</bpel:process>


和 wsdl..

<?xml version="1.0" encoding="UTF-8" ?>
<wsdl:definitions name="ClaimApproval" targetNamespace="http://www.example.com/claims/" xmlns:tns="http://www.example.com/claims/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tschema="http://www.example.com/claims/schema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype">
  <wsdl:documentation>
    Example for WS-HumanTask 1.1 - WS-HumanTask Task Interface Definition
  </wsdl:documentation>
  <wsdl:types>
    <xsd:schema targetNamespace="http://www.example.com/claims/schema" xmlns:tns="http://www.example.com/claims/schema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
      <xsd:element name="ClaimApprovalData" type="tns:ClaimApprovalDataType" />
      <xsd:complexType name="ClaimApprovalDataType">
        <xsd:sequence>
          <xsd:element name="cust">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="id" type="xsd:string">
                </xsd:element>
                <xsd:element name="firstname" type="xsd:string">
                </xsd:element>
                <xsd:element name="lastname" type="xsd:string">
                </xsd:element>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>

          <xsd:element name="amount" type="xsd:double" />
          <xsd:element name="region" type="xsd:string" />
          <xsd:element name="priority" type="xsd:int" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="ClaimApprovalNotificationData" type="tns:ClaimApprovalNotificationDataType" />
      <xsd:complexType name="ClaimApprovalNotificationDataType">
        <xsd:sequence>
          <xsd:element name="firstname" type="xsd:string" />
          <xsd:element name="lastname" type="xsd:string" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="ClaimApprovalResponse" type="tns:ClaimApprovalResponseType"></xsd:element>
      <xsd:complexType name="ClaimApprovalResponseType">
        <xsd:sequence>
          <xsd:element name="approved" type="xsd:boolean"></xsd:element>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
  </wsdl:types>

  <wsdl:message name="ClaimApprovalRequest">
    <wsdl:part name="ClaimApprovalRequest" element="tschema:ClaimApprovalData" />
  </wsdl:message>

  <wsdl:message name="ClaimApprovalResponse">
    <wsdl:part name="ClaimApprovalResponse" element="tschema:ClaimApprovalResponse" />
  </wsdl:message>

  <wsdl:message name="ClaimApprovalNotificationRequest">
    <wsdl:part name="ClaimApprovalNotificationRequest" element="tschema:ClaimApprovalNotificationData" />
  </wsdl:message>

  <wsdl:portType name="ClaimsHandlingPT">
    <wsdl:operation name="approve">
      <wsdl:input message="tns:ClaimApprovalRequest" />
    </wsdl:operation>

    <wsdl:operation name="escalate">
      <wsdl:input message="tns:ClaimApprovalRequest" />
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:portType name="ClaimsHandlingCallbackPT">
    <wsdl:operation name="approvalResponse">
      <wsdl:input message="tns:ClaimApprovalResponse" />
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:portType name="ClaimApprovalReminderPT">
    <wsdl:operation name="notify">
      <wsdl:input message="tns:ClaimApprovalNotificationRequest" />
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:binding name="ClaimSoapBinding" type="tns:ClaimsHandlingPT">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="approve">
      <soap:operation soapAction="urn:approve" style="document" />
      <wsdl:input>
        <soap:body use="literal" namespace="http://www.example.com/claims/" />
      </wsdl:input>
    </wsdl:operation>
    <wsdl:operation name="escalate">
      <soap:operation soapAction="urn:escalate" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:binding name="ClaimSoapBindingReminder" type="tns:ClaimApprovalReminderPT">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="notify">
      <soap:operation soapAction="urn:notify" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:binding name="ClaimSoapBindingCB" type="tns:ClaimsHandlingCallbackPT">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="approvalResponse">
      <soap:operation soapAction="urn:approvalResponse" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>

  <wsdl:service name="ClaimService">
    <wsdl:port name="ClaimPort" binding="tns:ClaimSoapBinding">
      <soap:address location="http://localhost:9763/services/ClaimService" />
    </wsdl:port>
  </wsdl:service>
  <wsdl:service name="ClaimReminderService">
    <wsdl:port name="ClaimReminderPort" binding="tns:ClaimSoapBindingReminder">
      <soap:address location="http://localhost:9763/services/ClaimReminderService" />
    </wsdl:port>
  </wsdl:service>
  <wsdl:service name="ClaimServiceCB">
    <wsdl:port name="ClaimPortCB" binding="tns:ClaimSoapBindingCB">
      <soap:address location="http://localhost:9763/services/ClaimServiceCB" />
    </wsdl:port>

  </wsdl:service>

</wsdl:definitions>

我终于来了
我们需要做的是在deploy.xml文件中对应provideactivity添加correlationFilter属性
通过添加此命名空间将提供 b4pFilter

xmlns:b4p="http://docs.oasis-open.org/ns/bpel4people/bpel4people/200803"

<provide partnerLink="b4p" correlationFilter="b4p:b4pFilter">
      <service name="biApprove:ClaimServiceCB" port="ClaimPortCB"/>
</provide>

deploy.xml

的完整代码
<?xml version="1.0" encoding="UTF-8"?>
<deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03" 
xmlns:biApprove="http://www.example.com/claims/" 
xmlns:sample="http://loits.com/bps/training"
xmlns:b4p="http://docs.oasis-open.org/ns/bpel4people/bpel4people/200803">
  <process name="sample:JavaTraining">
    <active>true</active>
    <retired>false</retired>
    <process-events generate="all"/>
    <provide partnerLink="client">
      <service name="sample:BpelTest" port="BpelTestPort"/>
    </provide>
    <provide partnerLink="b4p" correlationFilter="b4p:b4pFilter">
      <service name="biApprove:ClaimServiceCB" port="ClaimPortCB"/>
    </provide>
    <invoke partnerLink="b4p">
      <service name="biApprove:ClaimService" port="ClaimPort"/>
    </invoke>
  </process>
</deploy>