1. The transport handler can probably be replaced in the client deployment descriptor. You'd be changing a line in a .wsdd file that looked like this: <transport name="SimpleHTTP" pivot="HTTPSender">
2. It looks like you might be able to swap in your own SocketFactory by setting the Axis property axis.socketFactory to refer to your class. That factory could produce sockets which provided a special logging or dumping stream when you called getOutputStream() on them. Perhaps that property could be set in the client deployment descriptor also or in some axis.properties file inside axis.jar. Jeff On 6/19/07, Walker, Jeff <[EMAIL PROTECTED]> wrote:
So, In case anybody needs this in the future, here's what little more I have found out. Axis 1.x pretty much seems to run as a bunch of handlers. The service specific handlers run first, followed by the global request handlers, then the JAX-RPC handlers, then finally the transport handler. (In a nutshell, the transport handler sends the data out the socket. Whatever handler you write will fire after the global request handlers, and you can write more than one. Then, at the end, the transport handler fires. I am talking about the clientside, it is reversed when you are on the serverside. The transport handler for http seems to be HttpSender. Deep in that class, you can see the HTTP headers being assembled into a StringBuffer. It is spread over many lines in the writeToSocket(..) method. Right at the end of that method, there is a line that will enable you to drop the headers to a log file, if debugging for the HttpSender class is turned on. If you are using log4j, you can turn on debugging for that class in your log4j properties file using: log4j.logger.org.apache.axis.transport.http.HTTPSender=debug Now, that dumps both the outgoing HTTP headers used in your request, and when the response comes back, it also dumps out the HTTP headers found in the response. I have managed so far to only programmatically dump out the mimeheaders 'Content-Id' and 'Content-Type'. The others elude me. I did this by creating a clientside handler, see below: public class ClientSideHandler extends GenericHandler { ... public boolean handleRequest(MessageContext context) { SOAPMessageContext smContext = (SOAPMessageContext)context; SOAPMessage sMessage = smContext.getMessage(); SOAPPart sPart = sMessage.getSOAPPart(); java.util.Iterator it = sPart.getAllMimeHeaders(); while (it.hasNext()) { javax.xml.soap.MimeHeader header = (javax.xml.soap.MimeHeader)it.next(); System.out.println("Header name = " + header.getName() + ", and value = " + header.getValue()); } return true; } .. } The only way I can think of to programmatically get at all of the HTTP headers in a request sent from a client, is to sub-class the transport handler HttpSender, and override the writeToSocket() method and dump out the header stringbuffer. I'd have to find a way to register my new transport handler instead of HttpSender, too. That might prove too difficult without rebuilding Axis. Any other suggestions on how to approach this would be greatly appreciated. Thanks, -jeff --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]