CXF @XmlElement(required = true)无法正常工作

时间:2015-01-06 15:33:34

标签: java soap jaxb xsd cxf

我有以下界面:

    @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。

我做错了什么?

2 个答案:

答案 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