我正在开发一个Web服务SOAP并且我已经定义了我的xsd模式和wsdl文件,我希望通过修复他的最大值来验证元素comment
(其类型是字符串)长度。但是当我使用SoapUI验证请求时,在我看来xsd架构并没有验证字符串的最大长度。
以下是我的xsd架构的语法:
<xsd:element name="comment" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="20"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
任何人都知道为什么?提前谢谢。
答案 0 :(得分:5)
SOAPUI正确验证SOAP请求对其xsd
的正确性,但是如果你发送的话,你必须进行有目的的验证,选择右键单击SOAP Request窗口的验证选项(如上图所示)。直接请求而不验证它,SOAPUI只是发送请求,即使它是一个错误的xml
,因为SOAPUI是一个测试工具,你可能想要故意发送一个错误的请求来测试你的WS。
我在maxLength
中使用<restriction>
<xs:string>
制作了一个示例,我得到了以下结果(我使用SOAPUI 4.5.2
):
要执行此操作,请使用以下wsdl
:
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:impl="sample:wsdl"
xmlns:dss="sample:schema"
targetNamespace="sample:wsdl" name="dss">
<!-- Schema Type Definitions -->
<types>
<xs:schema xmlns:dss="sample:schema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="sample:schema" elementFormDefault="qualified"
attributeFormDefault="unqualified">
<!-- COMMON PROTOCOL STRUCTURES -->
<xs:element name="comment" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
</types>
<!--Messages-->
<message name="CommentRequest">
<part name="CommentRequest" element="dss:comment"/>
</message>
<!-- PortTypes -->
<portType name="SOAPport">
<operation name="doComment">
<input message="impl:CommentRequest"/>
<output message="xs:anyType"/>
</operation>
</portType>
<!-- Bindings -->
<binding name="SOAPBinding" type="impl:SOAPport">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="doComment">
<soap:operation/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<!--Service definition-->
<service name="doCommentService">
<port name="dssPortSoap" binding="impl:SOAPBinding">
<soap:address location="http://testing.stackoverflow.answer"/>
</port>
</service>
</definitions>
正如您在wsdl
评论请求中看到maxLength
<restriction>
的跟随架构:
<xs:schema xmlns:dss="sample:schema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="sample:schema" elementFormDefault="qualified"
attributeFormDefault="unqualified">
<!-- COMMON PROTOCOL STRUCTURES -->
<xs:element name="comment" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
然后我从wsdl
创建一个新的SOAPUI项目并添加一个SOAP请求,如果我在<comment/>
中放入一个超过20个字符的字符串并按下右键单击SOAP Request窗口并选择Validate它会在第一张图片中显示错误消息:
希望这有帮助,