0

我似乎无法在 WSDL 架构中使用本地 xsd 元素,因为我无法创建外部 xsd(项目条件)。

<types>
    <xsd:schema xmlns:fs_req="urn:rg:fs_req" xmlns:sf_facto="urn:rg:sf_facto">
        <xsd:import namespace="urn:rg:sf_facto" schemaLocation="ROOT_sf_facto_SF_facto_V00_05.xsd" />
        <xsd:import namespace="urn:rg:fs_req"     schemaLocation="ROOT_fs_req_fs_req_V00_04.xsd" />

        <xsd:element name="getDetailsAction1" type="fs_req:fs_req_fs_req" /
        <xsd:element name="getDetailsAction1Response"      type="sf_facto:SF_facto_SF_facto"/>

    </xsd:schema>
</types>

在 xsd 元素的调用下方(无效部分!)

<message name="detailMpaResponse">
    <part name="getDetail" element="tns:getDetailsAction1Response" />
</message>
<message name="detailMpaRequest">       
    <part name="getDetailResponse" element="tns:getDetailsAction1" />
</message>

我怎样才能使用本地 xsd 元素来验证 wsdl?

4

3 回答 3

1

问题似乎与<part>节点中的命名空间限定符有关。

编辑:

在仔细查看您的原始帖子时,我认为架构元素可能包含我们需要的值。试一下这段代码:

<message name="detailMpaResponse">
    <part name="getDetail" element="fs_req:getDetailsAction1Response" />
</message>
<message name="detailMpaRequest">       
    <part name="getDetailResponse" element="sf_facto:getDetailsAction1" />
</message>
于 2013-07-10T14:12:13.983 回答
1

您需要在 wsdl:types 中为 xs:schema 声明一个新的 targetNamespace,并将其添加到 wsdl:definitions,如下所示:

<types>
    <xsd:schema xmlns:types="urn:rg:types" targetNameSpace="urn:rg:types" xmlns:fs_req="urn:rg:fs_req" xmlns:sf_facto="urn:rg:sf_facto">
        <xsd:import namespace="urn:rg:sf_facto" schemaLocation="ROOT_sf_facto_SF_facto_V00_05.xsd" />
        <xsd:import namespace="urn:rg:fs_req"     schemaLocation="ROOT_fs_req_fs_req_V00_04.xsd" />

        <xsd:element name="getDetailsAction1" type="fs_req:fs_req_fs_req" />
        <xsd:element name="getDetailsAction1Response" type="sf_facto:SF_facto_SF_facto"/>

    </xsd:schema>
</types>

然后将新命名空间添加到 wsdl:definitions:

xmlns:types="urn:rg:types"

然后在消息部分中引用它:

<message name="detailMpaResponse">
    <part name="getDetail" element="types:getDetailsAction1Response" />
</message>
<message name="detailMpaRequest">       
    <part name="getDetailResponse" element="types:getDetailsAction1" />
</message>

新命名空间与您导入的命名空间不匹配。

于 2014-06-05T11:49:09.843 回答
0

刚刚做了一个快速实验(使用 Eclipse WSDL 编辑器),当我从外部 XSD(与 WSDL 文件位于同一目录中)选择“使用类型”时,生成了以下代码:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://www.example.org/NewWSDLFile/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="NewWSDLFile"
    targetNamespace="http://www.example.org/NewWSDLFile/" xmlns:xsd1="http://www.example.org/NewXMLSchema">
    <wsdl:types>
        (...)
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <xsd:import namespace="http://www.example.org/NewXMLSchema"
                schemaLocation="NewXMLSchema.xsd">
            </xsd:import>
        </xsd:schema>
    </wsdl:types>
    <wsdl:message name="NewOperationRequest">
        <wsdl:part name="parameters" type="xsd1:externalSchemaParamType" />
    </wsdl:message>
    (...)

在您的情况下:“tns”是外部 XSD 的名称空间吗?

于 2013-07-10T15:36:13.730 回答