私の client.py は次のようになります。
from SOAPpy import WSDL
wsdlFile = 'D:/Downloads/w1.1.wsdl'
server = WSDL.Proxy(wsdlFile)
server.soapproxy.config.dumpSOAPOut = 1
server.soapproxy.config.dumpSOAPIn = 1
result = server.packageRequest({'wrongParameter': 'wrong value'})
print result
そして私のserver.py:
import SOAPpy
def packageRequest(data):
return "Hello World"
server = SOAPpy.SOAPServer(("localhost", 8080))
server.registerFunction(packageRequest)
server.serve_forever()
最も重要なのはw1.1.wsdlです。これは、入力データなどの制限を定義するためです。
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2013 sp1 (http://www.altova.com) by Krzysztof (Wroclaw University of Technology) -->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://new.webservice.namespace" targetNamespace="http://new.webservice.namespace">
<wsdl:types>
<xs:schema targetNamespace="http://new.webservice.namespace" elementFormDefault="qualified"/>
<xsi:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema" targetNamespace="http://new.webservice.namespace" elementFormDefault="qualified">
<xsi:element name="request">
<xsi:complexType>
<xsi:sequence>
<xsi:element name="info">
<xsi:complexType>
<xsi:attribute name="company" type="xs:integer" use="required"/>
<xsi:attribute name="packageId" type="xs:integer" use="required"/>
<xsi:attribute name="storehouseId" type="xs:integer" use="required"/>
<xsi:attribute name="giving" type="xs:dateTime" use="required"/>
<xsi:attribute name="send" type="xs:dateTime" use="required"/>
<xsi:attribute name="weight" type="xs:integer" use="required"/>
<xsi:attribute name="unit" type="xs:string" use="required"/>
</xsi:complexType>
</xsi:element>
<xsi:element name="recipient">
<xsi:complexType>
<xsi:sequence>
<xsi:element name="firstname" type="xs:string"/>
<xsi:element name="lastname" type="xs:integer"/>
<xsi:element name="street" type="xs:string"/>
<xsi:element name="city" type="xs:string"/>
<xsi:element name="zip">
<xsi:simpleType>
<xsi:restriction base="xs:string">
<xsi:pattern value="[0-9]{2}-[0-9]{3}"/>
</xsi:restriction>
</xsi:simpleType>
</xsi:element>
</xsi:sequence>
</xsi:complexType>
</xsi:element>
<xsi:element name="sender">
<xsi:complexType>
<xsi:sequence>
<xsi:element name="firstname" type="xs:string"/>
<xsi:element name="lastname" type="xs:string"/>
<xsi:element name="street" type="xs:string"/>
<xsi:element name="city" type="xs:string"/>
<xsi:element name="zip">
<xsi:simpleType>
<xsi:restriction base="xs:string">
<xsi:pattern value="[0-9]{2}-[0-9]{3}"/>
</xsi:restriction>
</xsi:simpleType>
</xsi:element>
</xsi:sequence>
</xsi:complexType>
</xsi:element>
</xsi:sequence>
</xsi:complexType>
</xsi:element>
</xsi:schema>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema" targetNamespace="http://new.webservice.namespace" elementFormDefault="qualified">
<xs:element name="response">
<xs:complexType>
<xs:sequence>
<xs:element name="companyId"/>
<xs:element name="packageId"/>
<xs:element name="packageGivingDate"/>
<xs:element name="responseSendDate"/>
<xs:element name="packageWeight"/>
<xs:element name="packageUnit"/>
<xs:element name="recipient">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName"/>
<xs:element name="lastName"/>
<xs:element name="city"/>
<xs:element name="zip"/>
<xs:element name="street"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="sender">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName"/>
<xs:element name="lastName"/>
<xs:element name="city"/>
<xs:element name="zip"/>
<xs:element name="street"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="request">
<wsdl:part name="parameter" element="tns:request"/>
</wsdl:message>
<wsdl:message name="response">
<wsdl:part name="parameter" element="tns:response"/>
</wsdl:message>
<wsdl:portType name="NewPortType">
<wsdl:operation name="packageRequest">
<wsdl:input message="tns:request"/>
<wsdl:output message="tns:response"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="NewBinding" type="tns:NewPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="packageRequest">
<soap:operation soapAction="packageRequest" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="NewService">
<wsdl:port name="NewPort" binding="tns:NewBinding">
<soap:address location="http://localhost:8080/"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
client.py を実行すると、"Hello World!" という応答が返されます。なんで?入力データが間違っているというエラーが予想されます (WDSL は company、packageId、storehouseId のような入力データを定義します ... しかし、役に立たない辞書{'wrongParameter': 'wrong value'}しか与えません)
私は何を間違えましたか?WSDL 検証が機能しないのはなぜですか?