Как реализовать конечную точку динамической партнерской ссылки в WSO2 BPS?

Я пытаюсь реализовать партнерскую ссылку с динамически определяемым адресом конечной точки в процессе WSO2 BPS BPEL. Идея состоит в том, что запрос, отправленный процессу, содержит URL-адрес конечной точки, и этот URL-адрес используется в качестве адреса для определенной партнерской ссылки. Раньше я успешно использовал ссылки на конечные точки, хранящиеся в реестре, но я не могу использовать этот подход здесь, поскольку адрес может меняться каждый раз при вызове процесса.

Я пробовал несколько разных подходов (используя WSO2 BPS 3.5.1 и WS02 Developer Studio 3.8.0):

  • Подход, использованный в примере DynPartner, упоминается в https://stackoverflow.com/questions/11092515/dynamic-partner-links-and-dynamic-addressing-with-ode-bpel. Это дает мне следующую ошибку проверки в Developer Studio: The from-spec of "<xs:simpleType "string">" is not compatible with to-spec of "<wsdl:portType "DynResponderPortType">". Кроме того, когда я развертываю и вызываю процесс, я получаю сообщение об ошибке, указывающее, что конечная точка не может быть создана (Couldnt create any endpoint for element ...)

  • Присвоение фиксированного значения партнерской ссылке, например. так:

    <wsa:EndpointReference xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wsdl11="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com uep_schema.xsd">
       <wsa:Address>http://localhost:8281/services/serviceaddress</wsa:Address>
    </wsa:EndpointReference>
    

    Это работает и не дает ошибки проверки, но я не нашел способа динамически изменить адрес, который используется здесь, на основе входных данных, с которыми вызывается мой процесс.

  • Создайте переменную, содержащую ссылку на конечную точку, используя тип, определяющий содержимое ссылки на конечную точку. Я пробовал несколько XSD (http://docs.oasis-open.org/wsbpel/2.0/OS/serviceref/ws-bpel_serviceref.xsd, http://svn.wso2.org/repos/wso2/carbon/platform/branches/turing/components/unified-endpoint/org.wso2.carbon.unifiedendpoint.core/4.2.0/src/main/resources/schema/uep_schema.xsd (который не проходит проверку без ошибок), ws-addr.xsd от w3c, мой собственный очень простой XSD). У меня были разные успехи в отношении того, насколько хорошо Developer Studio может обрабатывать их и, например, генерировать инициализации, но все они разделяют проблему, заключающуюся в том, что я получаю ошибку проверки, указывающую что-то вроде The from-spec of "<element "EndpointReference">" is not compatible with to-spec of "<wsdl:portType "ThisIsThePartnerLinkPortType">" -.

На данный момент я использую последний подход с моим собственным простым XSD. Процесс на самом деле работает так, как я предполагал, но я все еще получаю ошибки проверки в Developer Studio, от которых я хотел бы избавиться. Есть ли другой и лучший способ приблизиться к этому?

Заранее спасибо за вашу помощь.


person curledUpSheep    schedule 18.04.2016    source источник


Ответы (1)


Для тех, у кого возникла та же проблема: сейчас используется подход, заключающийся в том, что BPS вызывает определенный прокси-сервер в ESB (в фиксированном месте) и предоставляет URL-адрес конечной точки для этого прокси-сервера. Затем прокси выполняет фактический вызов конечной точки.

Для меня это имеет ряд преимуществ:

  • Я избавляюсь от ошибок проверки в дизайнере BPEL
  • Прохождение через ESB позволяет мне выполнять проверку сообщения, которое я получаю от службы, расположенной по динамическому URL-адресу. Обратите внимание, что в настоящее время это невозможно в BPS, поскольку проверка еще не реализована должным образом. См. также https://docs.wso2.com/display/BPS351/WS-BPEL+2.0+Specification+Compliance
person curledUpSheep    schedule 07.09.2016