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