Разобрать файл BPEL для извлечения действий + XPath

Мне нужно извлечь действия и их 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.


person snippl    schedule 13.12.2012    source источник
comment
Есть ли вариант использования для этого? Вы пытались использовать bpel lib? Что касается вашего вопроса, вы просто хотите иметь список действий без порядка? Или вы хотите сохранить структуру? а что именно вы хотите извлечь?   -  person florent    schedule 13.12.2012
comment
Вариант использования: процесс BPEL выполняется на Apache-ODE. Apache-ODE выдает события для запуска/остановки/независимо от процесса/действия. Событие содержит только XPath. Но я хочу увидеть имя, поэтому мне нужно его с чем-то сопоставить. Порядок не важен. Я хочу извлечь имя действия и его XPath (отредактировал мой вопрос).   -  person snippl    schedule 13.12.2012
comment
можете ли вы добавить образец BPEL вместе с тем, что вы хотите извлечь? Это помогло бы :)   -  person florent    schedule 13.12.2012
comment
Итак, вы хотите найти действие по имени, а затем получить его локатор xpath? правильно?   -  person florent    schedule 13.12.2012
comment
Я хочу получить имя и xpath каждого действия. Я тоже не знаю.   -  person snippl    schedule 13.12.2012
comment
Возможная копия этого stackoverflow. com/questions/2495740/how-to-parse-wsdl-in-java/   -  person Sree    schedule 18.12.2012
comment
Я надеюсь, что это может помочь. Однако я не слишком уверен, потому что wsdl != bpel. Это и xml, но bpel совсем не так прост, как wsdl.   -  person snippl    schedule 18.12.2012


Ответы (1)


Я думаю, вам следует проверить этот пост: Получите Xpath из org.w3c. дом.Узел

Также в нем упоминается эта библиотека: http://code.google.com/p/joox/ что кажется полезным

Что бы я сделал: общий Xpath для перечисления всех узлов активности из xml. Затем, используя Dom или joox lib, если он у вас хорошо работает (отказ от ответственности, не тестировался), вы получаете имя и строку xpath...

Надеюсь это поможет

person florent    schedule 14.12.2012
comment
Я бы тоже хотел использовать jOOX. Я даже нашел по вашей ссылке пример Generate/get xpath from XML узел Java. Но не могу понять, как им правильно пользоваться. - person snippl; 14.12.2012