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

2023-11-25

我将 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 生成的错误响应,因此我永远没有机会处理它们。但我希望能够记录完整的错误消息并将其保存到数据库。我发现的一种方法是在我的另一个问题中做类似的事情;

Spring WS 如何在验证失败时获取所有错误消息

但它并没有按照我想要的方式工作。


你可以延长PayloadValidationInterceptor并重新定义方法

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

如果您查看标准实现(可用here)您可以看到它如何转储所有解析错误;您还可以转储传入的消息,因为您可以访问 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);

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring WS:如何获取并保存 XSD 验证错误 的相关文章

随机推荐

  • Java 类相互引用

    我有两个java类文件 他们每个人都有对方使用的方法 public class class1 class2 c2 new class2 m1 c2 ma m2 m2 public class class2 class1 c1 new cla
  • .net Framework 4.0 的 File.ReadLines(..) 方法中的错误

    这段代码 IEnumerable
  • Proguard 和 Android :(

    我试图在我的 Android 应用程序上运行 Proguard 并遇到问题 我正在使用 SpongyCastle jar 完整的充气城堡的复制和过去 并重命名了包 因此它不会与 Android 充气城堡内置版本冲突 运行 proguard
  • 移动某些数组元素的函数方法如何?

    我有一个 Scala 应用程序 其中包含带有复选框的项目列表 以便用户选择一些项目 然后单击按钮将它们向上移动一个位置 左 我决定编写一个函数来移动满足给定谓词的某种任意类型的元素 所以 如果你有这些元素 a b c D E f g h I
  • 将纪元时间转换为具有特定时区的人类可读时间

    要将纪元日期时间转换为人类可读的 使用一个简单的new date 1495159447834 就足够了 我现在遇到的问题是 对于我的混合应用程序 如果用户将手机日期时间设置中的时区设置为 GMT 12 00 则人类可读的日期时间将与我想要的
  • 查找 Java 方法的字节码大小

    我试图计算出方法的字节码大小 因为我想确保它足够小 可以通过编译器优化内联 我看到内联方法的默认最大大小是 35 因此如果该方法大于该大小 我将修改代码或将其分解为多个方法 我有一个方法可以生成下面的字节码 通过 IntelliJ IDEA
  • SQL除两个整数并得到小数值错误[重复]

    这个问题在这里已经有答案了 在 SQL 语句中 我试图除以两个整数 整数 1 在我的代码中为 abc 整数 2 在我的代码中为 xyz 并得到十进制结果 在我的代码中为 def 小数结果应仅以 1 或 0 开头 后跟一个小数和小数点后 3
  • 如何在javascript中获取json键和值?

    我返回一个 json 如下所示 name skills jobtitel Entwickler res linkedin GwebSearch 我试图获取每个元素的键和值 done function data alert data jobt
  • Summernote - 图片 url 而不是 Base64

    Summernote wysiwyg 编辑器将图像文件编码为 Base64 嗯 这看起来很方便 但我预计数据库会在长期内被大量使用 这会导致一些问题 搜索速度慢 实现图像库等等 我想知道它是否有一个选项可以关闭此编码选项并使用 插入 url
  • 获取摆动组件的位置

    我已将一些 JPanel 放入另一个 JPanel 中 其布局是框布局和 Y 轴 放置所有面板后 我需要从 JPanel 容器面板中获取每个添加的 JPanel 的 Y 位置 但是 当我尝试得到这个值时 每个 JPanel 的 Y 位置总是
  • 为什么 Python 使用“魔法方法”?

    我对 Python 广泛使用 魔术方法 感到有点惊讶 例如 为了让一个类声明实例具有 长度 它实现了 len 方法 当您编写时会调用该方法len obj 为什么不直接定义一个len作为对象的成员直接调 用的方法 例如obj len See
  • SQL Server 中的可选参数

    我有一个用户定义的函数 在许多存储过程中使用 它将返回一些值 如果我可以添加一个新的可选参数 如果我不传递任何值 它应该为空 如果我传递一些值 它应该接受它 我不想去更改所有存储过程来执行此操作 示例代码 dbo CalculateAver
  • Jenkins Git 插件不接收发布的参数

    我正在尝试使用 Node js 以编程方式构建采用 Git 参数的 Jenkins 作业 我将参数作为发布数据发送 如下所示 但是 无论我分配什么值ref Jenkins 使用默认参数值 在作业配置中指定 运行构建 我尝试过将参数作为查询字
  • 使用 D3 画笔进行细粒度事件处理

    我有一个使用 D3 生成的散点图 可以通过单击绘图上的点 SVG 圆圈 来选择它们 并且可以使用 D3 画笔选择区域 为了确保圆圈获得单击事件 我需要首先创建画笔 以便圆圈位于其上方 不幸的是 这意味着当我的光标位于绘图中的某个点上时 我无
  • grunt usemin 不影响 html 文件(index.html)

    我有一个使用 usemin 的 grunt 脚本 但奇怪的是 index html 文件根本不受 usemin 影响 这意味着我的文件仍然包含所有 日志中最奇怪的部分是这个 尽管它找到了块 但它什么也没做 请参阅完整日志 Processin
  • Python中科学记数法的指数数字

    在 Python 中 科学记数法总是给出 2 位指数 print 17 8E n 0 0665745511651039 6 65745512E 02 但是 我非常想要 3 位数字 例如 6 65745512E 002 我们可以使用 Pyth
  • 使用 Swift 2 进行 Alamofire POST 请求

    我正在尝试在 Alamofire 中发出 POST 请求以返回 JSON 对象 这段代码在 Swift 1 中有效 但在 Swift 2 中我遇到了这个无效参数问题 Tuple types NSURLRequest NSHTTPURLRes
  • 带有自定义适配器和过滤器的自动完成文本视图

    我正在尝试设置自定义ArrayAdapter for my AutoCompleteTextView像这样 public class AutoCompleteContactArrayAdapter extends ArrayAdapter
  • 开始所需的最低软件包,Android SDK

    我可以下载的软件包有限制 那么任何人都可以解释一下 为了开始使用 sdk 或使其正常工作 必须下载哪些基本组件 我正在寻找要下载的最少组件 当我启动 SDK 管理器时 它会显示一个包含各种包的列表 第一个 Android 6 0 API 中
  • Spring WS:如何获取并保存 XSD 验证错误

    我将 SpringWS 用于我的肥皂服务并像这样验证它