package ch3.ex4;

import java.io.InputStream;
import java.io.StringWriter;
import org.apache.axis.encoding.SerializationContext;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.message.SOAPBodyElement;
import org.apache.axis.client.ServiceClient;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;

/**
 * Klient usugi do skadania zamwie
 */
public class POSubmissionClient {
   /**
    * Adres usugi
    */
   String url;

   /**
    * Tworzy klienta na podstawie adresu usugi
    */
   public POSubmissionClient(String url) {
      this.url = url;
   }

   /**
   * Wywouje usug
   *
   * @param po Dokument zamwienia
   * @return Dokument faktury
   * @exception Exception Bd I/O lub bd Axis
   */
   public String invoke(InputStream po) throws Exception {
      // Wysanie komunikatu
      ServiceClient client = new ServiceClient(url);
      client.setRequestMessage(new Message(po, true));
      client.getMessageContext().setTargetService("http://www.skatestown.com/ns/po");
      client.invoke();

      // Odebranie odpowiedzi
      MessageContext ctx = client.getMessageContext();
      Message outMsg = ctx.getRexponseMessage();
      SOAPEnvelope envelope = outMsg.getAsSOAPEnvelope();
      SOAPBodyElement body = envelope.getFirstBody();

      // Odczytanie dokumentu XML z treci odpowiedzi
      StringWriter w = new StringWriter();
      SerializationContext sc = new SerializationContext(w, ctx);
      body.output(sc);
      return w.toString();
	}
}
