2011-07-21 16 views
1

私はPHPを使ってJavaクライアントを実行しようとしています。これは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); 

は、私は、javaに $outputに値を渡す前に終了する機会を与えるために sleep(30)を追加しましたが、それは解決しません。コマンド java SOAPClient4XG http://turbolink.turbo-marketing.net:8180 getList.xml"が機能します。私はそれをSOAP UIと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> 

ありますか? isset($output)を条件付きにすると、変数が設定されないことがわかります。私は条件付きでshell_exec()を再度呼び出してみましたが、何も得られません。

*編集:サーバーにIP制限があるため、このコードをマシン上で実行しようとしてもまったく同じ動作をしません。あなたはエラー応答を得るでしょう。

+0

これはQuercusで実行していますか? – Bitmap

答えて

0

javaファイルをサーバーのenvパスに入れました。また、絶対パスを/jdk1.6.0_14/bin/java SOAPClient4XG http://......で作成することもできました。

関連する問題