为什么xsd模式无法使用限制maxLength验证字符串长度

ste*_*vey 2 xsd web-services soapui xsd-validation

我正在开发一个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>
Run Code Online (Sandbox Code Playgroud)

谁知道为什么?提前致谢.

alb*_*iff 5

SOAPUI正确验证SOAP请求,xsd但是你必须进行有目的的验证选择validate选项,右键单击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>
Run Code Online (Sandbox Code Playgroud)

您可以在wsdlCommentRequest中看到以下架构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>
Run Code Online (Sandbox Code Playgroud)

然后我从中创建一个新的SOAPUI项目wsdl并添加一个SOAP请求,如果我输入一个超过20个字符的字符串<comment/>并按下右键单击SOAP Request窗口并选择Validate it给出第一张图片中显示的错误消息:

在此输入图像描述

希望这可以帮助,