본문 바로가기

웹서비스

SOAP 에서 첨부파일 전송하기

출처: http://lvsin.tistory.com/217

간단하게 getFile 과 setFile 이다.

public class fileDownloader {
FileOutputStream fos;

public DataHandler getFile() {

System.out.println("Server send File");

File file = new File("c:/test.txt");

if (!file.exists()) {
System.out.println("file not found!");
System.exit(0);
}

FileDataSource filDataSource = new FileDataSource(file);

DataHandler dh = new DataHandler(filDataSource);
return dh;
}

public void setFile(DataHandler dh) {
if (dh == null)
System.out.println("attachement is null");
else {
System.out.println("Client got file");

}

try {

fos = new FileOutputStream("c:/11.txt");
dh.writeTo(fos);
fos.flush();
} catch (FileNotFoundException fe) {
fe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();

} catch (Exception e) {
e.printStackTrace();
}
}

}



그 후 클라이언트에서 붙을려고 하였다만...
Eclipse 에서의 자동 생성 코드로는 잘 되질 않았다-_-;;

deploy.wsdd

<?xml version="1.0" encoding="UTF-8"?>

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<!-- Services from fileDownloaderService WSDL service -->

<service name="fileDownloader" provider="java:RPC" style="wrapped" use="literal">
<parameter name="wsdlTargetNamespace" value="http://download.file.pointi.com" />
<parameter name="wsdlServiceElement" value="fileDownloaderService" />
<parameter name="schemaQualified" value="http://download.file.pointi.com" />
<parameter name="wsdlServicePort" value="fileDownloader" />
<parameter name="className" value="com.pointi.file.download.fileDownloader" />
<parameter name="wsdlPortType" value="fileDownloader" />
<parameter name="typeMappingVersion" value="1.2" />

<operation xmlns:operNS="http://download.file.pointi.com"
xmlns:retNS="http://download.file.pointi.com" xmlns:rtns="http://xml.apache.org/xml-soap"
name="getFile" qname="operNS:getFile" returnQName="retNS:getFileReturn"
returnType="rtns:DataHandler" soapAction="">
</operation>
<operation xmlns:operNS="http://download.file.pointi.com"
name="setFile" qname="operNS:setFile" soapAction="">
<parameter xmlns:pns="http://download.file.pointi.com"
xmlns:tns="http://xml.apache.org/xml-soap" qname="pns:dh" type="tns:DataHandler" />
</operation>
<parameter name="allowedMethods" value="getFile setFile" />

<typeMapping
deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"
languageSpecificType="java:javax.activation.DataHandler" qname="DataHandler"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />


</service>
</deployment>

에서처럼 typeMapping 을 추가하였으며
lib 는 activation.jar 와mail.jar 를 추가하여 활용하였다.

그리고 결국 클라이언트에서는

public static void main(String[] args) throws Exception {
FileOutputStream fos;
FileDownloader down = new FileDownloaderServiceLocator()
.getfileDownloader();
DataHandler dh = down.getFile();
if (dh == null)
System.out.println("attachement is null");
else {
System.out.println("Client got file");

}

try {

fos = new FileOutputStream("c:/file.txt");
dh.writeTo(fos);
fos.flush();
} catch (FileNotFoundException fe) {
fe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();

} catch (Exception e) {
e.printStackTrace();
}

File file = new File("c:/file.txt");

if (!file.exists()) {
System.out.println("file not found!");
System.exit(0);
}

FileDataSource filDataSource = new FileDataSource(file);

DataHandler fdh = new DataHandler(filDataSource);
down.setFile(fdh);

}



이런 간단한 방법으로 테스트 하였다 ㄱ-;

...보면 알겠지만 서버로부터 getFile()을 요청하여 DataHandler 를 받아서 file.txt 로 저장하고 이를 다시 읽여들여 서버의 setFile(DataHandler ) 로서 파일에 다시 전송후 서버에서는 11.txt로 파일을 저장하였다 - _-;

뭔가 간단무쌍한거처럼 보이지만...
..
..
fileDownloader.wsdl 에서

<element name="getFileReturn" type="apachesoap:DataHandler"/>

<element name="dh" type="apachesoap:DataHandler"/>

위의 두 부분에서 오류가 발생한다....
근데.....
왜 되는거지-_-;??
뭔가 심히 이상하다 ㄱ-;;
namespace 로 되어 있는 apachesoap 의 경우
xmlns:apachesoap="http://xml.apache.org/xml-soap"
위와 같으나....없다-_-; DTD는 어디에 숨어있는것인가..??

뭔가 이상하다;;
이유를 알게된다면....여기 내용을 업데이트 해야겠다..-_-;

'웹서비스' 카테고리의 다른 글

Flex - SOAP 호출  (0) 2010.07.07
웹 서비스 개발하기, Part 3: SOAP 상호운용성  (0) 2010.07.07
Tomcat을 이용하여 SOAP 설정  (0) 2010.07.07
SOAP을 이용하여 간단한 예제  (0) 2010.07.07
SOAP 메세지 암호화 하기  (0) 2010.07.07