Revision 5066
Added by ben leinfelder over 14 years ago
MetacatClient.java | ||
---|---|---|
24 | 24 |
|
25 | 25 |
package edu.ucsb.nceas.metacat.client; |
26 | 26 |
|
27 |
import java.io.BufferedInputStream; |
|
28 |
import java.io.BufferedOutputStream; |
|
29 |
import java.io.FileOutputStream; |
|
27 | 30 |
import java.io.InputStream; |
28 | 31 |
import java.io.InputStreamReader; |
29 |
import java.io.PushbackReader; |
|
30 | 32 |
import java.io.StringReader; |
31 | 33 |
import java.io.IOException; |
32 | 34 |
import java.io.StringWriter; |
... | ... | |
44 | 46 |
import edu.ucsb.nceas.utilities.XMLUtilities; |
45 | 47 |
import java.io.File; |
46 | 48 |
|
49 |
|
|
47 | 50 |
/** |
48 | 51 |
* This interface provides methods for initializing and logging in to a |
49 | 52 |
* Metacat server, and then querying, reading, transforming, inserting, |
... | ... | |
56 | 59 |
/** The session identifier for the session */ |
57 | 60 |
private String sessionId; |
58 | 61 |
|
62 |
public static void main(String[] args) { |
|
63 |
try { |
|
64 |
MetacatClient mc = (MetacatClient) MetacatFactory.createMetacatConnection("http://fred.msi.ucsb.edu:8080/knb/metacat"); |
|
65 |
//InputStream r = mc.read("zip.1.1"); |
|
66 |
InputStream r = mc.read("jlee.2808.2"); |
|
67 |
|
|
68 |
//FileOutputStream fos = new FileOutputStream("test.zip"); |
|
69 |
FileOutputStream fos = new FileOutputStream("jlee.xml"); |
|
70 |
BufferedOutputStream bfos = new BufferedOutputStream(fos); |
|
71 |
|
|
72 |
int c = r.read(); |
|
73 |
while(c != -1) |
|
74 |
{ |
|
75 |
bfos.write(c); |
|
76 |
c = r.read(); |
|
77 |
} |
|
78 |
bfos.flush(); |
|
79 |
bfos.close(); |
|
80 |
fos.flush(); |
|
81 |
fos.close(); |
|
82 |
} catch (Exception e) { |
|
83 |
e.printStackTrace(); |
|
84 |
} |
|
85 |
} |
|
86 |
|
|
59 | 87 |
/** |
60 | 88 |
* Constructor to create a new instance. Protected because instances |
61 | 89 |
* should only be created by the factory MetacatFactory. |
... | ... | |
193 | 221 |
return response; |
194 | 222 |
} |
195 | 223 |
|
196 |
/** |
|
224 |
|
|
225 |
|
|
226 |
/** |
|
197 | 227 |
* Read an XML document from the metacat server session, accessed by docid, |
198 | 228 |
* and returned as a Reader. |
199 | 229 |
* |
... | ... | |
205 | 235 |
* reached or does not respond |
206 | 236 |
* @throws MetacatException when the metacat server generates another error |
207 | 237 |
*/ |
208 |
public Reader read(String docid) throws InsufficientKarmaException,
|
|
238 |
public InputStream read(String docid) throws InsufficientKarmaException,
|
|
209 | 239 |
MetacatInaccessibleException, MetacatException, DocumentNotFoundException { |
210 |
PushbackReader pbr = null;
|
|
240 |
Reader r = null;
|
|
211 | 241 |
|
212 | 242 |
Properties prop = new Properties(); |
213 | 243 |
prop.put("action", "read"); |
... | ... | |
219 | 249 |
} catch (Exception e) { |
220 | 250 |
throw new MetacatInaccessibleException(e.getMessage()); |
221 | 251 |
} |
222 |
pbr = new PushbackReader(new InputStreamReader(response), 512); |
|
252 |
BufferedInputStream bis = new BufferedInputStream(response); |
|
253 |
r = new InputStreamReader(bis); |
|
223 | 254 |
try { |
255 |
bis.mark(512); |
|
224 | 256 |
char[] characters = new char[512]; |
225 |
int len = pbr.read(characters, 0, 512);
|
|
257 |
int len = r.read(characters, 0, 512); |
|
226 | 258 |
StringWriter sw = new StringWriter(); |
227 | 259 |
sw.write(characters, 0, len); |
228 | 260 |
String message = sw.toString(); |
229 | 261 |
sw.close(); |
230 |
pbr.unread(characters, 0, len);
|
|
262 |
bis.reset();
|
|
231 | 263 |
if (message.indexOf("<error>") != -1) { |
232 | 264 |
if (message.indexOf("does not have permission") != -1) { |
233 | 265 |
throw new InsufficientKarmaException(message); |
... | ... | |
242 | 274 |
"MetacatClient: Error converting Reader to String." |
243 | 275 |
+ ioe.getMessage()); |
244 | 276 |
} |
245 |
return pbr;
|
|
277 |
return bis;
|
|
246 | 278 |
} |
247 | 279 |
|
248 | 280 |
|
... | ... | |
258 | 290 |
* reached or does not respond |
259 | 291 |
* @throws MetacatException when the metacat server generates another error |
260 | 292 |
*/ |
261 |
public Reader readInlineData(String inlinedataid)
|
|
293 |
public InputStream readInlineData(String inlinedataid)
|
|
262 | 294 |
throws InsufficientKarmaException, |
263 | 295 |
MetacatInaccessibleException, MetacatException { |
264 |
PushbackReader pbr = null;
|
|
296 |
Reader r = null;
|
|
265 | 297 |
|
266 | 298 |
Properties prop = new Properties(); |
267 | 299 |
prop.put("action", "readinlinedata"); |
... | ... | |
273 | 305 |
} catch (Exception e) { |
274 | 306 |
throw new MetacatInaccessibleException(e.getMessage()); |
275 | 307 |
} |
276 |
|
|
277 |
pbr = new PushbackReader(new InputStreamReader(response), 512);
|
|
308 |
BufferedInputStream bis = new BufferedInputStream(response); |
|
309 |
r = new InputStreamReader(bis);
|
|
278 | 310 |
try { |
311 |
bis.mark(512); |
|
279 | 312 |
char[] characters = new char[512]; |
280 |
int len = pbr.read(characters, 0, 512);
|
|
313 |
int len = r.read(characters, 0, 512); |
|
281 | 314 |
StringWriter sw = new StringWriter(); |
282 | 315 |
sw.write(characters, 0, len); |
283 | 316 |
String message = sw.toString(); |
284 | 317 |
sw.close(); |
285 |
pbr.unread(characters, 0, len); |
|
286 |
|
|
318 |
bis.reset(); |
|
287 | 319 |
if (message.indexOf("<error>") != -1) { |
288 | 320 |
if (message.indexOf("does not have permission") != -1) { |
289 | 321 |
throw new InsufficientKarmaException(message); |
... | ... | |
297 | 329 |
+ ioe.getMessage()); |
298 | 330 |
} |
299 | 331 |
|
300 |
return pbr;
|
|
332 |
return bis;
|
|
301 | 333 |
} |
302 | 334 |
|
303 | 335 |
/** |
Also available in: Unified diff
return InputStream instead of Reader in the MetacatClient read() and readInlineData() methods. Can now handle binary data
http://bugzilla.ecoinformatics.org/show_bug.cgi?id=4432