SOAP :: Облегченная генерациякак мне от этого избавиться? - PullRequest
8 голосов
/ 08 августа 2011

Вот то, что я считаю соответствующим кодом SOAP :: Lite

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,
        ),
     ),
);

Он генерирует этот 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>

Я не могу понять,почему <c-gensym9 /> вложено в <requestMessage>, но мне не нужно быть там.Кто-нибудь может объяснить, почему это там?и как я могу переписать код, чтобы это не так?

Ответы [ 2 ]

3 голосов
/ 06 сентября 2011

Смотри, ма, без Генсима

$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,
        ),
     ),
);

см. Также http://perlmonks.com/?node_id=906383

0 голосов
/ 12 августа 2011

К сожалению, код, на который нам действительно нужно помочь, - это код, который вы (совершенно непреднамеренно) исключили как ... # noisy SOAP::Data stuff.

SOAP :: Lite может быть довольно счастливым.Он использует этот тег всякий раз, когда не понимает всю структуру данных, которую пытается создать.Таким образом, в вашем примере объект SOAP :: Data, определяющий тег requestMessage, кажется, передается массив, когда он не ожидается, отсюда и необходимость безымянного (c-gensym5) промежуточного тега.

Учитывая то, что сгенерировано выше, возможно, вы пытаетесь передать массив с хешем [ { data } ]?Всякий раз, когда SOAP :: Lite чувствует, что имя должно присутствовать (т.е. [ no name for hash --> { data } ]), когда ничего не предоставлено, оно будет "gensym", чтобы уточнить вывод.Может также случиться так, что SOAP :: Lite ожидает выхода чего-то, что не ускользнуло.

Очень официальное сообщение на soaplite.com под названием Как отключить проклятый c-gensymelements? , к сожалению, сама по себе не очень полезна (так как ссылки мертвы), но обратная машина может помочь.

Надеюсь, это поможет.Извините, я не могу быть более конкретным!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...