Веб-сервисы Java и BPEL - PullRequest
       8

Веб-сервисы Java и BPEL

1 голос
/ 04 октября 2010

Я немного пытаюсь использовать этот веб-сервис (это домашнее задание, но не домашнее задание). Этот процесс BPEL, кажется, обеспечивает асинхронные обратные вызовы, я просто не уверен, как именно его использовать. Wsimport сгенерировал классы ниже:

> AttributedQName.java
> AttributedURI.java
> EndpointReferenceType.java
> N6368808CreditFlow.java
> N6368808CreditFlowCallback.java
> N6368808CreditFlowCallbackService.java
> N6368808CreditFlowProcessRequest.java
> N6368808CreditFlowProcessResponse.java
> N6368808CreditFlow_Service.java
> ObjectFactory.java
> ReferencePropertiesType.java
> Relationship.java ServiceNameType.java
> package-info.java

N6368808CreditFlow.java - это интерфейс с методом init, который, как я полагаю, является методом кредита, так как это единственный доступный метод, он принимает запрос в качестве параметра. Принимая во внимание, что N6368808CreditFlowCallback.java содержит метод onResult, который принимает Response в качестве параметра.

Как можно использовать эту услугу? Я был в состоянии вызвать метод, но не получил ответ, отправленный обратно (не уверен, как получить ответ, так как метод onResult ничего не делает, и метод initiate возвращает void (даже не обратный вызов или ответ)).

Вот мой код:

    N6368808CreditFlow_Service service1 = new N6368808CreditFlow_Service();
    N6368808CreditFlow port = service1.getN6368808CreditFlowPort();
    N6368808CreditFlowProcessRequest rqt = new N6368808CreditFlowProcessRequest();
    rqt.setSsn("123456789");
    port.initiate(rqt);
    System.out.println("Done");

Который в соответствии с консолью BPEL работает и ей выдается "123456789", мой вопрос: как вы получаете ответ?

Вот фрагмент из источника BPEL:

<sequence name="main">

<!--

 Receive input from requestor. (Note: This maps to operation defined in n6368808_CreditFlow.wsdl) 

-->

<receive name="receiveInput" partnerLink="client" portType="client:n6368808_CreditFlow" operation="initiate" variable="inputVariable" createInstance="yes"/>

<!--


          Asynchronous callback to the requester. (Note: the callback location and correlation id is transparently handled using WS-addressing.)


-->

- <scope name="getCreditRating">

- <sequence name="Sequence_1">

- <assign name="assign_SSN">

- <copy>

<from variable="inputVariable" part="payload" query="/client:n6368808_CreditFlowProcessRequest/client:ssn"/>

<to variable="invoke_CRS_process_InputVariable" part="payload" query="/ns1:ssn"/>

</copy>

</assign>

<invoke name="invoke_CRS" partnerLink="CreditRatingService" portType="ns1:CreditRatingService" operation="process" inputVariable="invoke_CRS_process_InputVariable" outputVariable="invoke_CRS_process_OutputVariable"/>

- <assign name="return_SSN">

- <copy>

<from variable="invoke_CRS_process_OutputVariable" part="payload" query="/ns1:rating"/>

<to variable="outputVariable" part="payload" query="/client:n6368808_CreditFlowProcessResponse/client:creditRating"/>

</copy>

</assign>

</sequence>

</scope>

<invoke name="callbackClient" partnerLink="client" portType="client:n6368808_CreditFlowCallback" operation="onResult" inputVariable="outputVariable"/>

</sequence>

</process>

1 Ответ

0 голосов
/ 07 октября 2010

Ваш процесс BPEL действительно асинхронный, экземпляр процесса запускается, когда сообщение получает действие получения, ответ отправляется через действие вызова. Чтобы получить ответ, вашему клиенту Java необходимо открыть конечную точку веб-службы, которая реализует клиент: тип порта n6368808_CreditFlowCallback. То, как механизм BPEL определяет адрес конечной точки обратного вызова, зависит от механизма. Теоретически, роль партнера партнерской ссылки инициализируется с полученным сообщением (то есть сообщение должно сообщать EPR обратного вызова). Однако это зависит от того, реализует ли ваш BPEL-механизм инициализацию ролей партнеров.

Обычно я рекомендую использовать парадигму асинхронного моделирования процессов, поскольку она всегда поддерживает длительные процессы. Однако если вы используете асинхронный транспортный протокол (например, JMS) или абсолютно уверены в том, что вызываемые веб-службы работают недостаточно (то есть маловероятно, что вся обработка занимает больше времени, чем тайм-аут соединения HTTP), вы можете рассмотреть моделирование процесса синхронным заменив вызов ответом (для той же партнерской ссылки, типа порта и операции, что и для получения). В случае сомнений придерживайтесь асинхронной модели.

...