SOAP을 이용한 AJAX


SOAP을 이용한 AJAX


soap을 이용한 ajax구현입니다.

-서론-

우선 '그냥 ajax를 사용하면 되지 왜 궂이 soap을 이용하느냐' 라는 질문을 던지는 분이 계시죠?
궂이 soap으로 ajax를 구현하냐면,
좀 정형화(?) 시킬수 있기때문이죠.
페이지 하나로 끝낼수 있는것도 있고..
뭐 -_-;; 아무튼 목적은 코드의 재사용에 있습니다.
그냥 ajax를 사용하는것보다 soap을 이용해서 사용하는게 다른 용도로도(ajax외의것) 사용할수 있으니까요.

-본론-

1. 라이브러리 선택
1.1. javascript (Client)
일단 공개 라이브러리중에 soap관련 공개 라이브러리가 몇가지 있습니다.
저는 JavaScriptSOAPClient 라는 라이브러리를 사용하겠습니다.
JavaScriptSOAPClient 같은경우 SOAPClient만 있습니다.
서버구축은 안된다는 말이죠..
그리고.. 아직 soap에대한 지식이 별로 없으므로..
자료형은 json을 사용 하겠습니다.

1.2. nusoap (Server)
nusoap은 예전에 올린 tip에 있습니다.
아니면 google에서 nusoap이라고 치면 수없이 나옵니다 -_-;;


2. 준비과정
일단 서버를 구축해야겠죠?
SOAP Server구축은 설명없이 진행하겠습니다.
(Client도 그다지 설명은 많지 않습니다 -_-;;)

-폴더 구조

_lib -> nusoap
_lib -> json
_javascript -> soapclient.js
_javascript -> json.js
soapServer.php
soapClient.html


3. 개발

자~ 그럼 시작해보겠습니다.

일단 SoapServer를 개발해야겠죠?

※잠깐 타임~! nusoap을 사용하려다 보니 soapclient클레스가 충돌나죠?(안나면 말고 -_-;;) soapClient클레스명을 soap_client나 nusoapClient로 변경해주시기 바랍니다.
(전 nusoapClient로 변경했습니다.)


#soapServer.php

//nusoap 클레스
include_once("_lib/nusoap/nusoap.php");
//json_encode
include_once("_lib/json/json_encode.php");

//nusoap server 시작
$server = new soap_server();

//WSDL 설정
$server->configureWSDL("helloWorld","urn:helloWorld");

//함수 등록
$server->register("helloWorld",
array("input"=>"xsd:String"),
array("helloWorldResult"=>"xsd:String"),
"namespace",
"namespace#helloWorldResult");

$server->register("helloWorld2",
array("input"=>"xsd:String"),
array("helloWorld2Result"=>"xsd:String"),
"namespace",
"namespace#helloWorld2Result");

//Request Data
$server->service($HTTP_RAW_POST_DATA);


//함수

//helloWorld
function helloWorld($input){
$data = "Hello World
input String : ".iconv("EUCKR","UTF8",$input);
$return = json_encode2($data);
return "";
}

//helloWorld2
function helloWorld2($input){
$data = "Hello World2
input String : ".iconv("EUCKR","UTF8",$input);
$return = json_encode2($data);
return "";
}
?>


이로써 서버는 구축됬습니다.
이재 클라이언트를 구축해야죠?

#soapClient.html



soapClient
















여기서 주의할점.
예전 SoapServer 구현할때
함수 등록 부분에서


$server->register("helloWorld",
array("input"=>"xsd:String"),
array("return"=>"xsd:String"),
"namespace",
"namespace#helloWorldResult");

return부분을

$server->register("helloWorld",
array("input"=>"xsd:String"),
array("helloWorldResult"=>"xsd:String"),
"namespace",
"namespace#helloWorldResult");

이렇게 고치시면 됩니다.
javascript soap라이브러리에서는 리턴 받는 값을
함수명+Result 로 받더군요...

다른건 안그러던대 -_-;;
xml파싱하기 귀찮았나봅니다;;;

그리고.. JavaScriptSOAPClient에서는
xml을 배열로 받는 로직이 없어서
json으로 받아버립니다.(제가 모르는걸수도 있지만 -_-;;)




-Ending-

Library Creater :
nusoap ( http://sourceforge.net/projects/nusoap/ )
JavaScriptSOAPClient ( Matteo Casati, Ihar Voitka - http://www.guru4.net/ )
json_encode2 ( 행복한고니 - http://mygony.com/ )
json ( http://www.json.org/ )

Creater : Eisemheim ( http://www.eitetu.pe.kr/eitetu )

Sample Page : http://www.eisemheim.com/_sample/soap/javascript/soapClient.html