gpt4 book ai didi

Java Web 服务和 BPEL

转载 作者:行者123 更新时间:2023-12-01 05:53:22 25 4
gpt4 key购买 nike

我在尝试使用此网络服务时遇到了一些困难(它与作业相关,但不是实际的作业)。这个 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 是具有启动方法的接口(interface),我假设信用方法是因为它是唯一可用的方法,它接受请求作为参数。而 N6368808CreditFlowCallback.java 包含一个 onResult 方法,该方法将 Response 作为参数。

如何使用这项服务?我已经能够调用该方法,但没有收到发回的响应(不知道如何获得响应,因为 onResult 方法不执行任何操作,并且启动方法返回 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>

最佳答案

您的 BPEL 流程确实是异步的,流程实例在接收 Activity 使用消息时启动,响应通过调用 Activity 发送。为了接收响应,您的 Java 客户端需要打开一个实现 client:n6368808_CreditFlowCallback 端口类型的 Web 服务端点。 BPEL 引擎如何确定回调的端点地址是引擎特定的。理论上,合作伙伴链路的合作伙伴角色通过接收到的消息进行初始化(即该消息需要传达回调 EPR)。然而,这取决于您的 BPEL 引擎是否以及如何实现合作伙伴角色的初始化。

通常我建议使用异步流程建模范例,因为它始终支持长时间运行的流程。然而,如果您使用异步传输协议(protocol)(如 JMS)或绝对确定所调用的 Web 服务运行不足(即整个处理时间不太可能超过 HTTP 连接超时),您可以考虑对流程进行同步建模,通过用回复替换调用(与接收相同的合作伙伴链接、端口类型和操作)。如果有疑问,请坚持使用异步模型。

关于Java Web 服务和 BPEL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3854060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com