如何在 WSO2 ESB 中访问注册表

Posted

技术标签:

【中文标题】如何在 WSO2 ESB 中访问注册表【英文标题】:Howto access registry in WSO2 ESB 【发布时间】:2012-03-31 13:28:34 【问题描述】:

定义新的代理服务时如何从注册表中引用 WSDL 文件?我正在使用 WSO2 ESB。

Q1:我可以使用 localEntry 元素在我的代理服务中定义 WSDL 吗?例如:

localEntry key="my_wsdl" src="file:/wsdl/MyServiceSOAP.wsdl"

前提是我之前用过管理控制台 > 添加集合 > 创建“wsdl”,添加资源 > MyServiceSOAP.wsdl。 我对“src”值有疑问,两者

"/wsdl/MyServiceSOAP.wsdl" 
"wsdl/MyServiceSOAP.wsdl" 
不工作。我关注the documentation,但他们没有显示如何将 WSDL 上传到注册表中。

Q2:如果 MyServiceSOAP.wsdl 导入 MyService.wsdl 会怎样?我还需要为 MyService.wsdl 使用 Add Resource,但我还需要做其他任何事情来编译代理吗?

【问题讨论】:

无法提供任何错误消息,因为每当我修改代理服务文件并单击安全时,“localEntry”文件就会消失 - 我猜这就是管理控制台处理编译错误的方式。 【参考方案1】:

我认为您在这里指的是注册表。每个产品中的 Registry 空间包含三个主要分区。

本地 配置 治理

配置注册表包含可以在同一产品的多个实例(例如 ESB 节点集群)之间共享的产品特定配置。因此,您可以在 Config 注册表中创建 WSDL 集合并像这样引用它。

"conf:/wsdl/MyServiceSOAP.wsdl"

通过将资源上传到 Registry,您也可以在创建代理服务时轻松选择它们。

我认为只有当资源位于本地文件系统中名为“wsdl”的目录中时,才能将资源称为“file:/wsdl/MyServiceSOAP.wsdl”。 顺便说一句,关于错误消息。如果您查看 ESB 服务器日志,当您尝试更新引用不存在文件的代理时,您会看到以下错误。

Caused by: java.io.FileNotFoundException: ./wsdl/MyServiceSOAP.wsdl (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:120)
    at java.io.FileInputStream.<init>(FileInputStream.java:79)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
    at org.apache.synapse.config.SynapseConfigUtils.getObject(SynapseConfigUtils.java:197)
    ... 46 more

【讨论】:

谢谢。我不知道“conf:”是“/_system/config”的快捷方式。我现在可以看到我的存储库中的文件。 我现在尝试在我的 publishWSDL 元素中使用 WSDL,但仍然收到“无法定位指定的 WSDL”错误。以下语法是否正确:publishWSDL key="standard.wsdl" resource location="conf:/wsdl/MyServiceSOAP.wsdl" key="standard.wsdl" publishWSDL 你可以说 抱歉回复晚了。我错过了你的评论。【参考方案2】:

我从博客中找到了一个简单的解决方案: 在我的场景中,我有一个 wsdl,它导入了另一个导入 xsd 的 wsdl。实际结构在第二个 wsdl 中。

原始wsdl中的导入行:

    <wsdl:import namespace="http://www.somedomain.com/interface/v1_0" location="service_interface_1_0.wsdl"/>

第二个wsdl中的导入行:

    <xsd:import namespace="http://www.somedomain.com/data/v1_0" schemaLocation="data_types_1_0.xsd"/>

代理上所需的 xml:

    <publishWSDL key="file_required_service_1_0.wsdl">
  <resource location="service_interface_1_0.wsdl"
            key="file_service_interface_1_0.wsdl"/>
  <resource location="data_types_1_0.xsd"
            key="file_data_types_1_0.xsd"/>

我有“file_required_service_1_0.wsdl”等的本地条目,命名为包含原始 wsdl 和 xsd 文件的本地条目。

【讨论】:

以上是关于如何在 WSO2 ESB 中访问注册表的主要内容,如果未能解决你的问题,请参考以下文章

为 WSO2 ESB 5.0.0 集群配置 MySQL 数据库

WSO2 ESB 5.0.0 最低高可用性部署

WSO2 ESB 5.0.0 最低高可用性部署

在 wso2esb 中使用 JMS 时如何解决这些错误

ESB 中的本机策略交集

如何从 wso2 ESB 中的另一个服务调用服务(或一个服务的参数)