You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by as...@apache.org on 2007/03/05 10:02:14 UTC

svn commit: r514611 - in /webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp: ClientHandler.java ClientWorker.java HttpCoreNIOSender.java

Author: asankha
Date: Mon Mar  5 01:02:13 2007
New Revision: 514611

URL: http://svn.apache.org/viewvc?view=rev&rev=514611
Log:
update NIO transport to read and write back custom http headers on the responses

Modified:
    webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java
    webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientWorker.java
    webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java

Modified: webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java?view=diff&rev=514611&r1=514610&r2=514611
==============================================================================
--- webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java (original)
+++ webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java Mon Mar  5 01:02:13 2007
@@ -312,7 +312,7 @@
             context.setAttribute(HttpContext.HTTP_RESPONSE, response);
 
             workerPool.execute(
-                new ClientWorker(cfgCtx, Channels.newInputStream(responsePipe.source()),
+                new ClientWorker(cfgCtx, Channels.newInputStream(responsePipe.source()), response,
                     (MessageContext) context.getAttribute(OUTGOING_MESSAGE_CONTEXT)));
 
         } catch (IOException e) {

Modified: webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientWorker.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientWorker.java?view=diff&rev=514611&r1=514610&r2=514611
==============================================================================
--- webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientWorker.java (original)
+++ webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientWorker.java Mon Mar  5 01:02:13 2007
@@ -27,9 +27,13 @@
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.http.HttpResponse;
+import org.apache.http.Header;
 
 import java.io.InputStream;
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Performs processing of the HTTP response received for our outgoing request. An instance of this
@@ -47,6 +51,8 @@
     private InputStream in = null;
     /** the original request message context */
     private MessageContext outMsgCtx = null;
+    /** the HttpResponse received */
+    private HttpResponse response = null;
 
     /**
      * Create the thread that would process the response message received for the outgoing message
@@ -55,11 +61,13 @@
      * @param in the InputStream to read the body of the response message received
      * @param outMsgCtx the original outgoing message context (i.e. corresponding request)
      */
-    public ClientWorker(ConfigurationContext cfgCtx, InputStream in, MessageContext outMsgCtx) {
+    public ClientWorker(ConfigurationContext cfgCtx, InputStream in,
+        HttpResponse response, MessageContext outMsgCtx) {
 
         this.cfgCtx = cfgCtx;
         this.in = in;
         this.outMsgCtx = outMsgCtx;
+        this.response = response;
 
         try {
             responseMsgCtx = outMsgCtx.getOperationContext().
@@ -78,6 +86,17 @@
                 .getProperty(MessageContext.TRANSPORT_IN));
             responseMsgCtx.setTransportIn(outMsgCtx.getTransportIn());
             responseMsgCtx.setTransportOut(outMsgCtx.getTransportOut());
+
+            // set any transport headers received
+            Header[] headers = response.getAllHeaders();
+            if (headers != null && headers.length > 0) {
+                Map headerMap = new HashMap();
+                for (int i=0; i<headers.length; i++) {
+                    Header header = headers[i];
+                    headerMap.put(header.getName(), header.getValue());
+                }
+                responseMsgCtx.setProperty(MessageContext.TRANSPORT_HEADERS, headerMap);
+            }
 
             responseMsgCtx.setOperationContext(outMsgCtx.getOperationContext());
             responseMsgCtx.setConfigurationContext(outMsgCtx.getConfigurationContext());

Modified: webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java?view=diff&rev=514611&r1=514610&r2=514611
==============================================================================
--- webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java (original)
+++ webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java Mon Mar  5 01:02:13 2007
@@ -52,6 +52,8 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.InetSocketAddress;
+import java.util.Map;
+import java.util.Iterator;
 
 /**
  * NIO transport sender for Axis2 based on HttpCore and NIO extensions
@@ -246,6 +248,18 @@
 
         response.setHeader(HTTP.CONTENT_TYPE, Util.getContentType(msgContext) + "; charset=" + format.getCharSetEncoding());
 
+        // set any transport headers
+        Map transportHeaders = (Map) msgContext.getProperty(MessageContext.TRANSPORT_HEADERS);
+        if (transportHeaders != null && !transportHeaders.values().isEmpty()) {
+            Iterator iter = transportHeaders.keySet().iterator();
+            while (iter.hasNext()) {
+                Object header = iter.next();
+                Object value = transportHeaders.get(header);
+                if (value != null && header instanceof String && value instanceof String) {
+                    response.setHeader((String) header, (String) value);
+                }
+            }
+        }
         worker.getServiceHandler().commitResponse(worker.getConn(), response);
 
         OutputStream out = worker.getOutputStream();



---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org