2013-07-10 2 views
0

Я не могу использовать локальный элемент xsd в схеме WSDL, так как я не могу создать внешний xsd (условия проекта).Есть ли способ использовать локальные элементы xsd в WSDL

<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> 

Как я могу иметь Валиду WSDL с локальным элементом XSD?

+0

Sara - Можете ли вы опубликовать полный файл WSDL. Я подозреваю, что в элементе '' есть что-то в верхней части файла, что может помочь нам в проблеме, с которой вы столкнулись. – pmartin

ответ

1

Проблема связана с вашим определителем пространства имен в узлах <part>.

EDIT:

В приглядевшись на исходное сообщение Я думаю, что элемент схемы может держать значения нам нужно. Дайте этот код выстрел:

<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> 
    (...) 

В вашем случае: это "ТНС" название пространство экстерны XSD?

+0

«element» является допустимым атрибутом узла ''. Это не проблема. – pmartin

+0

@pmartin, вы правы, вы можете использовать «элемент» в части сообщения. Это оставляет в качестве возможной проблемы объявление «пространства имен» XSD в . – emgsilva

+0

@emgsilva Проблема не в использовании внешнего xsd, необходимо создавать новые элементы в wsdl. –

1

Вы должны объявить новый TargetNamespace для хз: схемы в вашем 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 туз не может соответствовать тем, которые вы импортируете.

Смежные вопросы