我已经在我的应用程序中实现了Web服务。当我想通过带有 Soap UI 的 SOA 通过 Web 服务将对象发送到我的服务器时,我得到这样的结果:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:impl="http://impl.arg.lou.com/">
<soapenv:Header/>
<soapenv:Body>
<impl:addStudent>
<!--Optional:-->
<student>
<!--Optional:-->
<name>?</name>
</student>
</impl:addStudent>
</soapenv:Body>
</soapenv:Envelope>
我不希望名称字段是可选的,它应该是必填字段。我该怎么做?
我使用 Apache cxf。
需求级别链接:http://www.ietf.org/rfc/rfc2119.txt
在 Web 服务定义中,有一个类型部分用于定义消息的 XML 架构。在该定义中,您可以设置多个约束,例如"必填字段"。
例:
<wsdl:definitions name="myService" ...>
<wsdl:types>
<xs:schema version="1.0" targetNamespace="myNameSpace" xmlns:tns="myNameSpace">
<xs:complexType name="studentType">
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
<xs:element name="student" nillable="false" type="tns:studentType"/>
</xs:schema>
</wsdl:types>
...
</wsdl:definitions>
现在,如果您未在 apache CXF 配置中激活架构验证,则不会在服务器端验证这一点,如下所示:
<jaxws:endpoint id="myService" ...>
<jaxws:properties>
<entry key="schema-validation-enabled" value="true" />
...
</jaxws:properties>
...
</jaxws:endpoint>
PS:SOAP UI 使用目标 Web 服务的 XML 架构来生成默认请求。如果 XML 架构没有use="required"
或nillable="false"
它将在元素上添加<!-- optional -->
注释