Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services xsd架构无法使用限制maxLength验证字符串长度的原因_Web Services_Xsd_Soapui_Xsd Validation - Fatal编程技术网

Web services xsd架构无法使用限制maxLength验证字符串长度的原因

Web services xsd架构无法使用限制maxLength验证字符串长度的原因,web-services,xsd,soapui,xsd-validation,Web Services,Xsd,Soapui,Xsd Validation,我正在开发一个web服务SOAP,我已经定义了我的xsd模式和wsdl文件,在其中我想通过固定元素的最大长度来验证元素comment(其类型为string)。但是当我用SoapUI验证请求时,xsd模式似乎没有验证字符串的最大长度 以下是我的xsd模式的语法: <xsd:element name="comment" minOccurs="0"> <xsd:simpleType> <xsd:restriction base="xsd:strin

我正在开发一个web服务SOAP,我已经定义了我的xsd模式和wsdl文件,在其中我想通过固定元素的最大长度来验证元素
comment
(其类型为string)。但是当我用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>


有人知道为什么吗?提前感谢。

SOAPUI根据其
xsd
正确验证SOAP请求,但是如果您直接发送请求而不进行验证,则必须进行故意验证,选择验证选项右键单击SOAP请求窗口(如最后一张图所示),SOAPUI只是简单地发送请求,即使它是格式错误的
xml
,因为SOAPUI是一个测试工具,您可能想要发送一个错误的请求来测试WS

我在
中使用
maxLength
制作了一个样本,得到了以下结果(我使用的是
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
创建了一个新的SOAPUI项目,并添加了一个SOAP请求,如果我在
中放入一个超过20个字符的字符串,然后右键单击SOAP请求窗口并选择Validate it,则会显示第一张图片中显示的错误消息:


希望这有帮助,

您能添加更多信息吗。。您是否使用一些框架来发布您的ws。。等添加更多详细信息以更好地帮助您。@Xstian我正在使用cxf框架发布我的ws。我在我的cxf-servlet.xml中启用了模式验证。非常感谢您的帮助。实际上,我正在使用cxf框架发布我的web服务。当我在soapui中创建一个新项目时,我填写了
localhost:8080/test/services/webservice?wsdl作为初始wsdl。然后我使用soapui验证选项(右键单击->验证)验证请求,但它不起作用。然而,如果我浏览wsdl文件寻找初始wsdl,当我验证请求时,它确实起作用了。你有什么想法吗?谢谢。可能您的本地
wsdl
文件和
localhost:8080/test/services/webservice?wsdl
中的
wsdl
不同。您可以共享这两个
wsdl
以进行检查吗?我发现我的wsdl文件中存在一些问题。现在可以了,谢谢你的帮助。不客气。
:)
。最后,您的
wsdl
s之间存在一些差异?
<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>