Проблема с обработчиком результатов - PullRequest
1 голос
/ 21 июля 2011

Я пытаюсь запустить клиент Java через PHP, который отправляет XML на другой сервер. Обычно получение ответа занимает около 10 - 30 секунд. Когда я запускаю PHP, я могу сказать, что нет времени загрузки, поэтому я думаю, что остальная часть кода выполняется до получения ответа. Я пытаюсь отобразить ответный ответ в браузере и записать его в другой XML-файл в том же каталоге. Ничего этого не происходит. Новый XML создан, но пуст.

$output = shell_exec("java SOAPClient4XG http://turbolink.turbo-marketing.net:8180    getList.xml");
sleep(30);
echo $output;

$filename = "getListResult";
$filename .= ".xml";
$fp = fopen($filename, 'w');
fwrite($fp, $output);
fclose($fp);

Я добавил sleep(30), чтобы дать java возможность закончить перед передачей значения в $output, но это не помогает. Команда java SOAPClient4XG <a href="http://turbolink.turbo-marketing.net:8180" rel="nofollow">http://turbolink.turbo-marketing.net:8180</a> getList.xml" работает. Я использовал его в пользовательском интерфейсе SOAP и через PUTTY, запустив его в каталоге. Вывод, который я получаю, в формате XML / SOAP:

<?xml version="1.0" encoding="utf-8" ?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <env:Body>
<n1:getListsResponse xmlns:n1="urn:Turbolink"
    env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <getListsResult xsi:type="n1:getListsResult">
    <responseMessages n2:arrayType="n1:responseMessage[1]"
        xmlns:n2="http://schemas.xmlsoap.org/soap/encoding/"
        xsi:type="n2:Array">
      <responseMessage>
        <code xsi:type="xsd:string">0</code>
        <message xsi:type="xsd:string">No Error</message>
      </responseMessage>
    </responseMessages>
    <dataLists xmlns:n3="http://schemas.xmlsoap.org/soap/encoding/"
        xsi:type="n3:Array"
        n3:arrayType="n1:dataList[5]">
      <dataList>
        <listID xsi:type="xsd:string">CVPLUS  </listID>
        <listDescription xsi:type="xsd:string">ConsumerVision Plus</listDescription>
        <listVersion xsi:type="xsd:integer">94</listVersion>
      </dataList>
      <dataList>
        <listID xsi:type="xsd:string">MORTHOT </listID>
        <listDescription xsi:type="xsd:string">Mortgage Hotlines</listDescription>
        <listVersion xsi:type="xsd:integer">206</listVersion>
      </dataList>
      <dataList>
        <listID xsi:type="xsd:string">MRTGBASE</listID>
        <listDescription xsi:type="xsd:string">Mortgage Base</listDescription>
        <listVersion xsi:type="xsd:integer">94</listVersion>
      </dataList>
      <dataList>
        <listID xsi:type="xsd:string">SUPERNEW</listID>
        <listDescription xsi:type="xsd:string">American New Movers Plus</listDescription>
        <listVersion xsi:type="xsd:integer">171</listVersion>
      </dataList>
      <dataList>
        <listID xsi:type="xsd:string">TSEBUS  </listID>
        <listDescription xsi:type="xsd:string">TSE Business File</listDescription>
        <listVersion xsi:type="xsd:integer">38</listVersion>
      </dataList>
    </dataLists>
  </getListsResult>
</n1:getListsResponse>

Есть ли способ подождать, пока $ output не получит какое-либо значение, прежде чем двигаться дальше? Когда я ставлю условное выражение isset($output), я вижу, что переменная никогда не устанавливается. Я попытался снова вызвать shell_exec() в условном выражении, но все равно ничего не получил.

* edit: сервер имеет ограничения IP, поэтому попытка запустить этот код на вашем компьютере не будет работать точно так же. Вы получите / должны получить ответ об ошибке.

1 Ответ

0 голосов
/ 22 июля 2011

Я поместил Java-файл в мой env-путь к серверу.Кроме того, создание абсолютного пути к нему с помощью /jdk1.6.0_14/bin/java SOAPClient4XG http://...... также сработало.

...