Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 407
  • Last Modified:

Saving WebDav resource into ByteArray or InputStream


Hello all

this the process to save the WebDAV resource to the file
  webDavResourceAttachmentFile.getMethod(new File(strAttachmentFile));


But I wanted to have this in other way.

It should save to either ByteArray or InputStream

How can I do this??

I um using Apache HttpClient and Slide API for this

thanks
Sudhakar
0
sudhakar_koundinya
Asked:
sudhakar_koundinya
  • 13
  • 11
  • 3
2 Solutions
 
CEHJCommented:
Read it into a ByteArrayInputStream
0
 
objectsCommented:
what class is webDavResourceAttachmentFile

> It should save to either ByteArray or InputStream

that'll be an output stream wouldn't it :)
0
 
sudhakar_koundinyaAuthor Commented:
yes, But how??
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
sudhakar_koundinyaAuthor Commented:
webDavResourceAttachmentFile is of type org.apache.webdav.lib.WebdavResource
0
 
CEHJCommented:
What is the f-q name of the thing you're reading from?
0
 
CEHJCommented:
>>that'll be an output stream wouldn't it :)

Yes ;-)

while ((bytesRead = in.read(buffer)) > -1) {
    baos.write(buffer, 0, bytesRead);
}
byte[] resourceAsBytes = baos.toByteArray();
// close everything
0
 
sudhakar_koundinyaAuthor Commented:
>> f-q name??

I didn't get that

basically above code snippet downloads the WebDavResoure from MSExchange Server and saves it into file
0
 
sudhakar_koundinyaAuthor Commented:
>>Yes ;-)

that is not OutputStream object my friend. That is WebDavResource
0
 
CEHJCommented:
(f-q == fully qualified)

Can't find JavaDoc for that f-q name
0
 
CEHJCommented:
The code i possted above should work fine. 'in' is simply an InputStream opened on the resource
0
 
sudhakar_koundinyaAuthor Commented:
this is online doc for WebDavClient API

http://jakarta.apache.org/slide/clientjavadoc/index.html
0
 
sudhakar_koundinyaAuthor Commented:
>> The code i possted above should work fine. 'in' is simply an InputStream opened on the resource

Until and unless API supports that
0
 
CEHJCommented:
byte[] resourceAsBytes = wdr.getMethodDataAsString().getBytes();
0
 
sudhakar_koundinyaAuthor Commented:
0
 
CEHJCommented:
...and if the resource is not character data:

InputStream in = getMethodData();
// etc as above
0
 
sudhakar_koundinyaAuthor Commented:
wdr.getMethodDataAsString().getBytes(); will not work for binary files :(
0
 
CEHJCommented:
>>but always returning 0 bytes

Then the path to the data may be wrong
0
 
sudhakar_koundinyaAuthor Commented:
>>Then the path to the data may be wrong

No if that is the case my first snippet also should not work. But it is working
0
 
CEHJCommented:
Are you calling your code first? - perhaps you need to
0
 
objectsCommented:
Have a look at the source code, it could give you some clues as to what its doing.
0
 
sudhakar_koundinyaAuthor Commented:
>> Are you calling your code first? - perhaps you need to

I didn't get that. But I am doing everything in sequential order only

I just found one more code. I will check that and let u know

            org.apache.commons.httpclient.methods.UrlGetMethod getMethod= new                          org.apache.commons.httpclient.methods.UrlGetMethod(uri);
            int status=client.executeMethod(getMethod);
            System.out.println(status);
            byte is[]=getMethod.getResponseBody();
0
 
sudhakar_koundinyaAuthor Commented:
This is my modified method

  protected void saveAttachment(String folder, String filename,
                                String strAttachmentName,
                                String mailbox) throws
      MSExchangeServerException {

    try {

      strAttachmentName = URLDecoder.decode(strAttachmentName);
      org.apache.commons.httpclient.HttpURL urlEML = (org.apache.commons.
          httpclient.HttpURL) getURL(path + "/" +
                                     mailbox + "/" + folder + "/" + filename +
                                     "/" + strAttachmentName +
                                     "/");

      if (urlEML == null) {
        return;
      }

      /*org.prithvi.docparser.microsoft.msexchange.apache.OwaWebdavResource
          webDavResourceAttachmentFile =
          getWebResource(urlEML);

      if (webDavResourceAttachmentFile == null) {
        return;
      }*/

        String uri= path + "/" + mailbox + "/" + folder + "/" + replaceSpecial(filename, "\":?*<>\\| ")+"/" + replaceSpecial( strAttachmentName , "\":?*<>\\| ");
        //String uri= path + "/" + mailbox + "/" + folder + "/" + filename +"/" + strAttachmentName ;
        System.out.println(uri);

        

            org.apache.commons.httpclient.methods.UrlGetMethod getMethod= new org.apache.commons.httpclient.methods.UrlGetMethod(uri);
            int status=client.executeMethod(getMethod);
            System.out.println(status);
            //byte is[]=getMethod.getResponseBody();

      //get the attachment
      String strAttachmentFile = targetPath + "/" + mailbox + "/" + folder +
          "/" + filename.replaceAll(":", "%3A") + "_Dir/" + strAttachmentName;

      if (targetPath != null) {
        //webDavResourceAttachmentFile.getMethod(new File(strAttachmentFile));
            //InputStream is= webDavResourceAttachmentFile.getMethodData();
            //String str=webDavResourceAttachmentFile.getMethodDataAsString();
            //System.out.println(str);
      }
        /*if (targetPath != null)
        {
            FileOutputStream mailStream = new FileOutputStream(strAttachmentFile);
            mailStream.write(is);
            mailStream.close();
            mailStream = null;
        }*/
       
      

    }
    catch (Exception ex) {

      throw new MSExchangeServerException(
          "Unknown Exception raised while saving the attachment", ex);
    }
  }
0
 
sudhakar_koundinyaAuthor Commented:
I will let u know if that works  :-)
0
 
CEHJCommented:
0
 
objectsCommented:
yes I was looking at that earlier, but thought you needed to use the instance you already had.
you can also trry looking at the getResponseBodyAsStream() method
0
 
sudhakar_koundinyaAuthor Commented:
Although, I have solved my problem for closing the question I splitted the points

Thanks
Sudhakar
0
 
CEHJCommented:
:-)
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 13
  • 11
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now