Web services xsd架构无法使用限制maxLength验证字符串长度的原因
我正在开发一个web服务SOAP,我已经定义了我的xsd模式和wsdl文件,在其中我想通过固定元素的最大长度来验证元素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
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>