Oracle Service Bus在公开的SOAP服务中进行多项操作

时间:2016-07-11 11:29:58

标签: web-services soap soa jdeveloper oracle-service-bus

目前我正在使用JDeveloper 11开发OSB的ws。 我有一个简单的Web服务,它调用外部SOAP服务。

我的composite.xml文件:

enter image description here

  1. 我的BPEL Soap服务的操作

  2. 远程SOAP服务的操作

  3. BPEL组件

  4. 关于当前的发展战略我几乎没有问题。 如何向BPEL SOAP添加新操作?我通过编辑ApusBPELProcess.xsd(添加了新请求和响应类型)和ApusBPELProcess.wsdl(添加了新操作,添加了新方法)来添加新方法(getCompanyDetails())消息等)。 这是添加新操作的正确方法吗?

    现在我只能使用BPEL构造中的“Invoke”组件来调用远程SOAP服务的一个方法。

    我的BPEL设计:

    enter image description here

    如何从我的BPEL SOap(1)调用绑定方法到远程服务(2)的方法?例如:当客户端从我的BPEL肥皂调用方法process时(1),我想对输入参数进行一些验证,然后从远程SOAP(2)调用getServiceCompanies。因此,当客户端从BPEL Soap(1)调用另一个方法时,我想在远程SOAP上调用一些其他方法(2)。

    如果有人可以向我展示包含所需组件的图表,将非常感激。因为我读到了“Mediator”组件,但我不知道如何在我目前的情况下使用它们。

    提前致谢。

2 个答案:

答案 0 :(得分:2)

一个选项是,您可以使用Pick活动,该活动可以为BPEL服务公开的每个操作提供多个onMessage分支。 同样,Invoke活动有一个选项可以选择您需要调用的远程SOAP服务的操作。 因此,您的复合看起来像选择BPELoperation1的OnMessage分支的Pick活动,然后是逻辑进行验证然后使用remoteoperation1 selcted调用。另一个选择了BPELoperation2的onMEssage分支,逻辑进行验证并选择remoteoperation2进行调用。

答案 1 :(得分:0)

我找到了Mediator组件的解决方案。也许它会帮助别人。

好的,我在我的公开服务和远程服务之间添加了一个Mediator组件。 Mediator组件将在这两个服务之间请求路由和数据转换。对于我公开的服务中的每个方法,我将一个BPEL流程添加到Mediator的另一个端点(我将在这些BPEL流程中执行一些特定于方法的验证/其他逻辑)。

我的最终composite.xml:

  1. 我曝光服务的方法
  2. 调解员
  3. 我称之为远程服务
  4. enter image description here

    Inside Mediator组件我做路由和转换。对于我公开的服务的每个方法(1)我在Mediator(2)中有一个路由规则。

    介体组件规则:

    4a,4b - 我公开服务的方法 4c - 用于添加新路由规则的按钮 4d - 用于添加转换规则的按钮(通常,您将拥有一对方法的转换规则 - 请求/响应)

    enter image description here

    转换文件是.xsl文件,用于在两个端点之间进行信息转换。

    我的.xsl文件:

    enter image description here

    .xsl文件的内容:

    这里我正在迭代响应数据(for-each component)。

    enter image description here

    最后,在每个BPEL流程内部,我都有一个“Invoke”组件(5),它调用远程服务上的相应方法。

    enter image description here

    希望有人。祝你好运!