axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ryan Bell <rb...@providerlink.com>
Subject Re: attachments question
Date Tue, 05 Apr 2005 19:09:21 GMT
Brian, one option you can try is to write your own DataSource that works
with byte arrays and pass that into your DataHandler like so using the
BufferedDataSource class below:

new DataHandler(new BufferedDataSource(data, name, mimetype));



public class BufferedDataSource implements DataSource {


    private byte[] _data;
    private String _name;
    private String _type;


    public BufferedDataSource(byte[] data, String name, String type) {

        _data = data;
        _name = name;
        _type = type;
    }

    public String getContentType() {

        return _type;

    }

    public InputStream getInputStream() throws IOException {

        return new ByteArrayInputStream(_data);

    }

    public String getName() {

        return _name;

    }

    public OutputStream getOutputStream() throws IOException {

        OutputStream out = new ByteArrayOutputStream();
        out.write(_data);
        return out;

    }
}



On Tue, 2005-04-05 at 12:02 -0600, Brian Rook wrote:
> Okay, I wrote a temp file to the file system and it had the data I
> expected.  Then I used the DataHandler with the FileDataSource
> constructor and everything worked fine.
> 
> I would really rather not write to the file system, especially if I
> have multiple users accessing the system at the same time.  I looked
> at the DataHandler in the debugger, but it didn't have any mime type
> information.
> 
> Also, when I looked at the soap response this time, it had a bunch of
> binary data in the binary data field that wasn't there before.  The
> mime type for the binary data was:
> Content-Type: application/octet-stream
> Content-Transfer-Encoding: binary
> 
> Is there a way to create the DataHandler the way I originally intended
> (w/o FileDataSource)?
> 
> brian
> 
> On Apr 5, 2005 11:39 AM, THOMAS, JAI [AG-Contractor/1000]
> <jai.thomas@monsanto.com> wrote:
> > Well, looks like client doesn't know how to handle application/octet-stream.
> > You may want to try couple of things
> > - Try with application/zip
> > - Save to a file and use FileDataSource just for testing. If can fail if you have
a serializer/config issue.
> > Assume you are using Axis on both ends.
> > 
> > Jai
> > 
> > -----Original Message-----
> > From: Brian Rook [mailto:brian.rook@gmail.com]
> > Sent: Tuesday, April 05, 2005 12:31 PM
> > To: axis-user@ws.apache.org
> > Subject: Re: attachments question
> > 
> > damn, forgot to include the console too...here's the exception I get
> > on the console.  This says that the exception is on the server side.
> > 
> > 2005-04-05 11:28:16,203 ERROR [MimeUtils] java.io.IOException:
> > javax.activation.UnsupportedDataTypeException: no object DCH for MIME
> > type application/octet-stream
> >         at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:851)
> >         at javax.activation.DataHandler.writeTo(DataHandler.java:305)
> >         at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1147)
> >         at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:668)
> >         at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:232)
> >         at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:67)
> >         at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:849)
> >         at javax.activation.DataHandler.writeTo(DataHandler.java:305)
> >         at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1147)
> >         at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1600)
> >         at org.apache.axis.attachments.MimeUtils.writeToMultiPartStream(MimeUtils.java:202)
> >         at org.apache.axis.attachments.AttachmentsImpl.writeContentToStream(AttachmentsImpl.java:461)
> >         at org.apache.axis.Message.writeTo(Message.java:529)
> >         at org.apache.axis.transport.http.AxisServlet.sendResponse(AxisServlet.java:822)
> > 
> > On Apr 5, 2005 11:24 AM, Brian Rook <brian.rook@gmail.com> wrote:
> > > BTW, this is what came through on tcpmon.  It looks like the binary
> > > data was sent, and the exception is on the client side.
> > >
> > > HTTP/1.1 200 OK
> > >
> > > X-Powered-By: Servlet 2.4; Tomcat-5.0.28/JBoss-3.2.6 (build:
> > > CVSTag=JBoss_3_2_6 date=200410140106)
> > >
> > > Content-Type: multipart/related; type="text/xml";
> > > start="<240740715F1EED4240F4AD018D2835D6>";
> > >         boundary="----=_Part_3_11509108.1112721764250"Date: Tue, 05 Apr 2005
> > > 17:22:44 GMTServer: Apache-Coyote/1.1Connection:
> > > close------=_Part_3_11509108.1112721764250Content-Type: text/xml;
> > > charset=UTF-8Content-Transfer-Encoding: binaryContent-Id:
> > >    <240740715F1EED4240F4AD018D2835D6>
> > >       <soapenv:Envelope
> > > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> > > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> > >          <soapenv:Body>
> > >             <getPendingOrdersReturn xmlns="urn:EIWOWS">
> > >                <ns1:confirmationCode
> > > xmlns:ns1="http://websvc.eiwo.childsupport.colorado.gov">-200504051758437</ns1:confirmationCode>
> > >                <ns2:pendingZip
> > > href="cid:CFF956D504D89245943967B50CB04C4C"
> > > xmlns:ns2="http://websvc.eiwo.childsupport.colorado.gov"/>
> > >             </getPendingOrdersReturn>
> > >          </soapenv:Body>
> > >       </soapenv:Envelope>
> > >
> > > ------=_Part_3_11509108.1112721764250
> > >
> > > Content-Type: application/octet-stream
> > >
> > > Content-Transfer-Encoding: binary
> > >
> > > Content-Id:
> > >       <CFF956D504D89245943967B50CB04C4C>
> > >
> > >
> > > On Apr 5, 2005 11:19 AM, Brian Rook <brian.rook@gmail.com> wrote:
> > > > okay, tried that.  I get a different message now:
> > > >
> > > > java.lang.RuntimeException: javax.mail.MessagingException: Error in
> > > > input stream;
> > > >   nested exception is:
> > > >         java.io.IOException: End of stream encountered before final boundary
marker.
> > > >
> > > > This method works when I call it from a servlet, so I'm pretty sure
> > > > that the byte[] contains all the data it should have.
> > > >
> > > > On Apr 5, 2005 10:52 AM, THOMAS, JAI [AG-Contractor/1000]
> > > > <jai.thomas@monsanto.com> wrote:
> > > > > Try mimetype='application/octet-stream'.
> > > > >
> > > > > Jai
> > > > >
> > > > > -----Original Message-----
> > > > > From: Brian Rook [mailto:brian.rook@gmail.com]
> > > > > Sent: Tuesday, April 05, 2005 11:38 AM
> > > > > To: axis-user@ws.apache.org
> > > > > Subject: Re: attachments question
> > > > >
> > > > > I'm actually creating the zip file in memory and passing a reference
> > > > > to the byte[] created.  My service is based on an ejb method that
> > > > > looks like this:
> > > > >
> > > > > public byte[] getZipOutput(WageWithholdingTO[] wwArray)
> > > > >
> > > > > I would prefer not to write the file to the file system and then
read
> > > > > it from there just to create the datahandler.  Also I need to provide
> > > > > both the string (confirmationCode) and the datahandler in the soap
> > > > > response.
> > > > >
> > > > > How do you mean 'make sure there is a typemapping registered for
> > > > > datahandler'?  When you create a datahandler you have to specify
a
> > > > > typemapping ("multipart/*"), right?  Is there something else I'm
> > > > > missing?
> > > > >
> > > > > On Apr 5, 2005 10:24 AM, THOMAS, JAI [AG-Contractor/1000]
> > > > > <jai.thomas@monsanto.com> wrote:
> > > > > > If you are attaching an already created zip file, create data
handler from FileDataSource.
> > > > > > That way, you let datahandler to set the appropriate mime type.
> > > > > >   dhSource = new DataHandler(new FileDataSource(docFile));
> > > > > >
> > > > > > Also make sure there is typemapping registered for DataHandler.
> > > > > >
> > > > > > Jai
> > > > > >
> > > > > >
> > > > > > -----Original Message-----
> > > > > > From: Brian Rook [mailto:brian.rook@gmail.com]
> > > > > > Sent: Tuesday, April 05, 2005 11:12 AM
> > > > > > To: axis-user@ws.apache.org
> > > > > > Subject: attachments question
> > > > > >
> > > > > > I'm trying to send back both a string and a zip file from a
webservice
> > > > > > built using axis1_2RC1. here's the entry in the wsdl:
> > > > > >
> > > > > >     code:
> > > > > >
> > > > > >   <schema xmlns="http://www.w3.org/2001/XMLSchema"
> > > > > > targetNamespace="http://websvc.eiwo.childsupport.colorado.gov"
> > > > > > elementFormDefault="qualified">
> > > > > >    <import namespace="http://xml.apache.org/xml-soap"/>
> > > > > >    <complexType name="PendingCaseTO">
> > > > > >     <sequence>
> > > > > >      <element name="confirmationCode" nillable="true" type="xsd:string"/>
> > > > > >      <element name="pendingZip" nillable="true" type="apachesoap:DataHandler"/>
> > > > > >     </sequence>
> > > > > >    </complexType>
> > > > > >   </schema>
> > > > > >
> > > > > > I can build and deploy and call the service but it fails with
this message:
> > > > > >
> > > > > >     code:
> > > > > >
> > > > > > AxisFault
> > > > > >  faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
> > > > > >  faultSubcode:
> > > > > >  faultString: java.lang.ClassCastException
> > > > > >  faultActor:
> > > > > >  faultNode:
> > > > > >  faultDetail:
> > > > > >         {http://xml.apache.org/axis/}stackTrace:java.lang.ClassCastException
> > > > > >         at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1056)
> > > > > >         at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:824)
> > > > > >         at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:215)
> > > > > >         at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1056)
> > > > > >         at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:1914)
> > > > > >         at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:1895)
> > > > > >         at org.apache.axis.attachments.MimeUtils.writeToMultiPartStream(MimeUtils.java:201)
> > > > > >
> > > > > > Here's the line that creates the datahandler:
> > > > > >
> > > > > > DataHandler dh = new DataHandler(zipBytes,"multipart/*");
> > > > > >
> > > > > > zipBytes is a byte[] and I wasn't sure what to use for the mime
type
> > > > > > so I used multipart/*, but that doesn't seem to work.
> > > > > >
> > > > > > Are there any suggestions on how to send the attachment correctly?
> > > > > >
> > > > > > Thank you
> > > > > >
> > > > >
> > > >
> > >
> >


Mime
View raw message