在SOAP响应中包含XML

时间:2010-02-25 05:06:36

标签: php xml soap

在我的WSDL中,我的反应是我设置如下:

<message name='getPartsResponse'>
  <part name='Result' type='xsd:string'/>
</message>

我遇到的问题是我在响应中发送的是XML而不是字符串。因此,我使用HTML实体而不是&lt;获取响应的XML(而不是XML SOAP Response(可以))。和&gt; XML有。

这就是我得到的:

<SOAP-ENV:Body>
<ns1:getPartsResponse>
<Result xsi:type="xsd:string">
&lt ;catalog&gt ;
&lt ;result id="1"&gt ;
&lt ;part&gt ;AAAAAAAAAAA&lt ;/part&gt ;
&lt ;qty>0000000000&lt ;/qty&gt ;
&lt ;mfg&gt ;XXXXXXXXXXXXX&lt ;/mfg&gt ;
&lt ;/result&gt ;
&lt ;result id="2"&gt ;
&lt ;part&gt ;BBBBBBBBBBB&lt ;/part&gt ;
&lt ;qty>11111111111&lt ;/qty&gt ;
&lt ;mfg&gt ;ZZZZZZZZZZZZZ&lt ;/mfg&gt ;
&lt ;/result&gt ;
&lt ;/catalog&gt ;
</Result>
</ns1:getPartsResponse>
</SOAP-ENV:Body>

这就是我想要的:

<SOAP-ENV:Body>
<ns1:getPartsResponse>
<Result xsi:type="xsd:string">
<catalog>
<result id="1">
<part>AAAAAAAAAAA</part>
<qty>0000000000</qty>
<mfg>XXXXXXXXXXXXX</mfg>
</result>
<result id="2">
<part>BBBBBBBBBBB</part>
<qty>11111111111</qty>
<mfg>ZZZZZZZZZZZZZ</mfg>
</result>
</catalog>
</Result>
</ns1:getPartsResponse>
</SOAP-ENV:Body>

我错过了什么?

谢谢。

3 个答案:

答案 0 :(得分:1)

以下在perl中为我工作

use XML::Entities;

$b = XML::Entities::decode('all', $response);
print $b;

$response应该是webservice调用返回的XML。

答案 1 :(得分:0)

除非服务的架构完全描述了您尝试发送的XML,否则必须使用XML转义来使XML作为字符串传递给管道。 &lt;tag&gt;代替<tag>等等,等等。

或者,您需要更改架构以使用XML架构any粒子。

如果这对您来说是全新的,我建议您下载Apache CXF的发行版。查看'wsdl-first'示例,了解如何集成架构。

答案 2 :(得分:0)

为什么指定邮件部分的类型为xsd:string?它应该已指定为xsd:any或作为架构中定义的特定类型。然后你可以把它包括在内。

您正好看到了您要求计算机执行的操作。