我有一个带有 @SchemaValidation 的 jaxws 网络服务。
@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
逻辑上为空的标签与缺少标签的含义相同。如何使验证将空标签视为缺失,或者如何在验证之前删除空标签?谢谢。