import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import org.apache.axis.AxisFault;
import org.apache.axis.AxisEngine;
import org.apache.axis.server.AxisServer;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.message.SOAPFaultElement;

public class FileListener {
   public void run() {
      while (true) {
         try {
            // Szukamy komunikatu, tworzymy nowy obiekt Message
            FileInputStream input = new FileInputStream("inMsg");
            AxisEngine engine = AxisServer.getSingleton();
            MessageContext msgContext = new MessageContext(engine);
            Message msg = new Message(input);

            try {
               // Ustawiamy msg jako "danie"
               msgContext.setRequestMessage(msg);

               // Ustawiamy modu warstwy transportowej
               msgContext.setTransportName("file");

               // Wywoujemy modu Axis
               engine.invoke(msgContext)
            }
            catch (Exception e) {
               // Przechwytujemy kady wyjtek; informacj o bdzie umieszczamy w odpowiedzi
               if (!(e instanceof AxisFault))
                  e = new AxisFault(e);
               AxisFault af = (AxisFault)e;
               msg = msgContext.getResponseMessage();
               if (msg == null) {
                  msgContext.setResponseMessage(new Message(af));
               } else {
                  SOAPEnvelope env = msg.getAsSOAPEnvelope();
                  env.clearBody();
                  env.addBodyElement(new SOAPFaultElement(af));
               }
            }
            
            // Zamykamy i kasujemy "danie"
            input.close();
            (new File("inMsg")).delete();
   
            // Umieszczamy odpowied w pliku o nazwie "outMsg"
            msg = msgContext.getResponseMessage();
            FileOutputStream output = new FileOutputStream("outMsg");
            String result = (String)msg.getAsString();
            output.write(result.getBytes());
            output.close();

            System.out.println("Przetworzono danie");
         } catch(Exception exp) {
            if (!(exp instanceof FileNotFoundException))
               exp.printStackTrace();
         }
         // Zasypiamy na sekund i wykonujemy ptl od nowa
         try {
            Thread.sleep( 1000 );
         } catch (Exception e) {
         }
      }
   }

   static public void main(String[] args) {
      (new FileListener()).run();
   }
}
