#!/usr/bin/env perl use XMLRPC::Transport::HTTP; use XML::Xerces; use XML::Xerces::DOMParse; use Carp; use Fcntl ":flock"; my $daemon = XMLRPC::Transport::HTTP::Daemon -> new (LocalPort => 8081, Reuse => 1) -> dispatch_to('Monster') ; print "Contact to XMLRPC server at ", $daemon->url, "\n"; $daemon->handle; package Monster; sub go{ shift if UNIVERSAL::isa($_[0] => __PACKAGE__); my $CP = shift; $filePath = "/usr/local/jakarta-tomcat-4.1.12/webapps/monster/jobs/"; my $parser = XML::Xerces::DOMParser->new(); $parser->setCreateEntityReferenceNodes(1); my $error_handler = XML::Xerces::PerlErrorHandler->new(); $parser->setErrorHandler($error_handler); my $in; eval {$in = XML::Xerces::MemBufInputSource->new($CP);}; error($@) if $@; eval {$parser->parse($in);}; error($@) if $@; my $doc = $parser->getDocument(); my $cps = $doc->getElementsByTagName("ChainPairs"); my $id = $cps->item(0)->getAttributes()->getNamedItem("index")->getNodeValue(); my $filePath2 = "$filePath$id/"; mkdir $filePath2; my $fileNode = $doc->getElementsByTagName("File"); my $file = $fileNode->item(0)->getChildNodes->item(0)->getNodeValue(); $file = substr($file, 37); $pdb = substr($file, 0, -4); open (F, ">$filePath2$pdb.cp" ) or die "couldn't open file $pdb.cp: $!"; flock(F, LOCK_EX); print F $CP; flock(F, LOCK_UN); close F; system("/usr/local/bin/monster", "-i$id", "$filePath$file"); }