상세 컨텐츠

본문 제목

SOAP의 Attachment 기능을 이용한 이기종간 파일 전송-3

개발

by 동동주1123 2011. 11. 8. 17:20

본문

[저장용]
[가져온곳 : http://211.47.127.69:1010/ArticlePrint.screen?event=print&bbs=bbs50&oid=3021]


SOAP의 Attachment 기능을 이용한 이기종간 파일 전송-3 
  저 자 : 이영석
  출판일 : 2004년 1월호

   클라이언트 프로그램 작성

다음으로 서버와 파일을 주고 받는 클라이언트 프로그램을 작성하겠다. <리스트 3, 4>는 서버에서 제공하는 getFile, setFile 서비스를 사용하는 클라이언트 코드들이다.
<리스트 3>의 GetFileTestClient.java는 서버의 getFlie 메쏘드를 호출한다. 호출하는 메쏘드의 매개변수는 없으며 리턴 타입은 DataHandler이다. 다음을 염두에 두고 코드를 살펴보자. 이미 여러 차례 소개한 것처럼 클라이언트는 다양한 방법으로 작성할 수 있다. 스텁을 이용한 방법, AXIS의 call 객체를 이용한 방법, 로우레벨 API를 이용한 방법 등으로 클라이언트를 작성할 수 있다. 여기서는 AXIS의 call 객체를 이용해 클라이언트를 작성하였다.

org.apache.axis.client.Service service = 
new org.apache.axis.client.Service();
org.apache.axis.client.Call call = 
(org.apache.axis.client.Call)service.createCall();
DataHandler라는 타입을 사용하기 위해서 JAFDataHandler SerializerFactory와 JAFDataHandlerDeserializerFactory를 다음과 같은 방법으로 call 객체에 등록한다. 
call.registerTypeMapping(cls, qName, jafsf, jafdf, false);
서비스 결과 반환되는 리턴 타입과 호출할 메쏘드 이름을 설정한 후 다음의 코드에서 메쏘드를 호출한다.
Object ret = call.invoke( new Object[] {} );


<리스트 2>AttachmentTestDeploy.wsdd

반환된 DataHandler 타입의 리턴 값은 ret에 배정된다. 다음의 코드에서처럼 리턴 객체를 DataHandler로 캐스팅하고 저장한다.
DataHandler rdh = (DataHandler) ret;
FileOutputStream fos = new FileOutputStream(fileName);
rdh.writeTo(fos); 
이제 클라이언트 프로그램을 실행해 보자. 서버 쪽에 ServerFile .txt 파일을 위치시킨다. 다음의 명령으로 클라이언트를 컴파일하고 실행한다.

> javac GetFileTestClient.java
> java GetFileTestClient


<리스트3> getFile 서비스를 사용하는 클라이언트 코드 GetFileTestClient.java


<리스트4> setFile 서비스를 사용하는 클라이언트 코드 SetFileTestClient.java

서버와 클라이언트의 실행 결과는 <화면 2>와 같다. FromServer File.txt라는 이름의 파일이 클라이언트를 실행한 폴더에 생성된 것을 확인할 수 있다.
다음의 <리스트 4>는 서버가 제공하는 setFlie 서비스를 사용하는 클라이언트 코드이다. SetFileTestClient.java는 서버의 setFlie 메쏘드를 호출하여 클라이언트의 파일을 서버로 전송한다. 리턴 값은 없으며, 호출하는 메쏘드의 매개변수는 클라이언트가 전달하고자 하는 DataHandler이다. 이 프로그램 역시 AXIS의 call 객체를 이용해 클라이언트를 작성하였다.
call 객체를 생성하는 것이나 DataHandler를 사용하기 위해 JAFDataHandlerSerializerFactory와 JAFDataHandler DeserializerFactory를 등록하는 등의 작업은 앞서 살펴본 클라이언트 코드와 동일하다. getFile 메쏘드와는 다르게 setFile 메쏘드는 DataHandler 타입의 매개변수가 있다. setFlie 메쏘드를 호출할 때 매개변수로 클라이언트 쪽의 파일을 DataHandler 타입으로 전달하는 부분은 다음과 같다.
FileDataSource fileDataSource = new FileDataSource(file);
DataHandler dhSource = new DataHandler(fileDataSource);
Object ret = call.invoke( new Object[] {dhSource} );
전달하고자 하는 파일을 FileDataSource로 랩핑하고 Data Handler에 담아서 매개변수로 전달한다.
이제 setFileTestClient.java를 실행해 보자. 클라이언트 쪽에 ClientFile.txt 파일을 위치시킨다. 다음의 명령으로 클라이언트를 컴파일하고 실행시킨다.
> javac SetFileTestClient.java
> java SetFileTestClient ClientFile.txt
서버와 클라이언트의 실행 결과는 <화면 3>과 같다. FromClient File.txt라는 이름의 파일이 서버 폴더에 생성된 것을 확인할 수 있다.

 

print close

'개발' 카테고리의 다른 글

JAVA LogBack  (0) 2011.11.09
JAX-RS(JSR-311):RESTful 웹서비스 개발시 Annotation 정리  (0) 2011.10.17
자바 프로젝트 Validation 방법  (0) 2011.10.16

관련글 더보기