2011-08-08 6 views
8

Esto es lo que creemos que es el jabón relevante :: código LiteSOAP :: Lite Generando <c-gensym ..> ¿cómo me deshago de él?

my $req3 = SOAP::Lite->new(
    readable => 1, 
    autotype => 0, 
    proxy => 'https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor', 
); 

$req3->requestMessage(
    \SOAP::Data->new(
     name => 'item', 
     attr => { foo => '0' }, 
     value => \SOAP::Data->new(
      name => 'foo', 
      value => 1, 
     ), 
    ), 
); 

Está generando este XML

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Body> 
<requestMessage> 
    <c-gensym9> 
    <item foo="0"> 
     <foo>1</foo> 
    </item> 
    </c-gensym9> 
</requestMessage> 
</soap:Body> 

No puedo entender por qué <c-gensym9 /> está anidado dentro de <requestMessage> pero no necesito estar allí. ¿Alguien puede explicar por qué está allí? y cómo puedo reescribir el código para que no lo sea?

Respuesta

2

ma Mira, hay gensym

$req3->requestMessage(
    ## \SOAP::Data->new(## this makes gensym 
    SOAP::Data->new(## no refref, no gensym 
     name => 'item', 
     attr => { foo => '0' }, 
     value => \SOAP::Data->new(
      name => 'foo', 
      value => 1, 
     ), 
    ), 
); 

ver también http://perlmonks.com/?node_id=906383

0

Por desgracia, el código que realmente necesitamos para ayudar a responder es el código que (sin intención) excluido como ... # noisy SOAP::Data stuff.

SOAP :: Lite puede ser muy gensym feliz. Utiliza esta etiqueta siempre que no comprenda la estructura de datos completa que está intentando generar. Por lo tanto, en su ejemplo, el objeto SOAP :: Data que define la etiqueta requestMessage parece pasar una matriz cuando no se espera uno, de ahí la necesidad de una etiqueta intermedia sin nombre (c-gensym5).

Teniendo en cuenta lo que está generada anteriormente, parece que puede estar tratando de pasar de una matriz con un hash [ { data } ]? Siempre que SOAP :: Lite sienta que un nombre debe estar presente (es decir, [ no name for hash --> { data } ]) cuando no se proporciona ninguno, se "gensym" para aclarar la salida. También podría ser que SOAP :: Lite espera que se escape algo que no se haya escapado.

Una publicación que parece muy oficial en soaplite.com llamada How do you turnoff the blasted c-gensym elements? lamentablemente no es muy útil en sí misma (ya que los enlaces están muertos) pero la máquina de regreso podría ayudar.

Espero que esto ayude. ¡Lo siento, no puedo ser más específico!

+0

sí encontré que post ... lamentablemente es enlaces están muertos ... así que es inútil. – xenoterracide

+0

@JT actualicé mi código para ser un ejemplo completo – xenoterracide

+0

Los enlaces en ese artículo se pueden encontrar en: http://www.techrepublic.com/article/a-hands-on-tour-of-soaplite/1045078 y http: //web.archive.org/web/20070308122644/http://www.majordojo.com/archives/2003_04.html – Ether

Cuestiones relacionadas