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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]