2011-04-19 55 views
41

En SOAP UI estoy haciendo una petición a un servicio web como esta:SOAP UI - Cómo pasar XML dentro de parámetros

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xxx="http://xxx.call/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <cotf:call_XXX> 
     <!--Optional:--> 
     <arg0> 
      <!--Optional:--> 
      <parameter1>some text</parameter1> 
      <!--Optional:--> 
      <parameter2>XML string</parameter1> 
     </arg0> 
     </cotf:call_XXX> 
    </soapenv:Body> 
</soapenv:Envelope> 

Lo que me gustaría saber es cómo me puede pasar una cadena XML en el parámetro 2, ya que si pongo la cadena XML directamente asume los nodos de cadena XML como parámetros de la petición ....

, gracias

+2

¿Es posible CDATA? – Kangkan

Respuesta

96

Cualquiera de codificar las entidades XML necesarios o utilizar CDATA.

<arg0> 
    <!--Optional:--> 
    <parameter1>&lt;test>like this&lt;/test></parameter1> 
    <!--Optional:--> 
    <parameter2><![CDATA[<test>or like this</test>]]></parameter2> 
</arg0> 
+0

En el primer ejemplo, ¿por qué no codificar '>' con '>'? ¿Está bien codificar tanto '<' and '>'? – ForguesR

+1

@ForguesR La codificación '>' es necesaria solo en algunas situaciones extremas. Por seguridad, puede estar bien codificarlo siempre cuando sea parte del contenido. Es posible que en el pasado algunos validadores/analizadores XML no reconocieran '>' como una entidad XML válida, pero podría estar hablando de basura. https://www.w3.org/TR/1998/REC-xml-19980210 –

+0

¿Se necesita algo especial en el extremo receptor si usamos el método CDATA o se traducirá correctamente sin ayuda del servicio? – Bpainter

1

NOTA: Esta es sólo una alternativa para el anterior marco .NET 3.5 y proporcionado anteriormente

Puede enviarlo como XML sin procesar

<test>or like this</test> 

Si se declara la paramater2 como XElement Tipo de datos

+0

¿Alguna idea de cómo especificar en una solicitud sin procesar (es decir, a través de Fiddler o SoapUi o Wizdler) que 'parameter2' es el tipo de datos XElement? – drzaus

0

Para enviar CDATA en un objeto de solicitud, utilice el método SoapObject.setInnerText("...");.

Cuestiones relacionadas