- PR -

AXIS DIMEファイル送信

1
投稿者投稿内容
heero
会議室デビュー日: 2006/03/08
投稿数: 11
投稿日時: 2006-03-08 14:31
AXISにてDIMEによるファイル送信がうまくいかず困っています。

Tomcat5、AXIS1.1、JDK1.4.2_7ではうまくいくのですが、Tomcat5、AXIS1.3、JDK1.5.0_06ではうまくいきません。ファイルサイズが1Mを超えたら実行できないようです。
最新の環境にて使用したいのですが実行できるようにする解決策はありますでしょうか?
宜しくお願いいたします。

**********クライアント**********

public String go(String fileName) throws Exception
{
if(!fileName.equals(""))
{
Service service = null;
Call call = null;
service = new Service();
call = (Call)service.createCall();
call.setTargetEndpointAddress(new URL("http://localhost/axis/sendservice_jws.jws?wsdl"));
call.setOperationName(new QName("sendservice", "hello"));
call.addParameter("fileName", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("folder", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(XMLType.XSD_STRING);
call.setProperty(all.ATTACHMENT_ENCAPSULATION_FORMAT,call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);
AttachmentPart ap = new AttachmentPart(new DataHandler(new FileDataSource(fileName)));
ap.setContentType("image");
call.addAttachmentPart(ap);
String ret = (String)call.invoke(new String[] {
fileName
});
return ret;
}
else
{
return "NULL";
}
}

**********サーバー(jwsファイルによるデプロイ)**********

public class sendservice_jws {

public static String folderPass = "";

public String hello(String fileName)
{
String msg = "";
String extension = ".jpg";

folderPass = "C:/Files_xml/";

File dirsin = new File(folderPass);
dirsin.mkdirs();

MessageContext ctx = MessageContext.getCurrentContext();
Message message = ctx.getRequestMessage();
AttachmentPart part = (AttachmentPart)message.getAttachments().next();
String filename = fileName.substring(fileName.lastIndexOf("/") + 1);
FileOutputStream fs = null;
if(filename.indexOf(extension) !=-1)
{
try
{
fs = new FileOutputStream(folderPass + filename);
part.getDataHandler().writeTo(fs);
fs.close();
msg = "OK";
return msg;
}
catch (Exception e)
{
msg = "WriteError";
e.printStackTrace();
return msg;
}
}
else
{
msg = "ExtensionError"+extension;
return msg;
}
}
}

**********TOMCAT log出力**********

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.io.IOException: 物理ストリームの最後が12バイト予想を超えたときに検出しました / [en]-(End of physical stream detected when 12 more bytes expected.)
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.io.IOException: 物理ストリームの最後が12バイト予想を超えたときに検出しました / [en]-(End of physical stream detected when 12 more bytes expected.)
at org.apache.axis.attachments.DimeDelimitedInputStream._read(DimeDelimitedInputStream.java:273)
at org.apache.axis.attachments.DimeDelimitedInputStream.read(DimeDelimitedInputStream.java:201)
at org.apache.axis.attachments.DimeDelimitedInputStream.read(DimeDelimitedInputStream.java:445)
at org.apache.axis.attachments.ManagedMemoryDataSource.<init>(ManagedMemoryDataSource.java:146)
at org.apache.axis.attachments.MultiPartDimeInputStream.readTillFound(MultiPartDimeInputStream.java:163)
at org.apache.axis.attachments.MultiPartDimeInputStream.readAll(MultiPartDimeInputStream.java:100)
at org.apache.axis.attachments.MultiPartDimeInputStream.getAttachments(MultiPartDimeInputStream.java:108)
at org.apache.axis.attachments.AttachmentsImpl.mergeinAttachments(AttachmentsImpl.java:171)
at org.apache.axis.attachments.AttachmentsImpl.getAttachmentCount(AttachmentsImpl.java:550)
at org.apache.axis.Message.getAttachments(Message.java:689)
at sendservice_jws.hello(sendservice_jws.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)

{http://xml.apache.org/axis/}hostname:ws0002


[ メッセージ編集済み 編集者: heero 編集日時 2006-03-08 15:38 ]
kan
ベテラン
会議室デビュー日: 2002/11/28
投稿数: 55
投稿日時: 2006-03-10 01:35
これでどうでしょう?

http://wiki.apache.org/ws/FrontPage/Axis/AttachmentProblems
heero
会議室デビュー日: 2006/03/08
投稿数: 11
投稿日時: 2006-03-10 17:53
返答ありがとうございます。
transportハンドラーにcommons-http-clientを使えばいいということですね。

指示通り環境を構築しましたところ、問題なくプログラム実行に成功しました。

とても助かりました。どうもありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)