package ch5.ex1;
import java.io.*;
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 sieciowej do skadania zamwie.
 */
public class POSubmissionClient
{
  /**
   * URL usugi sieciowej
   */
  private String url;
  private String userid;
  private String password;

  /**
   * Utworzenie klienta na podstawie adresu
   */
  public POSubmissionClient(String targetUrl, String userid, String password)
  {
    url = targetUrl;
    this.userid = userid;
    this.password = password;
  }

  /**
   * Wywoanie usugi sieciowej
   *
   * @param po dokument zamwienia
   * @return dokument faktury
   * @exception Exception bd I/O lub bd platformy Axis
   */
  public String invoke(InputStream po) throws Exception
  {
    // Wysanie komunikatu
    ServiceClient client = new ServiceClient(url);
    client.setRequestMessage(new Message(po, true));
    call.set(Transport.USER, userid);
    call.set(Transport.PASSWORD, password);
    client.invoke();

    // Odczytanie treci odpowiedzi
    MessageContext ctx = client.getMessageContext();
    Message outMsg = ctx.getResponseMessage();
    SOAPEnvelope envelope = outMsg.getAsSOAPEnvelope();
    SOAPBodyElement body = envelope.getFirstBody();

    // Wydobycie kodu XML z treci komunikatu
    StringWriter w = new StringWriter();
    SerializationContext sc = new SerializationContext(w, ctx);
    body.output(sc);
    return w.toString();
  }
}
