간단하게 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는 어디에 숨어있는것인가..??
뭔가 이상하다;;
이유를 알게된다면....여기 내용을 업데이트 해야겠다..-_-;