Импорт файла WSDL в файл XSD - PullRequest
0 голосов
/ 07 марта 2012

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

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" 
    xmlns:tds="http://www.onvif.org/ver10/device/wsdl"> 
    <SOAP-ENV:Body> 
        <tds:GetSystemDateAndTime/> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope>

xsd сгенерирует это:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Envelope" targetNamespace="http://www.w3.org/2003/05/soap-envelope"
xmlns:mstns="http://www.w3.org/2003/05/soap-envelope"
xmlns="http://www.w3.org/2003/05/soap-envelope"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified"
xmlns:app1="http://www.onvif.org/ver10/device/wsdl">
    <xs:import namespace="http://www.onvif.org/ver10/device/wsdl" schemaLocation="GetSystemDateAndTime_app1.xsd" />
    <xs:element name="Envelope" msdata:IsDataSet="true" msdata:Locale="en-US" msdata:Prefix="SOAP-ENV">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="Body" msdata:Prefix="SOAP-ENV">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="app1:GetSystemDateAndTime" minOccurs="0" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:choice>
        </xs:complexType>
    </xs:element>
</xs:schema>

Это xmlns: tds = "http://www.onvif.org/ver10/device/wsdl"это ссылка на этот документ .

Как я уже сказал, я только что скачал файл, который был в атрибуте schemaLocation, поместил его в ту же папку, как файл xsd и изменил путь. Затем яиспользовал "xsd myXsdFile.xsd otherXsdFiles.xsd / c". Но с файлом wsdl это невозможно. Атрибут SchemaLocation не принимает файл wsdl и, конечно, когда я использую xsd commnand, я получаю сообщение, что GetSystemDateAndTime неЯ понимаю, что файл wsdl сильно отличается от xsd, но я не могу выбрать правильный путь, как соединить этот файл с моим файлом xsd. Любой совет, пожалуйста? Thx

1 Ответ

0 голосов
/ 08 марта 2012

Чтобы перефразировать ваш вопрос, как я понял, вы в основном спрашиваете, как сделать так, чтобы ваш сгенерированный файл XSD указывал на реальное определение элемента app1:GetSystemDateAndTime вместо GetSystemDateAndTime_app1.xsd;проблема заключается в определении app1: GetSystemDateAndTime находится в пределахэлемент внутрифайла WSDL, расположенного по адресу http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl.

Если вы ограничиваете свои параметры только сгенерированным XSD и загруженным WSDL, краткий ответ - нет, вы не можете иметь ссылочный контент XSD из другого XSD, определенноговнутри файла WSDL.

Непонятно, почему бы вам не использовать встроенный инструментарий VS (Service Reference или Web Reference, если вы используете старую версию) или svcutil.exe для генерации клиентского кода.Очень необычно связывать код из XSD, обращенного к XML-конверту SOAP.Тем не менее, SOAP if XML возможно;Я просто никогда не видел этого раньше ...

Если вы все еще хотите «присоединиться» и хотите внести некоторые изменения вручную, то вы можете сделать это двумя способами.

Долгий путьзагрузить все файлы (WSDL + XSD).Из командной строки вы можете использовать svcutil следующим образом:

svcutil /t:metadata /directory:d:\temp\11 http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl

Он выведет примерно так:

Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.1]
Copyright (c) Microsoft Corporation.  All rights reserved.

Attempting to download metadata from 'http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl' using WS-Metadata Exchange or DISCO.
Saving downloaded metadata files...
d:\temp\11\www.onvif.org.ver10.schema.xsd
d:\temp\11\www.w3.org.2004.08.xop.include.xsd
d:\temp\11\www.w3.org.XML.1998.namespace.xsd
d:\temp\11\www.onvif.org.ver10.device.wsdl
d:\temp\11\www.w3.org.2005.08.addressing.xsd
d:\temp\11\docs.oasis-open.org.wsrf.bf-2.xsd
d:\temp\11\www.w3.org.2005.05.xmlmime.xsd
d:\temp\11\docs.oasis-open.org.wsn.t-1.xsd
d:\temp\11\docs.oasis-open.org.wsn.b-2.xsd

Из файла WSDL вручную извлеките содержимое XSD в файлdevicemgmtwsdl.xsd, в той же папке;отредактируйте и сопоставьте импортируемые файлы во всех файлах, чтобы они совпадали с именами файлов XSD после загрузкиОбратитесь к devicemgmt.wsdl вместо GetSystemDateAndTime_app1.xsd, и все готово.

В качестве альтернативы, с помощью инструмента рефакторинга XSD, вы можете использовать простой мастер импорта файлов схемы XML: наведите его на файл WSDL,укажите папку и нажмите ОК.Файлы будут там для вас, чтобы ссылаться на них, как вам нравится.

...