Base64 (non-optimisable) and MTOM (optimisable) technologies are complimentary
http://ws.apache.org/axis2/1_1_1/mtom-guide.html
ONE possible workaround is to enable SWA
options.setProperty(Constants.Configuration.ENABLE_SWA, Constants.VALUE_TRUE);
have your client.addMessageContext(MessageContext) where the messageContext has
an added Base64 Attachment
MessageContext.addAttachment("Attachment",datahandler);
where the Datahandler is a wrapper on a Datasource
dataHandler =new DataHandler(fileDataSource);
and the datasource is a wrapper DataSource for your Base64 file
FileDataSource fileDataSource = new FileDataSource("whatever.jpg");
M-
----- Original Message -----
From: Raghu Upadhyayula
To: [email protected]
Sent: Wednesday, December 05, 2007 12:58 PM
Subject: [Axis2] Problem using MTOM with a JPEG file.
Hi,
I have a webservice which is used to upload images to the server.
I'm getting an exception if I am sending a JPEG file with MTOM enabled. It
works fine if MTOM is not enabled (Base64 encoded). It works fine if I send a
GIF file with or without MTOM enabled.
Here is the exception I'm getting. Is this a bug? (I'm using Axis2 1.3
Version).
17:30:43,469 ERROR [[AxisServlet]] Servlet.service() for servlet AxisServlet
threw exception
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:414)
at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:312)
at
org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at java.io.FilterInputStream.read(Unknown Source)
at java.io.PushbackInputStream.read(Unknown Source)
at
org.apache.axiom.attachments.BoundaryPushbackInputStream.readFromStream(BoundaryPushbackInputStream.java:102)
at
org.apache.axiom.attachments.BoundaryPushbackInputStream.readFromStream(BoundaryPushbackInputStream.java:122)
at
org.apache.axiom.attachments.BoundaryPushbackInputStream.read(BoundaryPushbackInputStream.java:172)
at
org.apache.axiom.attachments.MIMEBodyPartInputStream.read(MIMEBodyPartInputStream.java:87)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:75)
at javax.mail.internet.InternetHeaders.load(InternetHeaders.java:329)
at javax.mail.internet.InternetHeaders.<init>(InternetHeaders.java:301)
at javax.mail.internet.MimeBodyPart.<init>(MimeBodyPart.java:168)
at org.apache.axiom.attachments.PartOnMemory.<init>(PartOnMemory.java:34)
at org.apache.axiom.attachments.Attachments.getPart(Attachments.java:598)
at
org.apache.axiom.attachments.Attachments.getNextPartDataHandler(Attachments.java:462)
at
org.apache.axiom.attachments.Attachments.getContentIDSet(Attachments.java:427)
at
org.apache.axiom.attachments.Attachments.getAllContentIDs(Attachments.java:420)
at
org.apache.axis2.transport.TransportUtils.deleteAttachments(TransportUtils.java:481)
at
org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:189)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilterjava:96)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValvejava:230)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValvejava:175)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Unknown Source)
Thanks
Raghu