使Web服务模式验证将空标记视为缺失

时间:2012-05-09 14:17:41

标签: java validation jax-ws

我有一个带有@SchemaValidation的jaxws webservice。

@SchemaValidation(handler = MySchemaValidationHandler.class)
@WebService(portName = "MyService", serviceName = "MyService", targetNamespace = "urn:com.my.urn", wsdlLocation = "/wsdls/mywsdl.wsdl", endpointInterface = "com.my.MyService")
@BindingType("http://schemas.xmlsoap.org/wsdl/soap/http")
public class MyServiceImpl
        implements MyService {
    @Resource
    WebServiceContext wsContext;
    public void myOperation(Holder<XMLGregorianCalendar> tag1, Holder<XMLGregorianCalendar> tag2, Holder<String> message) {
    ...
    }
}

在xsd中我有以下示例:

<xsd:choice>
    <xsd:element name="tag1" type="xsd:dateTime" minOccurs="0"/>
    <xsd:element name="tag2" type="xsd:dateTime" minOccurs="0"/>
</xsd:choice>

当我发送带有空标签的请求时,我收到有关字段格式的错误(不符合日期格式的限制)。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:com.my.urn">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:myOperation>
         <Tag1>value1</Tag1>
         <Tag2></Tag2>
      </urn:myOperation> 
   </soapenv:Body>
</soapenv:Envelope>

在请求描述中,我有强制标记和选择标记,并且必须在响应中返回正确的错误消息,所以我不能在处理程序中跳过这些错误。 我也不能修改xsd和wsdl

逻辑上的空标签与缺少的标签相同。如何使验证将空标记视为缺失或如何在验证之前删除空标记? 感谢。

1 个答案:

答案 0 :(得分:0)

编辑:不要发送无效的XML。在您提供的示例中,您应该删除<Tag2></Tag2>在您的客户端代码中。不要试图滥用服务器的验证来处理无效的XML。