2013-07-03 16 views
5

以下のコードの変数$ responseは、SOAP要求の値でなければならないのにNULLです。 (潮のリスト)。 $ client - > __ getLastResponse()を呼び出すと、SOAPサービスから正しい出力が得られます。SoapClientは "NULL"を返しますが、XMLを返します__getLastResponse()はXMLを返します

ここで何が間違っているかご存知ですか?ありがとう! :)ここで

は私のコードです:

$options = array(
    "trace" => true, 
    "encoding" => "utf-8" 
); 
$client = new SoapClient("http://opendap.co-ops.nos.noaa.gov/axis/webservices/highlowtidepred/wsdl/HighLowTidePred.wsdl", $options); 

$params = array(
    "stationId" => 8454000, 
    "beginDate" => "20060921 00:00", 
    "endDate" => "20060922 23:59", 
    "datum" => "MLLW", 
    "unit" => 0, 
    "timeZone" => 0 
); 

try { 
$result = $client->getHLPredAndMetadata($params); 
echo $client->__getLastResponse(); 
} 
catch (Exception $e) { 
    $error_xml = $client->__getLastRequest(); 
    echo $error_xml; 
    echo "\n\n".$e->getMessage(); 
} 
var_dump($result); 
+0

$応答があるの解決PackageChangeBatchResponseまだ実際のXMLを返すべきか? – Matheno

+2

WSDL、SOAによると、 pレスポンスは(サーバによって)間違っているので、クライアントはそれを解析できません。私はあなたのコードをテストし、応答XMLにはHighLowValuesタグが含まれていますが、それは 'getHighLowTidePredictionsResponse'関数に関連しています。 – Fracsi

+0

@Frasci:ソリューションが機能しました。ありがとうございました! :) – Padraig

答えて

4

$result(またはSoapCallに対する応答が)nullであることを理由は確かである

私はちょうど同じ問題に遭遇した - WSDLは言いました。応答は、応答に一致するようにWSDLを変更PackageChangeResponse

を持っている/ WSDLに一致するように応答を変更すると問題

0

あなたは以下のようにオプションパラメータを与える必要があります:

<?php 
// below $option=array('trace',1); 
// correct one is below 
$option=array('trace'=>1); 

$client=new SoapClient('some.wsdl',$option); 

try{ 
    $client->aMethodAtRemote(); 
}catch(SoapFault $fault){ 
    // <xmp> tag displays xml output in html 
    echo 'Request : <br/><xmp>', 
    $client->__getLastRequest(), 
    '</xmp><br/><br/> Error Message : <br/>', 
    $fault->getMessage(); 
} 
?> 

"トレース" パラメータは、要求の出力を可能にします。これで、SOAPリクエストが表示されます。 (ソース:WSDLが無効であるため、PHP.net

関連する問題