soap에서 DataHandler를 이용한 파일 전송문제!!
글쓴이: cho6005 / 작성시간: 수, 2010/09/15 - 2:43오후
안녕하세요. soap의 attachment를 이용한 파일 전송을 구현중인데요
FileDataSource fileDataSource = new FileDataSource(file);
DataHandler dhSource = new DataHandler(fileDataSource);
//매개변수를 넣어 메소드 호출
Object ret = call.invoke(new Object[] {dhSource});
위와 같은 방식으로 웹 서비스에 올려진 함수를 호출하면서
DataHandler객체를 전달하려 합니다~
다른 int 변수를 인자로 전달하거나 하면 잘 호출되는데
DataHandler객체만 인자로 전달하려면..
[ERROR] Exception occurred while trying to invoke service method setFile
org.apache.axis2.AxisFault: Invalid reference :cid:3FADBA0B6A23491DF324C50DC39617DC
....
에러가 뜨네요..
왜 그럴까요 ㅠㅠ
소스 첨부해서 질문드립니다~
고수님들 부탁드려요!
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import java.io.FileOutputStream;
import java.io.File;
public class AttachmentTest {
FileOutputStream fos;
public void test(int a){
System.out.println(a + "test!!!");
}
public void test2(DataHandler dhSource){
System.out.println("test2!");
}
public void setFile(DataHandler dh){
if(dh == null)
System.out.println("attachment is null");
else
System.out.println("Server got File");
try{
fos = new FileOutputStream("FromClientFile.gif");
dh.writeTo(fos);
fos.flush();
}
catch( java.io.FileNotFoundException e)
{
e.printStackTrace();
}
catch( java.io.IOException e)
{
e.printStackTrace();
}
}
}import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.*;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import java.io.FileOutputStream;
public class SetFileTestClient {
public SetFileTestClient() {
try {
//매개변수 있는 경우 파일을 찾아 서버로 전송한다.
if(true) {
String argFile = "a.gif";
java.io.File file = new java.io.File(argFile);
if(!file.exists()) {
System.err.println("error: file not found~!!!");
System.exit(8);
}
//서버로 파일을 전송한다.
sendFile(file);
}
}catch(javax.xml.soap.SOAPException se) {
se.printStackTrace();
}
}
//서버로 파일을 전송한다.
@SuppressWarnings({ "unused", "rawtypes" })
private void sendFile(java.io.File file) throws javax.xml.soap.SOAPException {
try {
String endpoint = "http://localhost:8080/web.webservice6/services/AttachmentTest";
Service service = new Service();
//call 객체 생성
Call call = (Call)service.createCall();
//서비스를 제공하는 서버의 위치 지정
call.setTargetEndpointAddress(new java.net.URL(endpoint));
//Serializer, deSerializer 등록
java.lang.Class jafsf = JAFDataHandlerSerializerFactory.class;
java.lang.Class jafdf = JAFDataHandlerDeserializerFactory.class;
java.lang.Class cls = DataHandler.class;
javax.xml.namespace.QName qName = new javax.xml.namespace.QName("http://ws.apache.org/axis2", "DataHandler");
call.registerTypeMapping(cls, qName, jafsf, jafdf, false);
//serializer, deSerializer 등록
//호출할 메소드 등록
call.setOperationName(new QName("http://ws.apache.org/axis2", "setFile"));
// call.setOperationName(new QName("http://ws.apache.org/axis2", "test"));
int a = 3;
//파일 객체를 FileDataSource에 담는다.
FileDataSource fileDataSource = new FileDataSource(file);
//DataHandler에 FileDataSource를 담아 전달한다.
DataHandler dhSource = new DataHandler(fileDataSource);
//매개변수를 넣어 메소드 호출
Object ret = call.invoke(new Object[] {dhSource});
System.out.println("File send~!");
}catch(Exception e) {
System.err.println(e.toString());
}
}
public static void main(String[] args) {
System.out.println("ddddd");
new SetFileTestClient();
}
}[ERROR] Exception occurred while trying to invoke service method setFile org.apache.axis2.AxisFault: Invalid reference :cid:3FADBA0B6A23491DF324C50DC39617DC at org.apache.axis2.databinding.utils.MultirefHelper.processRef(MultirefHelper.java:115) at org.apache.axis2.databinding.utils.BeanUtil.processObject(BeanUtil.java:702) at org.apache.axis2.databinding.utils.BeanUtil.ProcessElement(BeanUtil.java:670) at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:602) at org.apache.axis2.rpc.receivers.RPCUtil.processRequest(RPCUtil.java:153) at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:188) at org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver.invokeBusinessLogic(RPCInOnlyMessageReceiver.java:63) at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:100) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176) at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275) at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:131) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) at java.lang.Thread.run(Unknown Source) [ERROR] org.apache.axis2.AxisFault: Exception occurred while trying to invoke service method setFile
File attachments:
| 첨부 | 파일 크기 |
|---|---|
| 2.34 KB | |
| 766바이트 |
Forums:


댓글 달기