package atujplag.util;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.namespace.QName;
import javax.xml.rpc.JAXRPCException;
import javax.xml.rpc.handler.GenericHandler;
import javax.xml.rpc.handler.HandlerInfo;
import javax.xml.rpc.handler.MessageContext;
import javax.xml.rpc.handler.soap.SOAPMessageContext;
import javax.xml.soap.SOAPMessage;
//import atujplag.view2.LogOutputStream;
public class LoggingHandler extends GenericHandler {
// String[] MIME_HEADERS = { "Server", "Date", "Content-length", "Content-type", "SOAPAction" };
protected HandlerInfo info=null;
public boolean handleRequest(MessageContext context) {
// System.out.println("Entering LoggingHandler::handleRequest()");
/* try
{
SOAPMessageContext smsgct=(SOAPMessageContext) context;
SOAPMessage msg=smsgct.getMessage();
SOAPEnvelope envelope=msg.getSOAPPart().getEnvelope();
SOAPHeader header=msg.getSOAPHeader();
if(header==null)
{
header=envelope.addHeader();
}
SOAPHeaderElement accessElement=header.addHeaderElement(
envelope.createName("logged","ns1",
"http://example.com/jplag"));
accessElement.addTextNode("You got logged!!");
}
catch(SOAPException e)
{
e.printStackTrace();
}*/
logMessage("request", context);
// System.out.println("Leaving LoggingHandler::handleRequest()");
return true;
}
public boolean handleResponse(MessageContext context) {
logMessage("response", context);
return true;
}
public boolean handleFault(MessageContext context) {
logMessage("fault", context);
return true;
}
private void logMessage(String method, MessageContext context) {
FileOutputStream fout = createFile();
if(fout==null) return;
LogOutputStream out = new LogOutputStream(fout, true);
try {
out.println("<" + method + ">");
//Uncomment this statement to log the SOAP messages.
out.println(logSOAPMessage(context));
out.println("</" + method + ">");
} catch (Exception ex) {
ex.printStackTrace(System.out);
throw new JAXRPCException("LoggingHandler: Unable to log the message in " + method + " - {" + ex.getClass().getName() + "}"
+ ex.getMessage());
} finally {
out.flush();
out.close();
}
}
private String logSOAPMessage(MessageContext context) {
StringBuffer stringBuffer = new StringBuffer();
SOAPMessageContext smc = (SOAPMessageContext) context;
SOAPMessage soapMessage = smc.getMessage();
/* try
{
SOAPBody soapBody = soapMessage.getSOAPBody();
NodeList list=soapBody.getElementsByTagName("inputZipFile");
}
catch(Exception e)
{
// ignore filtering
}*/
ByteArrayOutputStream bout= new ByteArrayOutputStream();
try {
soapMessage.writeTo(bout);
} catch(Exception e) {
e.printStackTrace(System.out);
}
stringBuffer.append(bout.toString() + "\n");
return stringBuffer.toString();
}
public FileOutputStream createFile() {
FileOutputStream fout = null;
try {
String logfile = System.getProperty("jplag.client.logfile");
if(logfile==null || logfile.length()==0) return null;
fout = new FileOutputStream(logfile, true); //append
} catch (IOException ex) {
ex.printStackTrace(System.out);
throw new JAXRPCException("Unable to initialize the log file: " +
ex.getClass().getName() + " - " + ex.getMessage());
}
return fout;
}
public void init(HandlerInfo arg) {
info=arg;
}
public QName[] getHeaders() {
return info.getHeaders();
}
}