2013-07-10 39 views
0

我似乎無法在WSDL模式中使用本地xsd元素,因爲我無法創建外部xsd(項目條件)。有沒有辦法在WSDL中使用本地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元素的WSDL的Valide?

+0

Sara - 您可以發佈完整的WSDL文件。我懷疑在文件頂部的''元素中有什麼東西可以讓我們知道你遇到的問題。 – pmartin

回答

1

該問題看起來與<part>節點中的名稱空間限定符一致。

編輯:

在看着你原來的職位接近我覺得架構元素可能擁有我們所需要的值。給這個代碼一個鏡頭:

<message name="detailMpaResponse"> 
    <part name="getDetail" element="fs_req:getDetailsAction1Response" /> 
</message> 
<message name="detailMpaRequest">  
    <part name="getDetailResponse" element="sf_facto:getDetailsAction1" /> 
</message> 
+0

我修改了我的代碼,就像那個' '但它似乎不工作! –

+0

當你說:「它似乎不工作」,我不確定你的意思。你是通過驗證器運行的嗎?你是否收到錯誤信息?如果是的話,你可以發佈它? – pmartin

+0

我試圖用eclipse驗證它,它給了我一個錯誤(零件'pRechercheInfoRfPat'有一個無效的值'getDetail'爲其類型定義,類型 聲明必須引用在模式中定義的有效值) –

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」是externa XSD的名稱空間嗎?

+0

「元素」是「」節點的有效屬性。這不是問題。 – pmartin

+0

@pmartin你是對的,你可以在消息部分使用「元素」。這會將XSD中的「名稱空間」聲明留在中作爲可能的問題。 – emgsilva

+0

@emgsilva問題是不能使用外部的xsd,必須在wsdl中創建新的元素。 –

1

您需要聲明的XS一個新的目標名稱:模式在您的WSDL:類型,並把它添加到WSDL:定義,像這樣:

<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:定義:

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> 

新namesp ace無法與您導入的相匹配。

相關問題