package ch3.ex4;
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;

	/**
	 * Utworzenie klienta na podstawie adresu
	 */
	public POSubmissionClient(String targetUrl)
	{
		url = targetUrl;
	}

	/**
	 * 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));
		ient.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();
	}
}
