OpenESB CASA: несколько операций в одном WSDL

У меня есть ряд конечных точек веб-сервисов, которые обеспечивают базовые операции CRUD над моими сущностями. Например, возьмите следующие методы WS: userService?wsdl --getUser(id) --getUsers --addUser(User) --removeUser(id)

Я хотел бы создать ЦС на OpenESB, чтобы обеспечить единую конечную точку прокси для всех этих операций.

Итак, что я делаю, так это создаю новый модуль BPEL в NetBeans, затем добавляю новый документ WSDL, который будет моим дескриптором. Затем я добавляю в этот WSDL несколько операций.

Затем я создаю BPEL для каждой операции, реализованной в моей серверной WS.

Это эффективно дает мне результирующий вывод WSDL с несколькими операциями.

Проблема возникает при добавлении этого модуля BPEL в мой ЦС; При связывании порта с PartnerLink я могу сделать это только один раз для каждого порта. Более наглядно это видно на этом скриншоте:

введите здесь описание изображения

Я могу проследить только одну «стрелку» от aulaServicesPort до одной PartnerLink, тогда как мне нужно было бы связать ее с обеими операциями, показанными на скриншоте.

Это приводит к нескольким WSDL, по одному для каждой операции, в то время как я хотел бы создать своего рода «концентратор» WSDL, включая все связанные операции (в моем предыдущем примере это был бы пользовательский ЦС со всеми заданными операциями)


person MichelReap    schedule 21.11.2014    source источник


Ответы (1)


Я не думаю, что вы можете решить это в CA, но вы, вероятно, могли бы решить это, изменив процесс BPEL.

Лучший способ добиться этого в текущей структуре — сократить приложение до одного процесса с одним myRole partnerLink. Это означает, что вместо нескольких процессов с парами получения/ответа вы должны построить один процесс с начальным pick и несколькими параллельными ветвями. Грубая структура выглядит так:

<pick name="ServiceSelector" createInstance="yes">

     <!-- Each onMessage replaces one of your original processes -->
     <onMessage partnerLink="aulaLink" operation="getAula" portType="aulaServicesPortType">
         <sequence name="Sequence">
              <!-- call the actual service for getAula-->
              <reply name="ReplyToGetAula" partnerLink="aulaLink" operation="getAula" portType="aulaServicesPortType"/>
         </sequence>
    </onMessage>

     <onMessage partnerLink="aulaLink" operation="getAulas" portType="aulaServicesPortType">
         <sequence name="Sequence">
              <!-- call the actual service for getAulas-->
              <reply name="ReplyToGetAula" partnerLink="aulaLink" operation="getAulas" portType="aulaServicesPortType"/>
         </sequence>
    </onMessage>

</pick>
person joergl    schedule 27.11.2014
comment
Я не могу, потому что мой тип порта одинаков для обоих ParnterLinkType. Можем ли мы обсудить это в чате? Я покажу вам свой BPEL. - person MichelReap; 27.11.2014
comment
Да, мы можем (пока я нахожусь за своим компьютером). Можешь создать комнату и пригласить? Если вы используете один и тот же тип порта, то я не совсем понимаю, почему вы используете несколько типов partnerLinkTypes/partnerLink. - person joergl; 28.11.2014