代码之家  ›  专栏  ›  技术社区  ›  Emil Orol

在soap响应中包含xml

  •  1
  • Emil Orol  · 技术社区  · 14 年前

    在我的wsdl中,我的响应是这样设置的:

    <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>
    

    我错过了什么?

    谢谢您。

    3 回复  |  直到 11 年前
        1
  •  0
  •   bluish dmajkic    12 年前

    除非服务的模式准确地描述了要发送的xml,否则必须使用xml转义使xml作为字符串通过管道。 &lt;tag&gt; 而不是 <tag> 等等等等。

    或者,您需要更改模式以使用xml模式 any 微粒。

    如果这对您来说是全新的,我建议您下载 Apache CXF . 看看“wsdl优先”的例子,看看模式是如何集成的。

        2
  •  1
  •   New Alexandria    11 年前

    下面是我用Perl编写的

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

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

        3
  •  0
  •   John Saunders    14 年前

    为什么指定消息部分的类型为 xsd:string ?它应该被指定为 xsd:any 或者作为架构中定义的特定类型。然后你可以把它内联起来。

    你看到的正是你让电脑做的。