如何使用PHP的SOAP库将自定义元素添加到SoapFault的详细信息部分

米沙

我正在针对Sonos的Music API(SMAPI)构建服务有时我必须以以下格式发送回响应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>Client.NOT_LINKED_RETRY</faultcode>
         <faultstring>Link Code not found retry...</faultstring>
         <detail>
            <ExceptionInfo>NOT_LINKED_RETRY</ExceptionInfo>
            <SonosError>5</SonosError>
         </detail>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

我正在使用PHP SOAP库构建服务,对于以上响应,我尝试抛出SoapFault如下所示:

throw new SoapFault('Client.NOT_LINKED_RETRY', 'Link Code not found retry...');

但是,当我尝试这样做时,发送回的响应如下所示:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>Client.NOT_LINKED_RETRY</faultcode>
         <faultstring>Link Code not found retry...</faultstring>
         <detail>
            <SonosError/>
         </detail>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

请注意,没有ExceptionInfo,那SonosError是空的。是否可以设置ExceptionInfoSonosError使用SoapFault我尝试了各种方法,但无法使其正常工作,因此,作为一项工作,我现在正在这样做:

http_response_code(500);
header("Content-type: text/xml");

$ret = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
$ret .= '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">';
$ret .= '<SOAP-ENV:Body>';
$ret .= '<SOAP-ENV:Fault>';
$ret .= '<faultcode>Client.NOT_LINKED_RETRY</faultcode>';
$ret .= '<faultstring>Link Code not found retry...</faultstring>';
$ret .= '<detail>';
$ret .= '<ExceptionInfo>NOT_LINKED_RETRY</ExceptionInfo>';
$ret .= '<SonosError>5</SonosError>';
$ret .= '</detail>';
$ret .= '</SOAP-ENV:Fault>';
$ret .= '</SOAP-ENV:Body>';
$ret .= '</SOAP-ENV:Envelope>'."\n";

echo $ret; exit;

不确定是否相关,但可以在此处找到WSDL

更新:当我尝试如下建议时:

$detail = new StdClass();
$detail->SonosError = 5;
$detail->ExceptionInfo = 'NOT_LINKED_RETRY';

throw new SoapFault(
  'Client.NOT_LINKED_RETRY',
  'Link Code not found retry...',
  NULL,
  $detail
);

我得到:

<detail>
  <customFault>
    <SonosError>5</SonosError>
    <ExceptionInfo>NOT_LINKED_RETRY</ExceptionInfo>
  </customFault>
</detail>

除了<customFault>标签,这几乎是我所需要的有没有办法摆脱它直接拥有SonosError拥有ExceptionInfo<detail>

阿尔基斯·卡洛格里斯(Alkis Kalogeris)

您没有看到该ExceptionInfo标签的事实是因为在wsdl中未定义标签。另一方面SonosError定义。首先,为了填充,SonosError您必须传递参数。

这里您可以看到构造函数具有更多参数

SoapFault('code', 'string', 'actor', 'detail', 'name', 'header');

为了通过这样的SonosError电话

$detail = new StdClass(); 
$detail->SonosError = 5;
throw new SoapFault('Client.NOT_LINKED_RETRY', 'Link Code not found retry...', null, $details);

至于ExceptionInfo,必须更改wsdl。就像现在一样,details标签由该部分表示

<wsdl:message name="customFault">
    <wsdl:part name="customFault" element="tns:SonosError"/>
</wsdl:message> 

<xs:element name="SonosError" type="xs:int"/>

如果您对这些内容进行更改,则将拥有所需的内容。

<wsdl:message name="customFault">
   <wsdl:part name="customFault" type="tns:customFaultType" />
</wsdl:message>

<xs:complexType name="customFaultType">
   <xs:sequence>
      <xs:element name="SonosError" type="xs:int"/>
      <xs:element name="ExceptionInfo" type="xs:string"/>
   </xs:sequence>
</xs:complexType>

当然,您添加参数,数组将变成这样

$detail = new StdClass(); 
$detail->SonosError = 5;
$detail->ExceptionInfo = 'NOT_LINKED_RETRY';

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Spring WS中将自定义元素添加到SOAP标头

来自分类Dev

将自定义CSS类添加到WFFM表单部分的图例元素

来自分类Dev

将自定义元素添加到ngRepeat列表

来自分类Dev

如何将我的自定义字段添加到 Woocommerce 订单流程(查看表单、订单详细信息和电子邮件流程)

来自分类Dev

将自定义PHP表单添加到Wordpress

来自分类Dev

如何使用辅助函数将自定义类名称添加到Handlebars模板中的元素?

来自分类Dev

如何将自定义库添加到暂存文件

来自分类Dev

使用jQuery将自定义CSS类添加到动态创建的元素中

来自分类Dev

将自定义Direcitves添加到自定义库

来自分类Dev

如何使用Cartopy将自定义shapefile添加到地图

来自分类Dev

使用CocoaPods时如何将自定义项目配置添加到Xcode?

来自分类Dev

如何使用菜单布局将自定义项目添加到NavigationView?

来自分类Dev

如何使用openssl将自定义字段添加到证书

来自分类Dev

如何使用afBedSheet将自定义过滤器添加到HttpPipeline?

来自分类Dev

如何使用R将自定义转换添加到PMML?

来自分类Dev

如何使用cloudformation将自定义策略添加到AWS中的服务链接角色?

来自分类Dev

如何使用Java将自定义字段添加到Salesforce中的现有对象

来自分类Dev

如何使用Jython将自定义属性添加到数据源?

来自分类Dev

如何使用自定义表单(与任何模型无关)将自定义页面添加到django admin?

来自分类Dev

如何将自定义地图和自定义数据添加到Highmaps?

来自分类Dev

如何将自定义文件添加到自定义文章列表页面

来自分类Dev

SoapUI-自动将自定义SOAP标头添加到传出请求中

来自分类Dev

在Firebase Functions中将自定义信息添加到Stackdriver错误日志

来自分类Dev

将自定义信息添加到Office365中的日历项目

来自分类Dev

在什么时候可以将自定义信息添加到userDetails中?

来自分类Dev

将自定义卡信息添加到付款请求

来自分类Dev

如何在TFS Build 2015中将自定义部分添加到构建摘要中?

来自分类Dev

Android:如何向联系人详细信息添加自定义字段/操作

来自分类Dev

如何将自定义结帐字段打印到电子邮件订单详细信息中

Related 相关文章

  1. 1

    在Spring WS中将自定义元素添加到SOAP标头

  2. 2

    将自定义CSS类添加到WFFM表单部分的图例元素

  3. 3

    将自定义元素添加到ngRepeat列表

  4. 4

    如何将我的自定义字段添加到 Woocommerce 订单流程(查看表单、订单详细信息和电子邮件流程)

  5. 5

    将自定义PHP表单添加到Wordpress

  6. 6

    如何使用辅助函数将自定义类名称添加到Handlebars模板中的元素?

  7. 7

    如何将自定义库添加到暂存文件

  8. 8

    使用jQuery将自定义CSS类添加到动态创建的元素中

  9. 9

    将自定义Direcitves添加到自定义库

  10. 10

    如何使用Cartopy将自定义shapefile添加到地图

  11. 11

    使用CocoaPods时如何将自定义项目配置添加到Xcode?

  12. 12

    如何使用菜单布局将自定义项目添加到NavigationView?

  13. 13

    如何使用openssl将自定义字段添加到证书

  14. 14

    如何使用afBedSheet将自定义过滤器添加到HttpPipeline?

  15. 15

    如何使用R将自定义转换添加到PMML?

  16. 16

    如何使用cloudformation将自定义策略添加到AWS中的服务链接角色?

  17. 17

    如何使用Java将自定义字段添加到Salesforce中的现有对象

  18. 18

    如何使用Jython将自定义属性添加到数据源?

  19. 19

    如何使用自定义表单(与任何模型无关)将自定义页面添加到django admin?

  20. 20

    如何将自定义地图和自定义数据添加到Highmaps?

  21. 21

    如何将自定义文件添加到自定义文章列表页面

  22. 22

    SoapUI-自动将自定义SOAP标头添加到传出请求中

  23. 23

    在Firebase Functions中将自定义信息添加到Stackdriver错误日志

  24. 24

    将自定义信息添加到Office365中的日历项目

  25. 25

    在什么时候可以将自定义信息添加到userDetails中?

  26. 26

    将自定义卡信息添加到付款请求

  27. 27

    如何在TFS Build 2015中将自定义部分添加到构建摘要中?

  28. 28

    Android:如何向联系人详细信息添加自定义字段/操作

  29. 29

    如何将自定义结帐字段打印到电子邮件订单详细信息中

热门标签

归档