2011-05-09 3 views
-1

비즈니스 로직을 수행하는 BPEL 프로세스를 작성했습니다 (부서리스트의 데이터를 가져올 수 있음). 다음 활동에서 동일한 가져온 목록을 사용해야합니다.문제점 : BPEL Array 채우기

부서 목록에 대해 하나의 xsd를 만들고 요소를 추가하려면이 방법으로 가져온 목록을 배열에 넣고 다음 활동 (Java 포함)에 같은 배열을 사용할 수 있습니다.

내 첫 번째 자바 Embed 활동에서 다음 코드를 사용하여 배열을 채 웁니다. "부서/NS1 : 부서/NS1 [ 'I'] DEPTNAME/NS1"
{
setVariableData ("부서"

찾는 (; I < 10 난 ++ I = 0 INT) "값"); }

실행 중에 예외가 발생합니다.

<May 9, 2011 6:47:11 PM SGT> <Error> <oracle.soa.bpel.engine> <BEA-000000> <<BPELXExecLet::setVariableData> 
java.lang.ClassCastException: java.lang.Integer cannot be cast to org.w3c.dom.Element 
     at com.collaxa.cube.engine.ext.bpel.v1.nodes.BPELXExecLet.setVariableData(BPELXExecLet.java:750) 

오류가 발생하는 이유를 알려주십시오. 목표를 달성하기위한 대안적인 방법이 있습니다.

저는 Jdeveloper11.1.1.3.0과 SOA 11.1.1.3.0을 사용하고 있습니다.

다음은 내 xsd 부서입니다.

<?xml version="1.0" encoding="windows-1252" ?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.org" 
      targetNamespace="http://www.example.org" 
      elementFormDefault="qualified"> 

      <xsd:element name="department" type="DeptCollection"> 
      </xsd:element> 
    <xsd:complexType name="DeptCollection"> 
    <xsd:sequence > 
     <xsd:element name="Dept" type="Dept" minOccurs="0" maxOccurs="unbounded" nillable="true"/> 
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="Dept"> 
    <xsd:sequence> 
     <xsd:element name="DeptName" type="xsd:string" /> 
     <xsd:element name="HOD" type="xsd:string" /> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema> 

답변

0

내가 생각한대로 확대되고있는 것은 setVariableData("department","/ns1:department/ns1:Dept/ns1['i']:DeptName","value");입니다. 먼저 i의 값을 사용하여 두 번째 매개 변수를 문자열로 작성한 다음 setVariableData로 전달해야합니다.

+0

나는 이것을 또한 시도했다, 그것은 어떤 요소 변수를 기대하고있다 ... 응답을 주셔서 감사합니다. – Pedantic

+0

'i'의 값은 배열 표현의 인덱스입니다. – Pedantic

+0

for 루프의 i가 여기에 삽입 될 것으로 예상됩니까? 그렇지 않습니다. 다음과 같이해야합니다. string s = "/ ns1 : department/ns1 : Dept/ns1 [ '"+ i + "'] : DeptName"두 번째 인수로 s를 setVariableData로 전달합니다. – ColWhi