hi

Here is the function that fails

    /**
     * Upload the given file to Fedora's upload interface via HTTP POST.
     *
     * @return the temporary id which can then be passed to API-M
requests as a
     *         URL. It will look like uploaded://123
     */
    public String uploadFile(File file) throws IOException {
        PostMethod post = null;
        try {
            // prepare the post method
            post = new PostMethod(getUploadURL());
            post.setDoAuthentication(true);
            post.getParams().setParameter("Connection", "Keep-Alive");

            // chunked encoding is not required by the Fedora server,
            // but makes uploading very large files possible
            post.setContentChunked(true);

            // add the file part
            Part[] parts = {new FilePart("file", file)};
            post.setRequestEntity(new MultipartRequestEntity(parts, post
                    .getParams()));

            // execute and get the response
            int responseCode = getHttpClient().executeMethod(post);
            String body = null;
            try {
                body = post.getResponseBodyAsString();
            } catch (Exception e) {
                LOG.warn("Error reading response body", e);
            }
            if (body == null) {
                body = "[empty response body]";
            }
            body = body.trim();
            if (responseCode != HttpStatus.SC_CREATED) {
                throw new IOException("Upload failed: "
                        + HttpStatus.getStatusText(responseCode) + ": "
                        + replaceNewlines(body, " "));
            } else {
                return replaceNewlines(body, "");
            }
        } finally {
            if (post != null) {
                post.releaseConnection();
            }
        }
    }

So, from the error we know that 
HttpStatus.getStatusText(responseCode) gives "Bad Request"
and replaceNewlines(body, " ") gives "no data sent"


It seems that the Fedora instance does not accept the upload request for
some reason.



On Wed, 2009-07-01 at 18:26 +0200, WangFeng wrote:
> Hi,
> thank you for the mail. I thought too, either by reading my file or by
> calling the uploadFile() of FedoraClient causes this Problem.
> 
> 
> public ClientTest() throws Exception {
> ? ?? // TODO Auto-generated constructor stub
> ? ? String baseURL = "http://localhost:8080/fedora/";;
> ? ? fc = new FedoraClient(baseURL, "fedoraAdmin", "fedoraAdmin");
> ? ? APIA = fc.getAPIA();
> ? ? System.out.println("APIA Created!");
> ? ? APIM = fc.getAPIM();
> ? ? System.out.println("APIM Created");
> }
> 

This actually proves nothing. You can create the APIA/N objects even for
a invalid repository.

I usually test by doing APIA.describeRepository(), as this changes
nothing, should always work, and will fail if there is a credentials or
connection problem.



> 
> 
> public String addnewDatestream() throws IOException {
> ? ? String tempURI = fc.uploadFile(new File("getPDF.pdf"));
> 
> ? ? String ID = APIM.addDatastream("demo:SmileyPens", // PID
> ? ? "MYPDFDS", // Datastream ID
> ? ? new String[] { "FengDS", "PDFDS" }, // Alt IDs
> ? ? "My Datastream", // Label
> ? ? true, // Versionable
> ? ? "application/pdf", // MIME type
> ? ? null, // Format URI
> ? ? tempURI, // Datastream Location
> ? ? "M", // Control! Group
> ? ? "A", // State
> ? ? null, // ChecksumType
> ? ? null, // Checksum
> ? ? "added by feng wang"); // Log message
> 
> ? ? return ID;
> }
> 
> 
> 
> Exception in thread "main" java.io.IOException: Upload failed: Bad
> Request: No data sent.
> at fedora.client.FedoraClient.uploadFile(FedoraClient.java:195)
> 
> The file is saved under the TestProject Directory of the Java
> WorkSpace in Windows system(E:\Java Workspace\TestProject\getPDF.pdf)
> 
> ?
> 
> It's just A Test for writing the API-A/M FedoraClient. so i added the
> file into the demo from Fedora Server. But i am sure,that i can call
> ingest() and addDatastream(),which i have tested. 
> By the Way i haven't set any Configuration for the Log4J of
> FedoraClient.
> 
> Regards
> Feng
> 
> 
> 
> 
> 
> > Subject: Re: [Fedora-commons-users] Ingest Problem with Fedora 3.2
> SOAP API by Calling uploadFile
> > From: [email protected]
> > To: [email protected]
> > CC: fedora! [email protected]
> > Date: Wed, 1 Jul 2009 12: 12:52 +0200
> > 
> > Hi
> > 
> > Could you give us the code piece where you call the function? The
> > exception seems to indicate that there is a problem reading your
> file.
> > 
> > Regards
> > 
> > On Tue, 2009-06-30 at 20:51 +0200, WangFeng wrote:
> > > Hi everyone,
> > > i am writing a client by using the fedora client jar with SOAP
> API.
> > > So i tested all the Method from API-M. It works well by calling
> the
> > > Method like ingest or adddatastream.
> > > But i can't still use the uploadFile from fedoraclient or the
> > > Uploader.upload(java.io.File file). And still got the Exception
> with
> > > "No data send to the server". I can't understand, why this Method
> > > couldn't be used. I am sure all setting for the file or
> > > fileinputstream are fein and right. I must use the file from local
> and
> > > upload it to server at first. 
> > > Please help me to ! fix it!!
> > > Thanks
> > > Feng
> > > 
> > > 
> > > 
> > > 
> > > java.io.IOException: Upload failed: Bad Request: No data sent.
> > > ?at fedora.client.FedoraClient.uploadFile(FedoraClient.java:195)
> > > ?at fedora.client.Uploader.upload(Uploader.java:114)
> > > ?at fedora.client.Uploader.upload(Uploader.java:97)
> > > ?at FoXM! L.ClientTest.uploader(ClientTest.java:269)
> > > 
> > > 
> > > 
> > >
> ______________________________________________________________________
> > > 更多热辣资讯尽在新版MSN首页! 立刻访问!
> > 
> 
> 
> ______________________________________________________________________
> 立刻下载 MSN 保护盾,保障Messenger 安全稳定! 现在就下载!


------------------------------------------------------------------------------
_______________________________________________
Fedora-commons-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/fedora-commons-users

Reply via email to