首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP中的调试SOAP调用:由于客户端数据而引发异常

PHP中的调试SOAP调用:由于客户端数据而引发异常
EN

Stack Overflow用户
提问于 2013-04-04 08:14:34
回答 4查看 5K关注 0票数 4

我正在使用UPS api,调试时遇到了困难。我得到了下面的堆栈跟踪:

代码语言:javascript
运行
复制
Details
Type: SoapFault
Message: An exception has been raised as a result of client data.
File: /Users/shawn/Documents/work/sites/Wingspan/kaleco/lib/SixString/Utilities/Ups.php
Line: 161
Trace

#0 /Users/shawn/Documents/work/sites/Wingspan/kaleco/lib/SixString/Utilities/Ups.php(161): SoapClient->__soapCall('ProcessShipment', Array)
#1 /Users/shawn/Documents/work/sites/Wingspan/kaleco/routes/ups.php(14): SixString\Utilities\Ups->getShipment()
#2 [internal function]: {closure}()
#3 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Router.php(172): call_user_func_array(Object(Closure), Array)
#4 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Slim.php(1222): Slim\Router->dispatch(Object(Slim\Route))
#5 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Middleware/Flash.php(86): Slim\Slim->call()
#6 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Middleware/MethodOverride.php(94): Slim\Middleware\Flash->call()
#7 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Middleware/SessionCookie.php(116): Slim\Middleware\MethodOverride->call()
#8 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Middleware/PrettyExceptions.php(67): Slim\Middleware\SessionCookie->call()
#9 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Slim.php(1174): Slim\Middleware\PrettyExceptions->call()
#10 /Users/shawn/Documents/work/sites/Wingspan/kaleco/public/index.php(6): Slim\Slim->run()
#11 {main}

下面是这段代码:

代码语言:javascript
运行
复制
    try{
        $mode = array('soap_version' => 'SOAP_1_1',  'trace' => 1,'exceptions' => true );
        $client = new \SoapClient($wsdl , $mode);
        $client->__setLocation($endpointurl);

        $header = new \SoapHeader('http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0','UPSSecurity',$this->upss);
        $client->__setSoapHeaders($header);

        if(strcmp($operation,"ProcessShipment") == 0 ) {
            $resp = $client->__soapCall('ProcessShipment',array($this->processShipment()));
            echo "Response Status: " . $resp->Response->ResponseStatus->Description ."\n";
            //print_r($client->__getLastRequest());
        }
        else if (strcmp($operation , "ProcessShipConfirm") == 0) {
            $resp = $client->__soapCall('ProcessShipConfirm',array($this->processShipConfirm()));
            echo "Response Status: " . $resp->Response->ResponseStatus->Description ."\n";
        }
        else {
            $resp = $client->__soapCall('ProcessShipeAccept',array($this->processShipAccept()));
            //get status
            echo "Response Status: " . $resp->Response->ResponseStatus->Description ."\n";
            echo "<pre>";
            print_r($resp);
            echo "</pre>";
        }
    }
    catch(Exception $ex){
        print_r ($ex);
    }

上面的代码中有161行,这是实际的代码行:

代码语言:javascript
运行
复制
$resp = $client->__soapCall('ProcessShipConfirm',array($this->processShipConfirm()));

我正在寻找一种方法来调试这个。它似乎没有到达catch块,我似乎无法确定异常的原因。

EN

回答 4

Stack Overflow用户

发布于 2016-02-23 18:53:08

尝试使用SoapFault捕获异常并打印其detail属性。

代码语言:javascript
运行
复制
try {

   $response = $client->$call( $params );

} catch (\SoapFault $fault) {

    //trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
    var_dump($fault->faultcode);
    var_dump($fault->faultstring);
    var_dump($fault->detail);
    die('Errore chiamata webservice UPS');

}

请参阅:http://php.net/manual/en/function.is-soap-fault.php

票数 4
EN

Stack Overflow用户

发布于 2013-09-05 04:47:42

我不知道PHP中异常处理的细微差别,但Soap异常在C#中也是奇怪的小but。在Visual Studio的调试器中,您可以在IDE中获得未处理异常的详细信息。如果您有这样做的选项,请查找异常的"detail" XML元素,因为这将包含web服务的消息,告诉您您的请求引用了什么。

至于实际上捕获异常,有一篇由@Jeff Atwood写的古老但很好的文章-尽管是为VB.NET写的-可能仍然提供了一些关于是什么使Soap异常如此,呃……slippery:Coding Horror | Throwing better SOAP exceptions

票数 1
EN

Stack Overflow用户

发布于 2014-05-15 22:44:29

注:对于它的价值,联合包裹提供了这个错误的坏跟踪编号。使用一个好的(有效的)跟踪号码,它纠正了我的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15800458

复制
相关文章

相似问题

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