Как отделить встроенную схему от WSDL? - PullRequest
2 голосов
/ 10 января 2011

Я очень новичок в Web-сервисах, и мне хотелось бы знать, как можно сохранить сохранение типов, определенных в разделе wsdl: type, в его собственную схему с мыслью, что можно повторно использовать схему в нескольких WSDL. Я пытался использовать оператор импорта, как показано ниже, но это не очень успешно.

     <wsdl:types>
  <xsd:schema targetNamespace="http://ttdev.com/ss">
   <xsd:import namespace="http://ttdev.com/ss"schemaLocation="http://ttdev.com/ss/SimpleService.xsd"/>
  </xsd:schema>
 </wsdl:types>

<wsdl:definitions 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ttdev.com/ss" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="SimpleService" targetNamespace="http://ttdev.com/ss" xmlns:xi="http://www.w3.org/2001/XInclude">
 <wsdl:types>
 <xsd:schema targetNamespace="http://ttdev.com/ss">
  <xsd:element name="concatRequest">
   <xsd:complexType>
    <xsd:sequence>
     <xsd:element name="param1" type="xsd:string"/>
     <xsd:element name="param2" type="xsd:string"/>
    </xsd:sequence>
   </xsd:complexType>
  </xsd:element>
  <xsd:element name="concatResponse">
   <xsd:complexType>
    <xsd:sequence minOccurs="0" maxOccurs="100">
     <xsd:element name="name" type="xsd:string"/>
     <xsd:element name="description" type="xsd:string"/>
    </xsd:sequence>
   </xsd:complexType>
  </xsd:element>
  </xsd:schema>
 </wsdl:types>
 <wsdl:message name="concatRequest">
  <wsdl:part name="parameters" element="tns:concatRequest"/>
 </wsdl:message>
 <wsdl:message name="concatResponse">
  <wsdl:part name="parameters" element="tns:concatResponse"/>
 </wsdl:message>
 <wsdl:portType name="SimpleService">
  <wsdl:operation name="concat">
   <wsdl:input message="tns:concatRequest"/>
   <wsdl:output message="tns:concatResponse"/>
  </wsdl:operation>
 </wsdl:portType>
 <wsdl:binding name="SimpleServiceSOAP" type="tns:SimpleService">
  <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  <wsdl:operation name="concat">
   <soap:operation soapAction="http://ttdev.com/ss/NewOperation"/>
   <wsdl:input>
    <soap:body use="literal"/>
   </wsdl:input>
   <wsdl:output>
    <soap:body use="literal"/>
   </wsdl:output>
  </wsdl:operation>
 </wsdl:binding>
 <wsdl:service name="SimpleService">
  <wsdl:port name="p1" binding="tns:SimpleServiceSOAP">
   <soap:address location="http://localhost:8080/ss/p1"/>
  </wsdl:port>
 </wsdl:service>
</wsdl:definitions>

Подведем итог:

  1. Я выделил схему в отдельный файл SinpleService.xsd (согласно примеру кода ниже)
  2. Я добавил оператор импорта в WSDL, как указано выше.
  3. Однако, похоже, что типы не могут быть разрешены, когда я ссылаюсь на них через импорт.

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://ttdev.com/ss" targetNamespace="http://ttdev.com/ss">
 <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/"/>
 <xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
 <xsd:element name="concatRequest">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="param1" type="xsd:string"/>
    <xsd:element name="param2" type="xsd:string"/>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
 <xsd:element name="concatResponse">
  <xsd:complexType>
   <xsd:sequence minOccurs="0" maxOccurs="100">
    <xsd:element name="name" type="xsd:string"/>
    <xsd:element name="description" type="xsd:string"/>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
</xsd:schema>

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Попробуйте:

SimpleServiceSchema.xsd:

<xsd:schema targetNamespace="http://ttdev.com/ss/include" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="concatRequestType">
        <xsd:sequence>
            <xsd:element name="param1" type="xsd:string"/>
            <xsd:element name="param2" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="concatResponseType">
        <xsd:sequence minOccurs="0" maxOccurs="100">
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="description" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>


<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ttdev.com/ss" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:inc="http://ttdev.com/ss/include" name="SimpleService" targetNamespace="http://ttdev.com/ss">
    <wsdl:types>
        <xsd:schema targetNamespace="http://ttdev.com/ss">
            <xsd:import namespace="http://ttdev.com/ss/include" schemaLocation="SimpleServiceSchema.xsd"/>
            <xsd:element name="concatRequest" type="inc:concatRequestType"/>
            <xsd:element name="concatResponse" type="inc:concatResponseType"/>
        </xsd:schema>
    </wsdl:types>
    <wsdl:message name="concatRequest">
        <wsdl:part name="parameters" element="tns:concatRequest"/>
    </wsdl:message>
    <wsdl:message name="concatResponse">
        <wsdl:part name="parameters" element="tns:concatResponse"/>
    </wsdl:message>
    <wsdl:portType name="SimpleService">
        <wsdl:operation name="concat">
            <wsdl:input message="tns:concatRequest"/>
            <wsdl:output message="tns:concatResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="SimpleServiceSOAP" type="tns:SimpleService">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="concat">
            <soap:operation soapAction="http://ttdev.com/ss/NewOperation"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="SimpleService">
        <wsdl:port name="p1" binding="tns:SimpleServiceSOAP">
            <soap:address location="http://localhost:8080/ss/p1"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

(спасибо, XMLSpy)

0 голосов
/ 11 января 2011

Вам нужен пробел после кавычки:

<xsd:import namespace="http://ttdev.com/ss"schemaLocation="http://ttdev.com/ss/SimpleService.xsd"/>

должно быть

<xsd:import namespace="http://ttdev.com/ss" schemaLocation="http://ttdev.com/ss/SimpleService.xsd"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...