1

我们正在将 wso2esb 服务器放在我们的 web 服务和客户之间。我在导入和包含在 wsdl 文件中时遇到问题。

为了使迁移简单,我们认为我们应该将所有 wsdl 和 xsd 文件复制到 esb 服务器上的一个目录中(但在 wso2esb 软件之外)。在 esb 中创建服务时,我现在使用“指定源 WSDL”来引用 wsdl 文件。

这确实显示了一个 wsdl,但不是(完全)我们创建的那个。所以我们使用'useOriginalwsdl=true'、'modifyUserWSDLPortAddress=true'、'showAbsoluteSchemaURL=true'。

在我们的一个 wsdl 中,我们得到了这段代码:

<xs:schema targetNamespace="http: //www.egem.nl/StUF/wsdl/zkn0201.wsdl">
<xs:import schemaLocation="xsd/stuf0204.xsd" namespace="http://www.egem.nl/StUF/StUF0204"/>
<xs:import schemaLocation="xsd/zkn0201.msg.xsd" namespace="http://www.egem.nl/StUF/sector/zkn/0201"/>
</xs:schema>

设置了上述参数后,这在服务的 wsdl 中显示为:

<xs:schema targetNamespace="http://www.egem.nl/StUF/wsdl/zkn0201.wsdl">
<xs:import namespace="http://www.egem.nl/StUF/StUF0204" schemaLocation="HAEM_TEST?xsd=xsd/stuf0204.xsd"/> 
<xs:import namespace="http://www.egem.nl/StUF/sector/zkn/0201" schemaLocation="HAEM_TEST?xsd=xsd/zkn0201.msg.xsd"/>
 </xs:schema> 

但是当我使用“http:// ...../sevices/HAEM_TEST?xsd=xsd/zkn0201.msg.xsd”查询wsdl时,它不会返回xsd的内容。即使 xsd 相对于服务使用的实际 wsdl 存在于磁盘上:

在磁盘上:

$ ls -lR /some/path/to/my/resource
 .:
  drwx------. 2 wnproesb01 wnproesb01  4096 Apr 17 23:15 xsd
  -rwx------. 1 wnproesb01 wnproesb01  9498 Apr 16 18:31 zkn0201.wsdl

./xsd:
   -rwx------. 1 wnproesb01 wnproesb01  13885 Apr 16 18:31 stuf0204.xsd
   -rwx------. 1 wnproesb01 wnproesb01  63982 Apr 16 18:31 zkn0201.msg.xsd

这些 xsd 文件可能具有导入或包含自身,由与它们自身相比的相对路径给出。

最大的问题:我需要做什么,才能使这个 wsdl 成为 wso2esb 提供的有效、有效的 wsdl?包括所有包含/导入的 xsd。

4

1 回答 1

0

您可以使用 Registry 来存储 WSDL,然后从那里进行引用。这比存储在文件系统中方便得多。

http://madhukaudantha.blogspot.nl/2012/07/wso2-esb-proxy-from-registry.html

并参考如何正确定义 WSDL 导入的模式位置。

WSO2 ESB 4.5.0 无法从治理注册表创建代理服务

于 2013-04-25T14:01:20.350 回答