2010-02-25 97 views
1

包括XML在我的WSDL我的效应初探我有它的设置是这样的:在SOAP响应

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

我遇到的问题是什么我送的响应是XML,而不是一个字符串。由于这个,我得到了XML实体的响应(不是XML SOAP响应(没关系)),而是使用HTML实体而不是<和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> 

我缺少什么?

谢谢。

+0

你在使用什么平台? 。净? Java的?还有别的吗? – jrista 2010-02-25 05:34:52

+0

SOAP服务器是用PHP编写的。不是NuSOAP。 – 2010-02-25 05:37:14

回答

0

除非服务的模式完全描述了您要发送的XML,否则必须使用XML转义使XML以字符串形式通过管道。 &lt;tag&gt;而不是<tag>等等等等。

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

如果这对你来说都是新的,我建议下载Apache CXF的发行版。查看'wsdl-first'示例并查看模式是如何集成的。

+0

我有我正在返回的文件的xsd模式,但我一直无法弄清楚如何连接到wsdl使它成为休止类型。你知道一个可以帮助我的教程吗? – 2010-02-28 15:46:23

+0

< xs:import > – bmargulies 2010-10-18 15:30:05

0

你为什么指定消息部分的类型是xsd:string?它应该被指定为xsd:any或者在您的模式中定义的特定类型。然后你可以将它包含在内。

您正在看到您问计算机要做什么。

+0

我确实尝试过“xsd:any”,但它没有什么区别。 – 2010-02-28 15:43:33

+0

@redhatlab:在更改WSDL之后是否更新了客户端? 'xsd:any'应该会有很大的不同。如果没有其他的话,如果'xsd:any'已经生效,你还是不应该得到'xsi:type = xsd:string'。我不知道PHP,但它是如何与.NET一起工作的。 – 2010-02-28 18:43:31

1

在Perl

use XML::Entities; 

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

$response以下工作对我来说应该是由Web服务调用返回的XML。