<div dir="ltr"><div><div><div><div><div><div><div><div>Hi,<br><br></div>I'm trying to set up a custom storage module which communicates with a REST interface using LWP. I can store objects OK, and retrieve them directly (i.e. not through eprints). But when I try to retrieve an object through the EPrints interface I get the following in the log:<br>
<br>------------------------------------------------------------------<br>---------------- EPrints System Error ----------------------------<br>------------------------------------------------------------------<br>Error in file retrieval: failed to get file contents<br>
------------------------------------------------------------------<br> at /usr/share/eprints3/perl_lib/EPrints/Apache/Storage.pm line 261<br> EPrints::Apache::Storage::handler('Apache2::RequestRec=SCALAR(0x7f9a1fb053c0)') called at -e line 0<br>
eval {...} called at -e line 0<br>[Tue Feb 05 12:35:20 2013] [error] [client 138.38.192.151] EPrints::abort()\n, referer: <a href="https://float.bath.ac.uk/cgi/users/home?screen=EPrint::Edit&eprintid=1&stage=files">https://float.bath.ac.uk/cgi/users/home?screen=EPrint::Edit&eprintid=1&stage=files</a><br>
<br></div>The retrieve sub in the module looks like this:<br><br>sub retrieve<br>{<br> my( $self, $fileobj, $sourceid, $offset, $n, $f ) = @_;<br><br> my $repository = $self->{session}->get_repository;<br> $repository->log( "Attempting to set up user agent" ) if ($self->{debug}); # for testing<br>
if (create_ua( $self, $fileobj))<br> {<br> $repository->log( "Attempting to access HCP " . $self->{_url}->{$fileobj} ) if ($self->{debug}); # for testing<br> my $ua = $self->{_ua}->{$fileobj};<br>
my $request = new HTTP::Request('GET',$self->{_url}->{$fileobj}); <br> my $response = $ua->request( $request,$f ); # feed the response to the callback function<br> $repository->log( "Have response" ) if ($self->{debug}); # for testing<br>
if( $response->is_error )<br> {<br> $repository->log( $response->as_string );<br> }<br> return $response->is_success;<br> }<br> else<br> {<br> $repository->log("Could not define LWP user agent: aborting file save\n");<br>
return 0;<br> }<br>}<br><br></div>The log doesn't seem to be receiving the debug info, either (which works fine in the open_write, write, and close_write subs). create_ua sets up the LWP object with the cookies needed for authentication, and saves it as $self->{_ua}->{$fileobj} - again, this works perfectly in the write routines. According to the LWP docs, <br>
<br>$ua->request( $request,$f )<br><br></div>should feed back the content from the response to the callback function ("this function will be called for each chunk of the response content as it is received from the server" - <a href="http://search.cpan.org/~gaas/libwww-perl-6.04/lib/LWP/UserAgent.pm">http://search.cpan.org/~gaas/libwww-perl-6.04/lib/LWP/UserAgent.pm</a>).<br>
<br></div>I've based the list of arguments to the sub on those in Local.pm - is is much of the rest of the EPrints interacting part of the code. This list is different from both the list at <a href="http://wiki.eprints.org/w/API:EPrints/Storage">http://wiki.eprints.org/w/API:EPrints/Storage</a> ($self, $fileobj, $offset, $n, CALLBACK ) and <a href="http://trac.eprints.org/eprints/browser/trunk/system/perl_lib/EPrints/Plugin/Storage/AmazonS3.pm?rev=4327">http://trac.eprints.org/eprints/browser/trunk/system/perl_lib/EPrints/Plugin/Storage/AmazonS3.pm?rev=4327</a> (the Amazon S3 module) ($self, $fileobj, $uri, $f) - could you possibly indicate which list is correct, if this isn't?<br>
<br></div>Any suggestions would be very welcome!<br><br></div>Thanks,<br></div>Simon<br></div>