我正在尝试在WSO2 BPS BPEL流程中实现具有动态确定的端点地址的合作伙伴链接。这个想法是发送给进程的请求包含一个端点URL,并且该URL用作某个合作伙伴链接的地址。我之前已成功使用存储在注册表中的端点引用,但我不能在此处使用该方法,因为每次调用进程时地址都可能不同。
我尝试了许多不同的方法(使用WSO2 BPS 3.5.1和WS02 Developer Studio 3.8.0):
https://stackoverflow.com/questions/11092515/dynamic-partner-links-and-dynamic-addressing-with-ode-bpel中引用的DynPartner示例中使用的方法。这在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(没有错误验证),w3c的ws-addr.xsd,我自己非常简单的XSD)。关于Developer Studio如何处理它们并且例如生成初始化,我已经取得了不同的成功,但它们都分享了我收到类似The from-spec of "<element "EndpointReference">" is not compatible with to-spec of "<wsdl:portType
"ThisIsThePartnerLinkPortType">" -
之类的验证错误的问题。
此时,我正在使用我自己的简单XSD的最后一种方法。这个过程实际上就像我想要的那样工作,但我仍然在Developer Studio中得到验证错误,我想摆脱它。还有另一个更好的方法来解决这个问题吗?
提前感谢您的帮助。
答案 0 :(得分:0)
对于遇到相同问题的任何人:现在使用的方法是BPS调用ESB中的特定代理(在固定位置)并向该代理提供端点URL。然后代理执行对端点的实际调用。
这对我有很多好处: