当前位置: 首页 > 面试题库 >

Spring WS:如何获取和保存XSD验证错误

穆劲
2023-03-14
问题内容

我将SpringWS用于我的肥皂服务,并以此进行验证。

 <sws:interceptors>
    <bean id="payloadValidatingInterceptor" class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
        <property name="schema" value="/schemas/my.xsd"/>
        <property name="validateRequest" value="false"/>
        <property name="validateResponse" value="true"/>
    </bean>



@PayloadRoot(namespace = NAMESPACE,  localPart = "ServiceProvider")
@ResponsePayload
public ServiceProviderTxn getAccountDetails(@RequestPayload ServiceProviderrequest)
{ ...}

这可以正常工作,但是当出现错误时,它会在到达终点之前返回spring产生的错误响应,所以我再也没有机会处理它们。但是我希望能够
记录并将完整的错误消息保存到数据库 。我发现的一种方法是在另一个问题中做类似的事情。

但这并没有我想要的。


问题答案:

您可以扩展PayloadValidationInterceptor和重新定义方法

protected boolean handleRequestValidationErrors(MessageContext messageContext, SAXParseException[] errors)

如果看一下标准实现(在此处可用),您会看到它如何转储所有解析错误。您还可以转储传入的消息,因为您可以访问messageContext及其getRequest()方法。你的课应该是这样的

public class PayloadValidationgInterceptorCustom extends
PayloadValidatingInterceptor {

@Override
protected boolean handleRequestValidationErrors(MessageContext messageContext, SAXParseException[] errors)
        throws TransformerException {
    messageContext.getRequest().writeTo(/*place your Outputstream here something like a ByteArrayOutputStream*/); //use this if you want to dump the message
    for (SAXParseException error : errors) {
        //dump the each error on the db o collect the stack traces in a single string and dump only one or to the database
       /*you can use something like this
         StringWriter sw = new StringWriter();
         PrintWriter pw = new PrintWriter(sw);
         error.printStackTrace(pw);
         sw.toString();
         to get the stack trace
        */

    }
    return super.handleRequestValidationErrors(messageContext,errors);

}


 类似资料:
  • 问题内容: 我有一个像下面这样的标准代码,可以针对xsd验证xml,但是它会在第一个错误时引发异常并停止。如何验证xml,但继续出现第一个和下一个错误,并在最后获得所有错误?可能吗? 问题答案: 在和之间添加此片段: 这样,您将获得完整的异常列表之后,但是如果发生一个致命错误,则分析将停止… 编辑:JavaDoc说: _应用程序必须假定解析器调用此方法后该文档不可用,并且仅应出于收集其他错误消息的

  • 我有以下带有unit&measure子元素的xml。 在SAXParseException中,我获得发生错误的行号。是否可以从行号中获取元素,然后获取其父元素?

  • 我没有编写C++代码,因为我的首要任务是创建有效的xml和XSD。 xml: XSD: 为了验证,我转到:https://www.freeformatter.com/xml-validator-xsd.html 错误:s4s-att-invalid-value:元素“Element”中“type”的属性值无效。记录原因:cvc-datatype-valid.1.2.1:“xs:”不是“QName”

  • 我有以下xml: 我在网上验证了xml,它的格式很好。接下来我做了架构: 当我尝试在线验证时,会出现以下错误:http://www.utilities-online.info/xsdvalidation/?save=72595340-b1e9-4061-a655-c6cfb9cdac44-XSD验证#。USIxpqw1pi点击按钮根据xsd验证xml并查看所有错误。有人知道如何毫无差错地解决这个问

  • 我在验证xml和xsd时遇到问题。我从xsd模式中得到这个错误。 src解决方案。4.2:解析组件“urn:id”时出错。检测到“urn:id”位于命名空间“urn:schemas microsoft com:xml-diffgram-v1”中,但此命名空间中的组件无法从架构文档中引用virtual://server/schema.xsd。如果名称空间不正确,可能需要更改“urn:id”的前缀。如

  • 错误: TypeError:无法读取未定义的LoginForm c:/reactjs/hello-world/src/components/accountbox/LoginForm.js的属性“state”:23 2023 value={this.state.input.email}^24 onchange={this.handlechange}25 class=“form-control”26