我有以下界面:
@WebMethod(action = "create")
VoidResponse create(
@WebParam(name="description") @XmlElement(required=true) String description,
@WebParam(name="userId") @XmlElement(required=true) String userId,
@WebParam(name="accountImage") String accountImage...);
这是生成的wsdl复杂类型:
<xs:complexType name="create">
<xs:sequence>
<xs:element name="description" type="xs:string"/>
<xs:element name="userId" type="xs:string"/>
<xs:element minOccurs="0" name="accountImage" type="xs:string"/>
</xs:sequence>
</xs:complexType>
我们可以看到,description和userId是必填字段。 这似乎是正确的,但是,当我提出请求,省略描述字段或将其发送为空时,例如,CXF不会抛出soapFault。
我做错了什么?
答案 0 :(得分:0)
您可以尝试在jaxws:端点定义上设置架构验证吗?如果您使用Spring
,则如下所示 <jaxws:endpoint ...>
<jaxws:properties>
<entry key="schema-validation-enabled" value="true" />
</jaxws:properties>
...
</jaxws:endpoint>
甚至使用@org.apache.cxf.annotations.SchemaValidation
答案 1 :(得分:0)
默认情况下,cxf不执行架构验证。您需要通过将以下设置添加到Web服务界面来手动启用它
@WebService(name = "abc", targetNamespace = "xyz", wsdlLocation="/path to wsdl")
@EndpointProperties(value = {
@EndpointProperty(key="schema-validation-enabled", value="true")
})
public interface MyFirstSOAPWebService{
@WebMethod(action = "create")
VoidResponse create(
@WebParam(name="description") @XmlElement(required=true) String description,
@WebParam(name="userId") @XmlElement(required=true) String userId,
@WebParam(name="accountImage") String accountImage...);
}
请注意: wsdlLocation 设置是强制性的,还有架构验证启用,因为cxf需要知道xsds以验证传入请求。 wsdl location将提供所需的xsds