我似乎无法在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元素的调用之下(非valide部分!)
<message name="detailMpaResponse">
<part name="getDetail" element="tns:getDetailsAction1Response" />
</message>
<message name="detailMpaRequest">
<part name="getDetailResponse" element="tns:getDetailsAction1" />
</message>
我如何使用本地xsd元素获得valide wsdl?
答案 0 :(得分:1)
问题在于<part>
节点中的命名空间限定符。
修改强>
仔细观察原始帖子,我认为架构元素可能包含我们需要的值。给这个代码一个镜头:
<message name="detailMpaResponse">
<part name="getDetail" element="fs_req:getDetailsAction1Response" />
</message>
<message name="detailMpaRequest">
<part name="getDetailResponse" element="sf_facto:getDetailsAction1" />
</message>
答案 1 :(得分: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>
新命名空间与您导入的命名空间不匹配。
答案 2 :(得分: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的名称空间?