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/04/18 20:40:03 UTC

svn commit: r530123 - in /webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp: Axis2HttpRequest.java HttpCoreNIOSender.java Util.java

Author: asankha
Date: Wed Apr 18 11:40:02 2007
New Revision: 530123

URL: http://svn.apache.org/viewvc?view=rev&rev=530123
Log:
Use MessageFormatters to write messages always and also to decide on the content type to resolve MTOM issue on responses

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

Modified: webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/Axis2HttpRequest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/Axis2HttpRequest.java?view=diff&rev=530123&r1=530122&r2=530123
==============================================================================
--- webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/Axis2HttpRequest.java (original)
+++ webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/Axis2HttpRequest.java Wed Apr 18 11:40:02 2007
@@ -23,6 +23,8 @@
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.transport.nhttp.util.PipeImpl;
 import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.axis2.transport.MessageFormatter;
+import org.apache.axis2.transport.TransportUtils;
 import org.apache.http.*;
 import org.apache.http.protocol.HTTP;
 import org.apache.http.entity.BasicHttpEntity;
@@ -57,6 +59,10 @@
     private MessageContext msgContext = null;
     /** the Pipe which facilitates the serialization output to be written to the channel */
     private PipeImpl pipe = null;
+    /** The Axis2 MessageFormatter that will ensure proper serialization as per Axis2 semantics */
+    MessageFormatter messageFormatter = null;
+    /** The OM Output format holder */
+    OMOutputFormat format = null;
 
     public Axis2HttpRequest(EndpointReference epr, HttpHost httpHost, MessageContext msgContext) {
         this.epr = epr;
@@ -85,7 +91,7 @@
      * Create and return a new HttpPost request to the destination EPR
      * @return the HttpRequest to be sent out
      */
-    public HttpRequest getRequest() {
+    public HttpRequest getRequest() throws IOException {
         HttpPost httpRequest = new HttpPost(epr.getAddress());
         httpRequest.setEntity(new BasicHttpEntity());
 
@@ -125,9 +131,16 @@
                 soapAction);
         }
 
+        format = Util.getOMOutputFormat(msgContext);
+        try {
+            messageFormatter = TransportUtils.getMessageFormatter(msgContext);
+        } catch (AxisFault axisFault) {
+            throw new IOException(
+                "Cannot find a suitable MessageFormatter : " + axisFault.getMessage());
+        }
         httpRequest.setHeader(
-            HTTP.CONTENT_TYPE, Util.getContentType(msgContext) +
-            "; charset=" + Util.getOMOutputFormat(msgContext).getCharSetEncoding());
+            HTTP.CONTENT_TYPE,
+            messageFormatter.getContentType(msgContext, format, msgContext.getSoapAction()));
 
         return httpRequest;
     }
@@ -150,16 +163,7 @@
 
         log.debug("start streaming outgoing http request");
         OutputStream out = Channels.newOutputStream(pipe.sink());
-        OMOutputFormat format = Util.getOMOutputFormat(msgContext);
-
-        try {
-            (msgContext.isDoingREST() ?
-                msgContext.getEnvelope().getBody().getFirstElement() : msgContext.getEnvelope())
-                .serializeAndConsume(out, format);
-        } catch (XMLStreamException e) {
-            handleException("Error serializing response message", e);
-        }
-
+        messageFormatter.writeTo(msgContext, format, out, false);
         try {
             out.flush();
             out.close();

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=530123&r1=530122&r2=530123
==============================================================================
--- 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 Wed Apr 18 11:40:02 2007
@@ -291,8 +291,10 @@
         HttpResponse response = worker.getResponse();
 
         OMOutputFormat format = Util.getOMOutputFormat(msgContext);
-
-        response.setHeader(HTTP.CONTENT_TYPE, Util.getContentType(msgContext) + "; charset=" + format.getCharSetEncoding());
+        MessageFormatter messageFormatter = TransportUtils.getMessageFormatter(msgContext);
+        response.setHeader(
+            HTTP.CONTENT_TYPE,
+            messageFormatter.getContentType(msgContext, format, msgContext.getSoapAction()));
 
         // set any transport headers
         Map transportHeaders = (Map) msgContext.getProperty(MessageContext.TRANSPORT_HEADERS);
@@ -309,9 +311,7 @@
         worker.getServiceHandler().commitResponse(worker.getConn(), response);
 
         OutputStream out = worker.getOutputStream();
-        format.setDoOptimize(msgContext.isDoingMTOM());
-        try {            
-            MessageFormatter messageFormatter = TransportUtils.getMessageFormatter(msgContext);
+        try {
             messageFormatter.writeTo(msgContext, format, out, false);
             out.close();
         } catch (IOException e) {

Modified: webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/Util.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/Util.java?view=diff&rev=530123&r1=530122&r2=530123
==============================================================================
--- webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/Util.java (original)
+++ webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/Util.java Wed Apr 18 11:40:02 2007
@@ -61,28 +61,19 @@
     public static OMOutputFormat getOMOutputFormat(MessageContext msgContext) {
 
         OMOutputFormat format = new OMOutputFormat();
-        String charSetEnc = (String) msgContext.getProperty(
-            Constants.Configuration.CHARACTER_SET_ENCODING);
-
-        if (charSetEnc == null) {
-            OperationContext opctx = msgContext.getOperationContext();
-            if (opctx != null) {
-                charSetEnc = (String) opctx.getProperty(
-                    Constants.Configuration.CHARACTER_SET_ENCODING);
-            }
-        }
-
-        // if the charset encoding is still not found use the default
-        if (charSetEnc == null) {
-            charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
-        }
-        format.setCharSetEncoding(charSetEnc);
-
         msgContext.setDoingMTOM(HTTPTransportUtils.doWriteMTOM(msgContext));
         msgContext.setDoingSwA(HTTPTransportUtils.doWriteSwA(msgContext));
         msgContext.setDoingREST(HTTPTransportUtils.isDoingREST(msgContext));        
         format.setSOAP11(msgContext.isSOAP11());
         format.setDoOptimize(msgContext.isDoingMTOM());
+        format.setDoingSWA(msgContext.isDoingSwA());
+
+        format.setCharSetEncoding(HTTPTransportUtils.getCharSetEncoding(msgContext));
+        Object mimeBoundaryProperty = msgContext.getProperty(Constants.Configuration.MIME_BOUNDARY);
+        if (mimeBoundaryProperty != null) {
+            format.setMimeBoundary((String) mimeBoundaryProperty);
+        }
+
         return format;
     }
 



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