2010-07-21 2 views
1

좋은 날,xml을 nusoap으로 전달합니다.

nusoap에서 xml을 전달하는 데 문제가 있습니다.

샘플 : 은 내가 nusoap 응답이보다보다 적은 기호를 제거

test123/test 

입니다

<test>123</test> 

이 XML을 전달합니다.


require_once('nusoap/nusoap.php'); 

$client = new nusoap_client('http://localhost/nusoap/ws.php?wsdl', true); 

$clientparam = '<test>123</test>'; 

$result = $client->call('myFunction', 
    array('param'=>$clientparam) 
); 

print_r($result); 
:이 클라이언트에 대한 내 코드


require_once('nusoap/nusoap.php'); 
$server = new nusoap_server; // Create server instance 

$server->configureWSDL('demows','http://example.org/demo'); 

$server->register('myFunction', 
    array("param"=>"xsd:string"), // input 
    array("result"=>"xsd:string"), // output 
    'http://example.org/demo' 
); 

function myFunction($parameters) { 
    return $parameters; 
} 

// Use the request to try to invoke the service 
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA: ''; 
$server->service($HTTP_RAW_POST_DATA); 

입니다 :

이 서버에 대한 내 코드입니다

* 위 코드는 PHP 버전 5.3.0에서는 작동하지만 PHP 5.2.0-8 + etch13에서는 사용하지 않습니다.

2 가지 버전의 모든 문제를 인터넷에서 검색했지만 찾지 못했습니다. 도움을 주시면 감사하겠습니다. TIA

답변

0

전혀 알지 못합니다.하지만 엔티티가 삭제되는 것처럼 들립니다. & gt의 경우 '>', & lt의 경우 '<'을 변경하여 양쪽 끝의 엔티티를 제어하는 ​​것이 좋습니다. 수동으로 또는 htmlentities()와 같은 기능을 사용하십시오.

+0

이미 모든 앰퍼샌드를 제거하려고 시도했습니다. >은 gt가됩니다. <은 lt; 따라서 올바른 xml 형식이 아직 없습니다. – roel

+0

엔티티를 제거한 것 같습니다.다른쪽에 제어권을 가지고 있습니까? 즉, 비언 문자 (예 : [test] 123 [/ test])를 사용할 수없고 반대편에서 재구성 할 수 있습니까? http://bugs.php.net/bug.php?id=45996과 같이 libxml 스트리핑 엔티티와 유사한 몇 가지 보고서가 있습니다. 5.2.9 – Woody

+0

에서 수정되었습니다. http://drupal.org/node/347298 – Woody

0

다른 버전의 meus를 사용하고 있는지는 잘 모르지만 프록시가 작동하고있는 것 같습니다. 또한 클라이언트를 nusoap_client가 아닌 soapclient로 인스턴스화합니다 (이전에는 보지 못했습니다).

$client = new soapclient('http://localhost/nusoap/ws.php?wsdl', true); 
$proxy = $client->getProxy(); 
$response = $proxy->call("myfunction", array('test' => 123)); 
1

libxml2를 업그레이드하고 PHP를 다시 빌드하십시오.

+0

우디가보고 한 버그입니다. 그냥 libxml2를 다운 그레이드 (또는 그것을 업그레이 드 더 나은). PHP를 다시 빌드 할 필요는 없습니다. 표준 패키지를 사용하는 경우에는 웹 서버를 다시 시작하는 것을 잊지 마십시오. – Yvan

0

예, 대답은 soapval 클래스입니다.

지저분하지만 간단한 예제는 here입니다. 빠르면 -이 클래스를 비 제네릭 타입, 즉 PHP 배열로 둘러 싸야합니다. 이 랩의 중첩은 물론 발생할 수 있지만 디자인에 위배되는 것은 아닙니다.

0

비누 메시지에 xml 값을 전달하고 서버와 클라이언트를 모두 제어하려면 (또는 적어도 클라이언트에게 지시 할 수 있음) base64로 xml을 인코딩하면 안됩니다. 그러면 파서는 그것을 보통 문자열로보고 혼동하지 않습니다.