【问题标题】:Injecting a custom die() handler into mod_perl SOAP handler将自定义 die() 处理程序注入 mod_perl SOAP 处理程序
【发布时间】:2011-03-17 21:50:37
【问题描述】:

我们在这里使用$server = SOAP::Transport::HTTP::Apache->new; $server->dispatch_with(...) 作为基于 JS 的应用程序的后端。如果底层模块死掉,它会返回一个很好的错误消息,由 JS 代码显示。

问题是,我想要更详细的消息(例如 Carp::longmess),以及 STDERR 上的硬拷贝。

如何以最少的代码修改将自定义异常处理程序注入 SOAP::Transport::HTTP::Apache?

(这是一个大型且古老的项目,我们无法负担重写,但老实说它值得重写)。

更新:这是一个示例错误消息:

<soap:Body><soap:Fault>
<faultcode>soap:Server</faultcode><faultstring>Column 
'allocation' cannot be null at 
/usr/local/lib/perl5/site_perl/5.8.8/Tangram/Storage.pm
 line 686. </faultstring></soap:Fault></soap:Body>

我收到了 Tangram 错误,但这不太可能是 Tangram 中的错误,无论如何我需要完整的堆栈跟踪。 OTOH,die 消息进入了 SOAP 消息,这不是正常的 die 动作,所以有一个处理程序 somewhere -- 我想对其进行一些自定义。

【问题讨论】:

    标签: perl mod-perl


    【解决方案1】:

    错误处理程序位于SOAP::Transport::HTTP::Server::_output_soap_fault 下。在 perl INC 路径中的 &lt;faultcode&gt; 上尝试 grep。

    【讨论】:

    • 谢谢,我很害怕拆开忽略它的标准模块。这应该有效。我仍然更喜欢那里的 on_error 处理程序。
    • 为什么不放入一个可定制的错误处理程序并将补丁提交回 CPAN?如果它被接受,那么您将来要做的维护就会减少。
    • 哇,它真的是在 SOAP::Lite 中,而且我的 on_fault() 补丁有点工作。希望我能把它带到上游。
    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 2016-06-03
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2011-07-27
    • 2017-12-18
    • 1970-01-01
    相关资源
    最近更新 更多