在 WSO2ESB 类调解器中进行策略交集

Posted

技术标签:

【中文标题】在 WSO2ESB 类调解器中进行策略交集【英文标题】:Do Policy Intersection in WSO2ESB Class Mediator 【发布时间】:2012-08-07 11:37:58 【问题描述】:

我创建了一个类调解器,我想在其中交叉两个策略。我已经使用 Carbon Studio for Eclipse 创建了 Class Mediator,它会自动将一些预定义的库添加到我的项目的构建路径中。

其中一个库是 neethi-2.0.4.wso2v1.jar。

如果我想使用 intersect-method 我得到一个异常。如果我查看源代码,我发现 intersect-method 只会抛出“UnsupportedOperationException”。

所以给定的 neethi 库对于交集没有用,因此我想在我的类调解器中使用最新的 Neethi 库(又名 neethi-3.0.2.lib)作为交集。

你能告诉我如何包含第三方库,尤其是在我的用例中,这些库应该覆盖曾经在 esb 中使用过的库(neethi-2.0.4.wso2v1.jar)。

谢谢

【问题讨论】:

【参考方案1】:

Developer Studio 将这些库添加到您的项目类路径中,这样开发人员就不会在源代码中遇到构建错误。

因此,这些库仅适用于开发时间,并且仅适用于 Dev Studio。它们不是服务器运行时使用的库。

运行时库由 WSO2 Carbon Server 运行时提供。所以这个UnsupportedOperationException被服务器抛出是由于服务器中的neethi版本不支持它而发生的。所以你需要在服务器运行时升级库。

但正如您所见,WSO2 已经对 neethi 代码库进行了分叉,并在分叉的源代码上进行了一些自定义实现。因此,IMO,仅升级版本无济于事。

无论如何,您需要实际升级库,看看您是否遇到任何问题。

要升级版本,您可以为较新的 Neethi 库创建 Java 库工件并将其包含在 CAR 文件中并部署 CAR 文件,或者在服务器运行时将新的 Neethi 库复制到 <CARBON_HOME>/repository/components/lib 位置。

您可以在<CARBON_HOME>/repository/components/plugins 位置找到当前的 Neethi 库。如果您发现一些类似于“链接错误”的错误或异常,请尝试删除旧版本的库。但它会导致一些其他异常。

所以 IMO 的底线是,您将面临版本升级的一些问题。但是是的,当然你可以试一试,看看我们是否能克服它们。试一试,并在此处发布您的观察结果。我们会尽力为您提供帮助。

【讨论】:

您好,我知道 carbon studio 中的库仅在开发时添加,因此尝试将 Neethi-3.0.2 库添加到 ESB。我将更详细地解释我所做的步骤首先,Neethi-2.0.4.wso2v3 不仅支持交集,还支持策略的规范化(参见mail.wso2.org/mailarchive/carbon-dev/2011-August/066825.html)。 因此,如果尝试仅使用规范化(不是相交方法)使用原始 neethi-2.0.4.wso2v3.jar 运行我的类调解器,我会得到:NoSuchMethodError: org.apache.neethi.Policy。规范化(Z)Lorg/apache/neethi/Policy;。然后我将 Neethi-3.0.2.jar 添加到 /repository/components/jar,重新启动 ESB 并再次运行示例。现在规范化工作了,我没有收到任何错误。 接下来我开始使用交叉功能扩展我的 Class Mediator。因此,我创建了一个 PolicyBuilder 和 PolicyRegistry,它们是 Neethi-3.0.2 中的交集所需要的(参见 neethi 测试)。静态 PolicyBuilder policyEngine = new PolicyBuilder();静态 PolicyRegistry 注册表 = new PolicyRegistryImpl();在我的方法中:policyEngine.setPolicyRegistry(registry);和 Policy intersectedPolicy = (Policy) policy1.intersect(policy2); 然后我得到以下行的异常: static PolicyBuilder policyEngline = new PolicyBuilder();其中说:“java.lang.NoClassDefFoundError: iaas.unistuttgart.de.utils.Discovery.DiscoveryUtils.(DiscoveryUtils.java:42) 的 org/apache/neethi/PolicyBuilder” 所以不知何故使用了新的 Neethi 库(可以看到因为规范化有效)。另一方面,它不能完全工作,因为找不到 PulicyBuilder 类(因此不能使用交集)。我认为这是因为两个 neethi 版本的 jar 命名相同,可能找不到 PolicyBuilder,因为 neethi-2.0.4 中没有 PolicyBuilder-Class...?

以上是关于在 WSO2ESB 类调解器中进行策略交集的主要内容,如果未能解决你的问题,请参考以下文章

ESB 中的本机策略交集

如何处理语义分割中未知类的平均交集(mIOU)?

如何找到两个 NFA 的交集

java 求交集 并集 差集

TypeScript 类工厂需要一个交集

jQuery选择器如何取交集?