BPEL和selectionFailure错误

时间:2011-12-25 09:54:14

标签: java web-services apache axis bpel

我是bpel的新手,我只是测试一个If-else。 我使用eclipse创建的bpel文件是:IfElseSample.bpel

它成功部署时没有错误,但是当我尝试使用简单的代码测试它时:

   try {
        tps.bpel.ifelse.IfElseSample_Service service = new tps.bpel.ifelse.IfElseSample_Service();
        tps.bpel.ifelse.IfElseSample port = service.getIfElseSamplePort();
        tps.bpel.ifelse.IfElseSampleRequest payload = new tps.bpel.ifelse.IfElseSampleRequest();
        payload.setInput("John");
        tps.bpel.ifelse.IfElseSampleResponse result = port.process(payload); //Exception  occur here
        System.out.println("Result = "+result);
    } catch (Exception ex) {
        System.out.println("Exception=> "+ex);
    }

我收到了一个异常错误:

  

javax.xml.ws.soap.SOAPFaultException:axis2ns6575:selectionFailure

此处全部是my eclipse project。 我使用:

  1. Apache的Tomcat的7.0.23
  2. Apache的赋战-1.3.5
  3. 适用于Web开发人员的Eclipse Java EE IDE。版本:Indigo Service Release 1
  4. 感谢。

1 个答案:

答案 0 :(得分:3)

BPEL标准要求在对其执行XPath查询之前初始化变量。在您的示例中,您要为未初始化的输出变量赋值。由于未初始化的变量为空,因此XPath表达式tns:result不会选择任何节点,因此会抛出selectionFailure。您需要首先初始化变量(例如,在开头的<assign>活动中)。 Eclipse BPEL设计器可以为您做到这一点(它通常会询问您是否要初始化变量)。代码应该大致如下:

<bpel:assign>
  <bpel:copy>
    <bpel:from>
      <bpel:literal>
        <payload><tns:result/></payload>
      </bpel:literal>
    </bpel:from>
    <bpel:to>$output.payload</bpel:to>
  </bpel:copy>
</bpel:assign>