首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >到SOAP WDSL的Laravel测试连接和异常处理

到SOAP WDSL的Laravel测试连接和异常处理
EN

Stack Overflow用户
提问于 2014-09-19 21:37:41
回答 5查看 5.5K关注 0票数 0

我使用laravel框架,我想检查到Soap服务器的连接是否成功,而应用程序不会死于致命错误。

这两种情况:

代码语言:javascript
运行
复制
$this->client = @new SoapClient("http://some.url/test.wsdl");
                $this->session = $this->client->login("username", "password");
                if (is_soap_fault($this->session)) {
                   return "Error";
                }

还有这个:

代码语言:javascript
运行
复制
try {
 $this->client = @new SoapClient("http://some.url/test.wsdl");
 $this->session = $this->client->login("username", "password");
} catch (SoapFault $e) {
    return "Error";
}

导致致命错误:

代码语言:javascript
运行
复制
Symfony \ Component \ Debug \ Exception \ FatalErrorException

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://some.url/test.wsdl' : failed to load external entity "http://some.url/test.wsdl"

谢谢

EN

回答 5

Stack Overflow用户

发布于 2015-07-06 20:58:01

我今天也在这个问题上苦苦挣扎。问题是Laravel错误处理程序将这个可捕获的错误解释为致命错误,并因此中止程序。

为了应对这种情况,您需要在Laravel的内部错误处理程序之前拦截错误。根据您的Laravel版本,此方法会有所不同:

Laravel 4.*

  1. 转到您的globals.php文件。这应该在您的app\start\文件夹中。
  2. 添加以下代码(Thanks dmgfjaved):

App::fatal(function($exception) {//如果发现SOAP错误,我们不想致命地崩溃,而是在以下情况下捕获它:(strpos($exception->getMessage(),'SOAP- Error ') !== FALSE) { '';} });

Laravel 5.*

  1. 没有globals.php文件。所有IoC呼叫都通过ServiceProviders处理。转到app\Providers\AppServiceProvider.php.
  2. Find function.
  3. Add render(),在return parent::render($request, $e);之前执行以下代码

这将从错误处理程序中删除SoapFault错误类型。记住捕捉SoapFault,因为Laravel不会!

票数 3
EN

Stack Overflow用户

发布于 2018-02-05 21:29:06

试试这个:

代码语言:javascript
运行
复制
try {
 $this->client = @new SoapClient("http://some.url/test.wsdl");
 $this->session = $this->client->login("username", "password");
} catch (\Throwable $e) {
    return "Error";
}
票数 2
EN

Stack Overflow用户

发布于 2018-05-01 00:48:59

解决方案实际上是要求Soap客户端抛出一个SoapFault,而不是报告一个E_ERROR。

当Soap客户端报告E_ERROR时,您不需要捕获任何东西。

要解决这个问题,可以像这样初始化你的SoapClient:

代码语言:javascript
运行
复制
$clientOptions = array(
    'exceptions' => true,
);

try {
    $client = new \SoapClient("foo.wsdl", $clientOptions);
} catch (\SoapFault $e) {
    // Do what you need to do!;
}

try {
    $result = $client->__soapCall($method, $data);
} catch (\SoapFault $e) {
    // Do what you need to do!;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25935303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档