How do I decouple an embedded schema within a WSDL?
I am very new to Web services and I would like to know how one would go about saving types define in a wsdl:type section into it's own schema with the idea that one could reuse the schema within multiple WSDL. I have been trying to use the import statement as per below but this has not been very successful.
<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>
To summarize:
- I have isolated the schema into its own file SinpleService.xsd (as per code sample below)
- I have added an import statement to the WSDL as per above.
- However it looks like types cannot be resolved when I reference them via the import.
<?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" 开发者_StackOverflow社区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>
Try this:
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>
(thank you, XMLSpy)
You need a space after the quotation mark:
<xsd:import namespace="http://ttdev.com/ss"schemaLocation="http://ttdev.com/ss/SimpleService.xsd"/>
should be
<xsd:import namespace="http://ttdev.com/ss" schemaLocation="http://ttdev.com/ss/SimpleService.xsd"/>
精彩评论