2010-01-05 4 views
2

SOAP에서 특정 뉴스 항목에 대한 세부 정보를 가져 오는 기능을 사용하려고합니다. 문제는 예상치 못한 결과를 얻지 못한다는 것입니다. 단지 이상한 오류입니다. PHP5에서 내장 SOAP 클라이언트를 사용하고 있습니다.PHP에서 외부 참조 인코딩 SOAP 오류 인코딩

내 오류는 다음과 같습니다

Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: External reference ' https://newsclient.omxgroup.com/cdsPublic/viewDisclosure.action?disclosureId=379485&messageId=454590 ' in /home/********/public_html/********/updatenews3.php:15

내 코드는 다음과 같습니다

<?php 
    $login = '***'; 
    $password = '***'; 
    $client = new SoapClient(
    'https://newsclient.omxgroup.com/wsdl/DisclosureNewsService.wsdl', 
    array(
     'login' => $login, 
     'password' => $password 
    )); 
    $param = array('lastPublicationId' => 361825); 
    $result = $client->fetchNews($param); 
?> 

오류가 결과가 발견 모든 lastPublicationId, 동일합니다. 그것은 마치 PHP가 XML 응답 (오류 메시지에있는 URL)의 어딘가에서 발견되는 링크를로드하려고 시도하는 것처럼 보이며 액세스 할 수없는 것처럼 보입니다. 비록 내가 많이 봤 거든, 나는 해결책을 찾을 수 없습니다. 내가 발견 할 수있는 유일한 사실은 이것이 이전 버전의 PHP에서 버그로보고 된 것 같지만 PHP 5.2.2를 말합니다. PHP 5.2.9를 사용하고 있기 때문에 ' 그거야. 이 오류의 원인이 & - 문자 인 것으로 의심됩니다.

는 WSDL 파일

는 여기에서 찾을 수 있습니다 : https://newsclient.omxgroup.com/wsdl/DisclosureNewsService.wsdl

누군가는이 오류를 알고, 어떤 해결책을 알고 있나요?

답변

2

$client->fetchNews($param);이 반환하는 XML이 제대로 이스케이프 처리되지 않았을 수 있습니다. 오류 메시지에 표시된 URL에 이스케이프 처리되지 않은 &이있는 것 같습니다.

$client = new SoapClient(
'https://newsclient.omxgroup.com/wsdl/DisclosureNewsService.wsdl', 
array(
    'login' => $login, 
    'password' => $password, 
    'trace' => 1 
)); 
$param = array('lastPublicationId' => 361825); 

try { 
    $result = $client->fetchNews($param); 
} 
catch (SoapFault $sf) { 
    print '<pre>'; 
    // print the exception 
    print_r($sf); 

    // print the XML response 
    print $client->__getLastResponse(); 
} 

해결 방법 (서버가 잘못된 XML을 반환하는 경우) 유사한 코드를 사용하는 것입니다

가장 좋은 점은 XML이 마지막으로 응답을 추적하고 인쇄 설정하여, 반환 정확히 확인하는 아마 위에서 예외를 잡으려고. 그런 다음 반환 된 XML (__getLastResponse() 사용)을 수동으로 가져 와서 htmlenties 나 regexp 등을 사용하여 직접 정리 한 다음 반환하고 응용 프로그램의 나머지 부분에서 사용합니다.