Мне нужно извлечь действия и их XPath процесса BPEL из XML-файла.
Я знаком с теорией BPEL, но не с самим форматом файла. Если я читаю файл BPEL, мне трудно определить конкретные действия. Не говоря уже о XPath.
Как мне проанализировать файл BPEL таким образом, чтобы получить все действия, независимо от типа оркестровки и их XPath?
пс: в джаве
РЕДАКТИРОВАТЬ: что я хочу извлечь
<name>CallService1Op2</name>
<xpath>/process/sequence[1]/invoke[1]</xpath>
(xml-теги на самом деле не в xml. Это просто для указания того, что я хочу.)
Из следующей bpel:последовательности
<bpel:sequence name="main">
<!-- Receive input from requester.
Note: This maps to operation defined in LoadProcess.wsdl
-->
<bpel:receive name="receiveInput" partnerLink="client"
portType="tns:LoadProcess"
operation="process" variable="input"
createInstance="yes"/>
<!-- Generate reply to synchronous request -->
<bpel:assign validate="no" name="Assign">
<bpel:copy>
<bpel:from><bpel:literal><impl:callService2 xmlns:impl="http://loadWS.iaas.unistuttgart.de" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<impl:sleepMiliSeconds>0</impl:sleepMiliSeconds>
</impl:callService2>
</bpel:literal></bpel:from>
<bpel:to variable="Service1PLRequest" part="parameters"></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:input]]></bpel:query>
</bpel:from>
<bpel:to part="parameters" variable="Service1PLRequest">
<bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[ns:sleepMiliSeconds]]></bpel:query>
</bpel:to>
</bpel:copy>
</bpel:assign>
<bpel:invoke name="CallService1Op2" partnerLink="Service1PL" operation="callService2" portType="ns:Service1" inputVariable="Service1PLRequest" outputVariable="Service1PLResponse"></bpel:invoke>
<bpel:assign validate="no" name="Assign1">
<bpel:copy>
<bpel:from><bpel:literal><tns:LoadProcessResponse xmlns:tns="de.unistuttgart.iaas.bpel.loadProcess" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tns:result>tns:result</tns:result>
</tns:LoadProcessResponse>
</bpel:literal></bpel:from>
<bpel:to variable="output" part="payload"></bpel:to>
</bpel:copy>
<bpel:copy>
<bpel:from part="parameters" variable="Service1PLResponse">
<bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[ns:callService2Return]]></bpel:query>
</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:reply name="replyOutput"
partnerLink="client"
portType="tns:LoadProcess"
operation="process"
variable="output"
/>
</bpel:sequence>
выше приведен довольно простой пример. xpath чаще выглядит как
/process/sequence[1]/sequence[1]/repeatUntil[1]/sequence[1]/invoke[1]
потому что активность вложена в последовательности, потоки, циклы, если или что-то еще.
РЕДАКТИРОВАТЬ2:
Вариант использования: процесс BPEL выполняется на Apache-ODE. Apache-ODE выдает события для запуска/остановки/независимо от процесса/действия. Событие содержит только XPath. Но я хочу видеть имя, поэтому мне нужно сопоставить его с XPath.