gpt4 book ai didi

java - wso2esb 和 wso2as - 两个 Web 服务的链接或编排

转载 作者:太空宇宙 更新时间:2023-11-04 07:52:54 25 4
gpt4 key购买 nike

亲爱的大家,在第一个新年快乐。

我的目标如下:

我在 wso2as 中部署了两个 axis2 Web 服务(ws1、ws2)。客户端必须通过 wso2esb 向 ws1 提供参数,并且必须将返回值作为参数提供给 ws2,以便将最终值返回给客户端。所以客户端所做的,只是将参数提供给 ws1 并接收来自 ws2 的最终响应。

问题:

如何逐步实现并使 ws1 和 ws2 进行通信(我认为是通过代理)?因为我尝试了很多教程,但没有人了解我的详细信息,因为我真的是 ESB 的初学者。

非常感谢。

最佳答案

是的。您可以一步完成此操作。我之前在一个项目中做过这样的事情:您可以按照以下步骤操作:

1. ws1 and ws2 are both have "endpoints" defined in the ESB.
2. In the ws1 proxy, define a target inSequence to point to a "sequence"
for example "ws1InSequence"
3. In the "ws1InSequence", you can use <filter> to make sure the value is exists.
Then you can <send> to the ws1 <endpoint> with "receive" attribute point to
a sequence for example "ws1ResultSequence"
4. In the ws1ResultSequence, you can again use the <filter> to make sure
it has the parameter/value you need. Then you can use param/value to format a request message.
<payloadFactory>
<format>
<ns1: ws2Operation
xmlns:ns1="ws2Namespace">
<element1 xmlns="">$1</element1>
<!-- Note $1 will have the //paramName value from the ws1 Result message -->
<element2 xmlns="">$2</element2>
<!-- Note $2 will have the //paramName2 value from the ws1 Result message -->
</format>
<args>
<arg expression="//paramName" />
<arg expression="//paramName2" />
</args>
</payloadFactory>
5. Still in ws1ResultSequence, after you create the request message,
you <send> it to the ws2 proxy. Then in the ws2 proxy, in the <outSequence>
you can juse use <send/> to send the response to the client.

请注意,您可能需要包含异常(faultSequence)处理。

WSO2ESB 使用 Apache Synapse 进行配置。您可以在其文档中找到大多数语法和示例用法:http://synapse.apache.org/userguide/config.html

更新:您可以以此为例。注意,这可能不是您需要的完整代码,您可能需要添加异常处理。

   <sequence xmlns="http://ws.apache.org/ns/synapse" name="ws1ResultSequence"
trace="enable" onError="ws1ResultSequenceErrorHandler">
<log level="custom">
<property name="sequence" value="INVOCATION START: ws1ResultSequence" />
</log>
<!-- record the original message for future reference -->
<enrich>
<source clone="true" type="envelope" />
<target action="replace" type="property" property="ORIGINAL" />
</enrich>

<!-- Check if the ws1 result message has the value -->
<property
xmlns:ns1="ws1Namespace"
name="valueExists" expression="//ns1:element1" />
<!--Note here, element1 is the element name which has the value: output1 -->

<filter xpath="fn:boolean( get-property('valueExists') )">
<then>
<!-- create the request message to invoke ws2 -->
<payloadFactory>
<format>
<ns1:ws2OperationName
xmlns:ns1="ws2Namespace">
<element2 xmlns="">$1</element2>
</ns1:ws2OperationName>
</format>
<args>
<arg expression="//ns1:element1" />
</args>
</payloadFactory>
<log level="custom">
<property name="inInvokeWS2" value="INVOCATION START: value from ws1 result exists" />
</log>

<send>
<endpoint key="ws2Sequence" />
</send>
<drop/>
</then>
</filter>
<!-- No result value found from the ws1 result message -->
<send>
<endpoint key="DoSomethingElseOrThrowError" />
</send>

关于java - wso2esb 和 wso2as - 两个 Web 服务的链接或编排,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14131335/

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