[Biojava-l] Exception not being caught.
Michael Heuer
heuermh at acm.org
Tue Dec 28 23:24:45 EST 2004
On Wed, 29 Dec 2004, Richard HOLLAND wrote:
> I am getting an exception thrown by my code that never seems to get
> caught. I am not sure if this is because of BioJava or because of a lack
> of understanding of Exceptions on my part? The exception causes the
> program to grind to an immediate halt. My method throws the general
> Exception class, but the exception thrown by BioJava seems to escape
> that detail and treats it as though my method were not handling
> exceptions at all. I would expect the calling method which wraps the
> call in a try{}catch{Exception e} statement to catch it? But apparently
> not? Why not?!!
>
> The method in BioJava I am using is DNATools.createDNASequence.
>
> Here is the exception:
>
> Exception in thread "main" org.biojava.bio.BioError: Something has gone
> badly wrong with DNA
> at org.biojava.bio.seq.DNATools.createDNA(DNATools.java:158)
Unfortunately BioError is not an exception, it is an Error.
I believe you can catch them with
try
{
// ...
}
catch (Throwable t)
{
// ...
}
but you probably shouldn't be. From the BioError javadoc:
For developers:
Throw this when something has gone wrong and in general people should
not be handling it.
> org.biojava.bio.seq.DNATools.createDNASequence(DNATools.java:176)
> at
> gis.aads.pipeline.LibraryFastaBuilder.run(LibraryFastaBuilder.java:234)
> at gis.pipeline.Main.main(Main.java:125)
> Caused by: org.biojava.bio.symbol.IllegalSymbolException: This
> tokenization doesn't contain character: ''
> at
> org.biojava.bio.seq.io.CharacterTokenization.parseTokenChar(CharacterTok
> enization.java:175)
This is the real problem: the parser doesn't know what to do with the
character ''. I don't know exactly what that means, but does the string
you pull out of the database clob look reasonable?
michael
> And here is the method that calls it (or bits of it anyhow, and an
> example calling method):
>
> public void doTheThing() {
> MyClass otherClass = new MyClass();
> try {
> int rc = otherClass.run();
> System.out.println("rc was "+rc);
> } catch (Exception e) {
> System.out.println("oops!");
> }
> }
>
> public int run() throws Exception {
> ....
> // For each library, get all trimmed seqs.
> for (String lib : libs) {
> log.info("Processing library "+lib);
> ....
> // Get the sequences.
> seqq.execute(lib);
> rs = seqq.results();
>
> // Log info.
> log.info("Processing fasta.");
> while (rs.next()) {
> // Get details.
> String seqID = rs.getString(1);
> char direction = UserSampleID.getDirection(seqID);
> Clob seqclob = rs.getClob(2);
> String seqstr =
> seqclob.getSubString((long)1,(int)seqclob.length());
> if (seqstr.length()<minLength) continue;
>
> // Create the sequence and format it into fasta.
> Sequence seq = DNATools.createDNASequence(seqstr,
> seqID);
> ByteArrayOutputStream baos = new
> ByteArrayOutputStream();
> SeqIOTools.writeFasta(baos,seq);
> baos.flush();
>
> // For each seq, if reverse, add to reverse temp file.
> // Else, add to forward temp file.
> switch (direction) {
> case 'R':
> reverseWriter.write(baos.toString());
> break;
> case 'F':
> forwardWriter.write(baos.toString());
> break;
> default:
> log.warning("Unknown direction "+direction+"
> received for sequence "+seqID);
> rc = PipelineApp.FAILURE;
> continue;
> }
> ....
> }
> ....
> }
> ....
> }
>
>
> I understand that the exception is thrown because of an invalid
> sequence, but I don't understand why it isn't being caught.
>
>
> Richard Holland
> Bioinformatics Specialist
> GIS extension 8199
>
> ---------------------------------------------
> This email is confidential and may be privileged. If you are not the
> intended recipient, please delete it and notify us immediately. Please
> do not copy or use it for any purpose, or disclose its content to any
> other person. Thank you.
> ---------------------------------------------
>
>
> _______________________________________________
> Biojava-l mailing list - Biojava-l at biojava.org
> http://biojava.org/mailman/listinfo/biojava-l
>
More information about the Biojava-l
mailing list