package org.bioxsd.workflows;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
import org.apache.xmlbeans.XmlException;
import org.bioxsd.bioxsd_0_4.AnnotatedSequence;
import org.bioxsd.bioxsd_0_4.AminoacidSequenceRecord;
import org.bioxsd.bioxsd_0_4.GeneralAminoacidSequenceRecord;
import org.bioxsd.bioxsd_0_4.BiosequenceRecord;
import org.bioxsd.bioxsd_0_4.SequenceReference;
import fr.ibcp.gbio.clustalw.CancelClustalwDocument;
import fr.ibcp.gbio.clustalw.CheckStatusClustalwDocument;
import fr.ibcp.gbio.clustalw.ClustalWStub;
import fr.ibcp.gbio.clustalw.GetResultsClustalwDocument;
import fr.ibcp.gbio.clustalw.GetResultsClustalwResponseDocument;
import fr.ibcp.gbio.clustalw.SubmitClustalwDocument;
import fr.ibcp.gbio.goriv.CancelGorIVDocument;
import fr.ibcp.gbio.goriv.CheckStatusGorIVDocument;
import fr.ibcp.gbio.goriv.GetResultsGorIVDocument;
import fr.ibcp.gbio.goriv.GorIVStub;
import fr.ibcp.gbio.goriv.SubmitGorIVDocument;
import no.uni.bccs.esysbio.schema.blastparameterschema.MatrixType;
import no.uni.bccs.www.service.blast.BlastServiceStub;
import no.uni.bccs.www.service.blast.BlastJobServiceStub;
import no.uni.bccs.www.service.blast.BlastDbServiceStub;
import no.uni.bccs.www.service.blast.GetResultDocument;
import no.uni.bccs.www.service.blast.GetResultFaultException0;
import no.uni.bccs.www.service.blast.GetResultResponseDocument;
import no.uni.bccs.www.service.blast.GetSequencesDocument;
import no.uni.bccs.www.service.blast.GetSequencesFaultException0;
import no.uni.bccs.www.service.blast.GetStatusDocument;
import no.uni.bccs.www.service.blast.GetStatusFaultException2;
import no.uni.bccs.www.service.blast.RunBlastpDocument;
import no.uni.bccs.www.service.blast.RunBlastpFaultException3;
import dk.dtu.cbs.www.ws.ws_common.Jobstatus.Enum;
import dk.dtu.cbs.www.ws.ws_common.PollQueue.Job;
import dk.dtu.cbs.www.ws.wsmaxalign_1_1_ws1.MaxalignDocument;
import dk.dtu.cbs.www.ws.wsmaxalign_1_1_ws1.MaxalignResponseDocument;
import dk.dtu.cbs.www.ws.wsmaxalign_1_1_ws1.WSMaxAlign_1_1_ws1Stub;
import dk.dtu.cbs.www.ws.wsprop_1_0_ws0.WSProP_1_0_ws0Stub;
import dk.dtu.cbs.www.ws.wsnetnes_1_1_ws0.WSNetNES_1_1_ws0Stub;
public class WorkflowNr1
{
public class ResultException extends Exception
{
private static final long serialVersionUID = -5651350712038788788L;
public String service, detail;
public ResultException(String service, String detail)
{
this.service = service;
this.detail = detail;
}
}//ResultException
public class JobException extends Exception
{
private static final long serialVersionUID = 6981789948985964011L;
}//JobException
public static void main(String[] args)
{
PrintStream out = null;
try
{
// Read input sequence record & output target
String in = "MSSSGTPDLPVLLTDLKIQYTKIFINNEWHDSVSGKKFPVFNPATEEELCQVEEGDKEDVDKAVKAARQAFQIGSPWRTMDASERGRLLYKLADLIERDRLLLATMESMNGGKLYSNAYLNDLAGCIKTLRYCAGWADKIQGRTIPIDGNFFTYTRHEPIGVCGQIIPWNFPLVMLIWKIGPALSCGNTVVVKPAEQTPLTALHVASLIKEAGFPPGVVNIVPGYGPTAGAAISSHMDIDKVAFTGSTEVGKLIKEAAGKSNLKRVTLELGGKSPCIVLADADLDNAVEFAHHGVFYHQGQCCIAASRIFVEESIYDEFVRRSVERAKKYILGNPLTPGVTQGPQIDKEQYDKILDLIESGKKEGAKLECGGGPWGNKGYFVQPTVFSNVTDEMRIAKEEIFGPVQQIMKFKSLDDVIKRANNTFYGLSAGVFTKDIDKAITISSALQAGTVWXP_001143065";
AminoacidSequenceRecord mySeq = AminoacidSequenceRecord.Factory.parse(args.length == 0 ? in : args[0]);
String outName = args.length < 2 ? "out" + /*System.currentTimeMillis() +*/ ".xml" : args[1];
System.out.println("Input sequence record:\n" + mySeq + "\n\nOutput file: " + outName + "\n\nWorkflow started");
out = new PrintStream(outName);
out.println("\n\n" + mySeq + "\n\n\n\n\n");
// Submit CBU BLAST and get result
BlastServiceStub blast1a = new BlastServiceStub();
blast1a._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.HTTP_PROTOCOL_VERSION, org.apache.axis2.transport.http.HTTPConstants.HEADER_PROTOCOL_10);
RunBlastpDocument blast1In = RunBlastpDocument.Factory.newInstance();
blast1In.addNewRunBlastp().addNewQuerySequence();
blast1In.getRunBlastp().setQuerySequenceArray(0, mySeq);
blast1In.getRunBlastp().setDatabaseURI("Swiss-Prot");
blast1In.getRunBlastp().setAlignmentNumber(5);
blast1In.getRunBlastp().setExpectValue(10);
blast1In.getRunBlastp().setWordSize(0);
blast1In.getRunBlastp().setMatrix(MatrixType.Factory.newInstance().BLOSUM_62);
blast1In.getRunBlastp().setGapOpenPenalty(-1);
blast1In.getRunBlastp().setGapExtensionPenalty(-1);
String jobId = blast1a.RunBlastp(blast1In).getRunBlastpResponse().getJobId();
System.out.println("\nBLAST submitted. Job id: " + jobId);
BlastJobServiceStub blast1b = new BlastJobServiceStub();
GetStatusDocument blast1Job = GetStatusDocument.Factory.newInstance();
blast1Job.addNewGetStatus().setJobId(jobId);
long t0 = System.currentTimeMillis(), t1, t = t0, wait = 2000, limit = 120000;
String status;
while (!(status = blast1b.GetStatus(blast1Job).getGetStatusResponse().getStatus()).equalsIgnoreCase("COMPLETE"))
{
System.out.println("BLAST status: " + status);
if (t - t0 > limit)
{
System.out.println("WARNING: BLAST@CBU JOB IS TAKING TOO LONG [Status = \"" + status + "\"] ABORTED");
throw (new WorkflowNr1()).new JobException();
}//fi
if (status.equalsIgnoreCase("INQUEUE") || status.equalsIgnoreCase("INPROGRESS"))
{
t1 = System.currentTimeMillis();
while (t - t1 < wait)
t = System.currentTimeMillis();
}
else // Abort in other cases
{
System.out.println("WARNING: BLAST@CBU JOB ABORTED [Status = \"" + status + "\"]");
throw (new WorkflowNr1()).new JobException();
}//fi(else)
}//while
System.out.println("BLAST finished. Status: " + status);
GetResultDocument blast1JobRes = GetResultDocument.Factory.newInstance();
blast1JobRes.addNewGetResult().setJobId(jobId);
GetResultResponseDocument blast1Out = blast1b.GetResult(blast1JobRes);
if (blast1Out.getGetResultResponse().getBlastOutput().getBlastOutputIterations().getIterationArray().length == 0)
throw (new WorkflowNr1()).new ResultException("BLAST@CBU", "NO ITERATIONS");
int n = blast1Out.getGetResultResponse().getBlastOutput().getBlastOutputIterations().getIterationArray(0).getIterationHits().sizeOfHitArray();
if (n == 0)
throw (new WorkflowNr1()).new ResultException("BLAST@CBU", "NO HITS");
String[] ids = new String[n];
for (int i = 0; i < n; i++)
ids[i] = blast1Out.getGetResultResponse().getBlastOutput().getBlastOutputIterations().getIterationArray(0).getIterationHits().getHitArray(i).getHitId();
BlastDbServiceStub blast1c = new BlastDbServiceStub();
GetSequencesDocument idsIn = GetSequencesDocument.Factory.newInstance();
idsIn.addNewGetSequences().setSequenceIdentifierArray(ids);
idsIn.getGetSequences().setDatabaseURI("Swiss-Prot");
BiosequenceRecord[] similarSeqs = blast1c.GetSequences(idsIn).getGetSequencesResponse().getSequenceArray();
// Submit ClustalW and get result
ClustalWStub clustalw = new ClustalWStub();
SubmitClustalwDocument clustalwIn = SubmitClustalwDocument.Factory.newInstance();
clustalwIn.addNewSubmitClustalw().addNewSequenceRecord();
clustalwIn.getSubmitClustalw().setSequenceRecordArray(0, mySeq);
if (!clustalwIn.getSubmitClustalw().getSequenceRecordArray(0).isSetCustomName())
clustalwIn.getSubmitClustalw().getSequenceRecordArray(0).setCustomName("My sequence");
for (int i = 0; (i < n); i++)
{
clustalwIn.getSubmitClustalw().addNewSequenceRecord();
clustalwIn.getSubmitClustalw().setSequenceRecordArray(i + 1, similarSeqs[i]);
if (!clustalwIn.getSubmitClustalw().getSequenceRecordArray(i + 1).isSetCustomName())
clustalwIn.getSubmitClustalw().getSequenceRecordArray(i + 1).setCustomName("Similar sequence " + (i + 1));
}//for
jobId = clustalw.submitClustalw(clustalwIn).getSubmitClustalwResponse().getJobId();
System.out.println("\nClustalW submitted. Job id: " + jobId);
CheckStatusClustalwDocument clustalwJob = CheckStatusClustalwDocument.Factory.newInstance();
clustalwJob.addNewCheckStatusClustalw().setJobId(jobId);
t0 = System.currentTimeMillis();
wait = 3000;
limit = 60000;
while (!(status = clustalw.checkStatusClustalw(clustalwJob).getCheckStatusClustalwResponse().getStatus()).equalsIgnoreCase("done"))
{
System.out.println("ClustalW status: " + status);
if (t - t0 > limit)
{
System.out.println("WARNING: ClustalW JOB IS TAKING TOO LONG [Status = \"" + status + "\"] ABORTED");
CancelClustalwDocument cancelJob = CancelClustalwDocument.Factory.newInstance();
cancelJob.addNewCancelClustalw().setJobId(jobId);
clustalw.cancelClustalw(cancelJob);
throw (new WorkflowNr1()).new JobException();
}//fi
if (status.equalsIgnoreCase("running") || status.equalsIgnoreCase("waiting"))
{
t1 = System.currentTimeMillis();
while (t - t1 < wait)
t = System.currentTimeMillis();
}
else // Abort in other cases
{
System.out.println("WARNING: ClustalW JOB ABORTED [Status = \"" + status + "\"]");
throw (new WorkflowNr1()).new JobException();
}//fi(else)
}//while
System.out.println("ClustalW finished. Status: " + status);
GetResultsClustalwDocument clustalwJobRes = GetResultsClustalwDocument.Factory.newInstance();
clustalwJobRes.addNewGetResultsClustalw().setJobId(jobId);
GetResultsClustalwResponseDocument clustalwOut = clustalw.getResultsClustalw(clustalwJobRes);
n = clustalwOut.getGetResultsClustalwResponse().getAlignment().sizeOfAlignedSequenceArray();
for (int i = 0; (i < n); i++)
if (!clustalwOut.getGetResultsClustalwResponse().getAlignment().getAlignedSequenceArray(i).getSequenceRecord().isSetFormalReference() || !clustalwOut.getGetResultsClustalwResponse().getAlignment().getAlignedSequenceArray(i).getSequenceRecord().getFormalReference().isSetAccession())
{
SequenceReference r;
if (clustalwOut.getGetResultsClustalwResponse().getAlignment().getAlignedSequenceArray(i).getSequenceRecord().isSetFormalReference())
r = clustalwOut.getGetResultsClustalwResponse().getAlignment().getAlignedSequenceArray(i).getSequenceRecord().getFormalReference();
else
r = SequenceReference.Factory.newInstance();
String nm = clustalwOut.getGetResultsClustalwResponse().getAlignment().getAlignedSequenceArray(i).getSequenceRecord().getCustomName();
String ac = "";
for (int j = 0; j < nm.length(); j++)
ac = ac.concat(nm.charAt(j) == ' ' ? "" : nm.substring(j, j + 1));
r.setAccession(ac);
clustalwOut.getGetResultsClustalwResponse().getAlignment().getAlignedSequenceArray(i).getSequenceRecord().setFormalReference(r);
}//fi
//for
// Call MaxAlign and prepare inputs for feature predictions
WSMaxAlign_1_1_ws1Stub maxalign = new WSMaxAlign_1_1_ws1Stub();
MaxalignDocument maxalignIn = MaxalignDocument.Factory.newInstance();
maxalignIn.addNewMaxalign().addNewParameters().addNewOriginalAlignment();
maxalignIn.getMaxalign().getParameters().setOriginalAlignment(clustalwOut.getGetResultsClustalwResponse().getAlignment());
MaxalignResponseDocument maxalignOut = maxalign.maxalign(maxalignIn);
System.out.println("\nMaxAlign finished");
n = maxalignOut.getMaxalignResponse().getResultAlignment().sizeOfAlignedSequenceArray();
GeneralAminoacidSequenceRecord[] seq = new GeneralAminoacidSequenceRecord[n];
dk.dtu.cbs.www.ws.wsprop_1_0_ws0.RunServiceDocument propIn = dk.dtu.cbs.www.ws.wsprop_1_0_ws0.RunServiceDocument.Factory.newInstance();
propIn.addNewRunService().addNewParameters();
dk.dtu.cbs.www.ws.wsnetnes_1_1_ws0.RunServiceDocument netnesIn = dk.dtu.cbs.www.ws.wsnetnes_1_1_ws0.RunServiceDocument.Factory.newInstance();
netnesIn.addNewRunService().addNewParameters();
for (int i = 0; i < n; i++)
{
seq[i] = GeneralAminoacidSequenceRecord.Factory.parse(maxalignOut.getMaxalignResponse().getResultAlignment().getAlignedSequenceArray(i).getSequenceRecord().toString());
propIn.getRunService().getParameters().addNewSequenceRecord();
propIn.getRunService().getParameters().setSequenceRecordArray(i, seq[i]);
netnesIn.getRunService().getParameters().addNewSequenceRecord();
netnesIn.getRunService().getParameters().setSequenceRecordArray(i, seq[i]);
}//for
// Submit ProP
WSProP_1_0_ws0Stub prop = new WSProP_1_0_ws0Stub();
String propJobId = prop.runService(propIn).getRunServiceResponse().getQueueentry().getJobid();
System.out.println("\nProP submitted. Job id: " + propJobId);
// Submit NetNES
WSNetNES_1_1_ws0Stub netnes = new WSNetNES_1_1_ws0Stub();
String netnesJobId = netnes.runService(netnesIn).getRunServiceResponse().getQueueentry().getJobid();
System.out.println("NetNES submitted. Job id: " + netnesJobId);
// Submit GorIV
GorIVStub gor4 = new GorIVStub();
String[] gorJobId = new String[n];
for (int i = 0; i < n; i++)
{
SubmitGorIVDocument gor4In = SubmitGorIVDocument.Factory.newInstance();
gor4In.setSubmitGorIV(seq[i]);
gorJobId[i] = gor4.submitGorIV(gor4In).getSubmitGorIVResponse().getJobId();
System.out.println("GorIV(" + i + ") submitted. Job id: " + gorJobId[i]);
t0 = System.currentTimeMillis();
wait = 1000;
while (t - t0 < wait)
t = System.currentTimeMillis();
}//for
// Get results ProP
dk.dtu.cbs.www.ws.wsprop_1_0_ws0.PollQueueDocument propJob = dk.dtu.cbs.www.ws.wsprop_1_0_ws0.PollQueueDocument.Factory.newInstance();
Job insideJob = Job.Factory.newInstance();
insideJob.setJobid(propJobId);
propJob.addNewPollQueue().setJob(insideJob);
t0 = System.currentTimeMillis();
wait = 1500;
limit = 30000;
Enum enumStatus;
while (!(enumStatus = prop.pollQueue(propJob).getPollQueueResponse().getQueueentry().getStatus()).toString().equalsIgnoreCase("FINISHED"))
{
System.out.println("ProP status: " + enumStatus);
if (t - t0 > limit)
{
System.out.println("WARNING: ProP JOB IS TAKING TOO LONG [Status = \"" + enumStatus + "\"] ABORTED");
throw (new WorkflowNr1()).new JobException();
}//fi
if (enumStatus.toString().equalsIgnoreCase("QUEUED") || enumStatus.toString().equalsIgnoreCase("PENDING") || enumStatus.toString().equalsIgnoreCase("ACTIVE") || enumStatus.toString().equalsIgnoreCase("WAITING"))
{
t1 = System.currentTimeMillis();
while (t - t1 < wait)
t = System.currentTimeMillis();
}
else // Abort in other cases: "UNKNOWN JOBID", "REJECTED", "QUEUE DOWN", "DATABASE DOWN", "FAILED"
{
System.out.println("WARNING: ProP JOB ABORTED [Status = \"" + enumStatus + "\"]");
throw (new WorkflowNr1()).new JobException();
}//fi(else)
}//while
System.out.println("ProP finished. Status: " + enumStatus);
dk.dtu.cbs.www.ws.wsprop_1_0_ws0.FetchResultDocument propJobRes = dk.dtu.cbs.www.ws.wsprop_1_0_ws0.FetchResultDocument.Factory.newInstance();
propJobRes.addNewFetchResult().addNewJob().setJobid(propJobId);
AnnotatedSequence[] propResult = prop.fetchResult(propJobRes).getFetchResultResponse().getAnnotatedSequenceArray();
// Get results NetNES
dk.dtu.cbs.www.ws.wsnetnes_1_1_ws0.PollQueueDocument netnesJob = dk.dtu.cbs.www.ws.wsnetnes_1_1_ws0.PollQueueDocument.Factory.newInstance();
insideJob.setJobid(netnesJobId);
netnesJob.addNewPollQueue().setJob(insideJob);
t0 = System.currentTimeMillis();
t = t0;
wait = 1500;
limit = 20000;
while (!(enumStatus = netnes.pollQueue(netnesJob).getPollQueueResponse().getQueueentry().getStatus()).toString().equalsIgnoreCase("FINISHED"))
{
System.out.println("NetNES status: " + enumStatus);
if (t - t0 > limit)
{
System.out.println("WARNING: NetNES JOB IS TAKING TOO LONG [Status = \"" + enumStatus + "\"] ABORTED");
throw (new WorkflowNr1()).new JobException();
}//fi
if (enumStatus.toString().equalsIgnoreCase("QUEUED") || enumStatus.toString().equalsIgnoreCase("PENDING") || enumStatus.toString().equalsIgnoreCase("ACTIVE") || enumStatus.toString().equalsIgnoreCase("WAITING"))
{
t1 = System.currentTimeMillis();
while (t - t1 < wait)
t = System.currentTimeMillis();
}
else // Abort in other cases: "UNKNOWN JOBID", "REJECTED", "QUEUE DOWN", "DATABASE DOWN", "FAILED"
{
System.out.println("WARNING: NetNES JOB ABORTED [Status = \"" + enumStatus + "\"]");
throw (new WorkflowNr1()).new JobException();
}//fi(else)
}//while
System.out.println("NetNES finished. Status: " + enumStatus);
dk.dtu.cbs.www.ws.wsnetnes_1_1_ws0.FetchResultDocument netnesJobRes = dk.dtu.cbs.www.ws.wsnetnes_1_1_ws0.FetchResultDocument.Factory.newInstance();
netnesJobRes.addNewFetchResult().addNewJob().setJobid(netnesJobId);
AnnotatedSequence[] netnesResult = netnes.fetchResult(netnesJobRes).getFetchResultResponse().getAnnotatedSequenceArray();
// Get results GorIV and merge with other predictions
AnnotatedSequence[] result = new AnnotatedSequence[n];
for (int i = 0; i < n; i++)
{
CheckStatusGorIVDocument gor4Job = CheckStatusGorIVDocument.Factory.newInstance();
gor4Job.addNewCheckStatusGorIV().setJobId(gorJobId[i]);
t0 = System.currentTimeMillis();
wait = 2000;
limit = 30000;
while (!(status = gor4.checkStatusGorIV(gor4Job).getCheckStatusGorIVResponse().getStatus()).equalsIgnoreCase("done"))
{
System.out.println("GorIV(" + i + ") status: " + status);
if (t - t0 > limit)
{
System.out.println("WARNING: GorIV(" + i + ") JOB IS TAKING TOO LONG [Status = \"" + status + "\"] ABORTED");
CancelGorIVDocument cancelJob = CancelGorIVDocument.Factory.newInstance();
cancelJob.addNewCancelGorIV().setJobId(gorJobId[i]);
gor4.cancelGorIV(cancelJob);
throw (new WorkflowNr1()).new JobException();
}//fi
if (status.equalsIgnoreCase("running") || status.equalsIgnoreCase("waiting"))
{
t1 = System.currentTimeMillis();
while (t - t1 < wait)
t = System.currentTimeMillis();
}
else // Abort in other cases
{
System.out.println("WARNING: GorIV(" + i + ") JOB ABORTED [Status = \"" + status + "\"]");
throw (new WorkflowNr1()).new JobException();
}//fi(else)
}//while
System.out.println("GorIV(" + i + ") finished. Status: " + status);
GetResultsGorIVDocument gor4JobRes = GetResultsGorIVDocument.Factory.newInstance();
gor4JobRes.addNewGetResultsGorIV().setJobId(gorJobId[i]);
AnnotatedSequence goriResult = gor4.getResultsGorIV(gor4JobRes).getGetResultsGorIVResponse().getSecondaryStructure();
int propiAnnsM = propResult[i].sizeOfAnnotationArray();
int nesiAnnsM = netnesResult[i].sizeOfAnnotationArray();
int goriAnnsM = goriResult.sizeOfAnnotationArray();
result[i] = propResult[i];
for (int j = 0; j < nesiAnnsM; j++)
{
result[i].addNewAnnotation();
result[i].setAnnotationArray(j + propiAnnsM, netnesResult[i].getAnnotationArray(j));
}//for
for (int j = 0; j < goriAnnsM; j++)
{
result[i].addNewAnnotation();
result[i].setAnnotationArray(j + propiAnnsM + nesiAnnsM, goriResult.getAnnotationArray(j));
}//for
int j = -1;
if (propResult[i].sizeOfMethodArray() > 0)
{
result[i].addNewMethod();
j++;
result[i].setMethodArray(j, propResult[i].getMethodArray(0));
}//fi
if (netnesResult[i].sizeOfMethodArray() > 0)
{
result[i].addNewMethod();
j++;
result[i].setMethodArray(j, netnesResult[i].getMethodArray(0));
}//fi
if (goriResult.sizeOfMethodArray() > 0)
{
result[i].addNewMethod();
j++;
result[i].setMethodArray(j, goriResult.getMethodArray(0));
}//fi
out.println("\n\n" + result[i] + "\n\n");
}//for
out.println("\n\n" + maxalignOut + "\n\n");
System.out.println("\nWorkflow completed. Output in \"" + outName + "\"");
}//try
catch (FileNotFoundException e)
{
System.out.println("-=Workflow1: FileNotFoundException=-");
e.printStackTrace();
}
catch (XmlException e)
{
System.out.println("-=Workflow1: XMLException=-");
e.printStackTrace();
}//catch
catch (AxisFault e)
{
System.out.println("-=Workflow1: AxisFault=-");
e.printStackTrace();
}//catch
catch (RemoteException e)
{
System.out.println("-=Workflow1: RemoteException=-");
e.printStackTrace();
}//catch
catch (JobException e)
{
System.out.println("-=Workflow1: JobException=-");
}//catch
catch (ResultException e)
{
System.out.println(e.service + ": EMPTY OR INVALID RESULT [" + e.detail + "]\n");
}//catch
catch (RunBlastpFaultException3 e)
{
System.out.println("-=BLAST@CBU: RunBlastp Fault=-");
e.printStackTrace();
}//catch
catch (GetStatusFaultException2 e)
{
System.out.println("-=BLAST@CBU: GetStatus Fault=-");
e.printStackTrace();
}//catch
catch (GetResultFaultException0 e)
{
System.out.println("-=BLAST@CBU: GetResult Fault=-");
e.printStackTrace();
}//catch
catch (GetSequencesFaultException0 e)
{
System.out.println("-=BLAST@CBU: GetSequences Fault=-");
e.printStackTrace();
}//catch
if (out != null)
out.close();
}//main
}//Workflow1