You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Thilina Gunarathne <cs...@gmail.com> on 2007/09/05 02:57:08 UTC

Re: [AXIS2] : Help required : getting a zip file using AXIS2 + AXIOM

Hi,
AFAIKS the problem lies in the code where you are trying to create the
byte[]. Also make sure that the zip file is created correctly in he
file system of your server.

I would recommend you to use the FileDataSource directly rather than
using a ByteArrayDataSource. With that you'll be able to create the
data source straight out from the file without creating byte[].

Also if you are planning to transfer large data, make sure to enable
MTOM in the server side.

~Thilina


On 9/4/07, Sushil Dodake <su...@gmail.com> wrote:
>
>
> ---------- Forwarded message ----------
> From: Sushil Dodake <su...@gmail.com>
> Date: Sep 4, 2007 6:47 PM
> Subject: Re: Help required : getting a zip file using AXIS2 + AXIOM
> To: Thilina Gunarathne <cs...@gmail.com>
>
>
> Hi,
> Thanks you very much for a very prompt reply..
> I have also sent this mail to the group you told me.
> As i need to fix this issue ASAP i am also sending this presonally.
> The code snippet on the server side is as below.
>
> Breife description -->
> 1. Take the JPEG files data in byte array format from the Documentum server
> and store it in a List
> 2. Generate a Zip file and store it on the HDD
> 3. get the zip file as input stream, Convert it in to binary array
> 4. send it using a data handler.
>
>
> private OMElement createZipData(List ObjectList) throws ContentFault{
>
>
>
> ZipOutputStream ZipOutStream;
>
> OMFactory factory = OMAbstractFactory.getOMFactory();
>
> OMNamespace payloadNs= factory.createOMNamespace(XML_NAMESPACE,
> XML_NAMESPACE_PREFIX );
>
> OMElement zipContent = factory.createOMElement("ZipContent", payloadNs);
>
>
>
> try {
>
> String zipPath = this.zipFilePath;
>
> Date currentDate = new Date();
>
> long time = currentDate.getTime();
>
> //Create a local Zip File to add all the Images (binary data)
>
> zipPath = zipPath + "\\file"+ String.valueOf(time)+ ".zip" ;
>
> System.out.println("Zip Path " + zipPath);
>
>
>
> ZipOutStream = new ZipOutputStream(new FileOutputStream(zipPath));
>
> int totalObjects = ObjectList.size();
>
> for(int i = 0; i < totalObjects; i++){
>
> DCTMObject nextObject = (DCTMObject)ObjectList.get(i);
>
> List contentList = nextObject.getContentList();
>
>
>
> if(contentList != null){
>
> int contentListSize = contentList.size();
>
>
>
> for(int j = 0; j < contentListSize; j++){
>
> //Get the binary content of the image data
>
> ObjectContent content = (ObjectContent)contentList.get(j);
>
>
>
> if(content != null){
>
> byte []byteContent = content.getContent();
>
> ZipEntry fileName = new ZipEntry(content.getName());
>
> ZipOutStream.putNextEntry(fileName);
>
> byte []tempArray = new byte [4096];
>
> int flag;
>
> BufferedInputStream bi = new BufferedInputStream(new
> ByteArrayInputStream(byteContent));
>
>
>
> while ((flag = bi.read(tempArray, 0, 4096)) != -1) {
>
> ZipOutStream.write(tempArray, 0, flag);
>
> }
>
>
>
> ZipOutStream.closeEntry();
>
> }
>
> }
>
> }
>
> }
>
> //Local Zip File created
>
> ZipOutStream.close();
>
>
>
> //Read the zip Loacl zip file and convert it in the byte array
>
> ZipInputStream zipInStream = new ZipInputStream(new BufferedInputStream( new
> FileInputStream(zipPath)));
>
> byte [] zipByte = new byte [zipInStream.available()];
>
> System.out.println("Getting Zipped Data Total Size =" +
> zipInStream.available ());
>
> zipInStream.read(zipByte, 0, zipInStream.available());
>
> ByteArrayDataSource byteData = new ByteArrayDataSource(zipByte);
>
>
>
> //Use a data handler to send the binary data (byte array)
>
> DataHandler handler = new DataHandler(byteData);
>
>
>
> OMText fileData = factory.createOMText(handler, true);
>
> zipContent.addChild(fileData);
>
> //objContent.addChild(fileContent);
>
>
>
> } catch (IOException e) {
>
> System.out.println("In the createZipData Catch");
>
> e.printStackTrace();
>
> throw new ContentFault("In the createZipData Catch" );
>
> }
>
> System.out.println("Response Zip Conmtent" + zipContent.toString ());
>
> return zipContent;
>
> }
>
>
>
>
>
> On 9/4/07, Thilina Gunarathne <csethil@gmail.com > wrote:
> > Hi,
> > >       <tns:ZipContent>AA==</tns:ZipContent>
> > >
> > What you have got above  is the base64 representation of the data you
> > have attached in your server side. There is a possibility that data is
> > not correctly attached in the server side.
> >
> > Are you using any data binding mechanisms. If so what... Also post me
> > the WSDL if it's possible..
> >
> > I also would like to see how you are attaching the data at the server
> side..
> >
> > Also you can post your Axis2 related questions to axis-user list
> > ( http://ws.apache.org/axis2/mail-lists.html ) with
> [Axis2] prefix in
> > the subject. In there you'll find more people to answer your questions
> > and more people will benefit from the answers you are getting.. FYI: I
> > frequently checks that list..
> >
> > thanks,
> > Thilina
> >
> > On 9/4/07, Sushil Dodake <sushil.dodake@gmail.com > wrote:
> > > Hi Thilina,
> > > I got your mail address from the link.
> > >
> http://archives.devshed.com/forums/apache-92/axis2-contentid-is-null-using-mtom-1880965.html
> > > i have a problem in sending a zip file using AXIS2 + AXIOM
> > > when i send  a zip file then @ the client side i get
> > >
> > >
> > > <tns:ZipedObjects
> > > xmlns:tns="http://content.dctm.service.toro.com ">
> > >
> > >       <tns:ZipContent>AA==</tns:ZipContent>
> > >
> > > </tns:ZipedObjects>
> > >
> > > but the actual zip file conteains 2 jpeg images...
> > >
> > > i have absolutely no idea as in how to retrieve the jpeg files from the
> > > received presentation of the zip file.
> > >
> > > i tried using the folowing snippet to retrieve the data
> > >
> > >
> > >
> > > OMElement zipFile = result.getFirstChildWithName(new QName("ZipContent"
> ));
> > >
> > > OMText zipData = (OMText)( result.getFirstElement()).getFirstOMChild();
> > >
> > > zipData.setOptimize(true);
> > >
> > > DataHandler dataHand =
> > > (DataHandler)zipData.getDataHandler();
> > >
> > > FileOutputStream dest = new
> FileOutputStream("c:\\sushilData.zip" );
> > >
> > > ZipOutputStream out = new ZipOutputStream(new
> BufferedOutputStream(dest));
> > >
> > > dataHand.writeTo(dest);
> > >
> > > dest.flush();
> > >
> > > dest.close();
> > >
> > > out.close();
> > >
> > >
> > >
> > > but it gices me error saying the zip file should have atleast on entry.
> > >
> > > Please guid me in this regard.
> > >
> > > My requirement is i need to get the JPEG files from a documentum server
> and
> > > then zip them in a zip file and send it over to the client.
> > >
> > > Regards,
> > >
> > > Sushil
> >
> >
> > --
> > Thilina Gunarathne  -  http://www.wso2.com - http://thilinag.blogspot.com
> >
>
>


-- 
Thilina Gunarathne  -  http://www.wso2.com - http://thilinag.blogspot.com

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org