You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ru...@apache.org on 2010/02/25 09:19:38 UTC
svn commit: r916176 -
/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
Author: ruwan
Date: Thu Feb 25 08:19:37 2010
New Revision: 916176
URL: http://svn.apache.org/viewvc?rev=916176&view=rev
Log:
Ability to send responses with custom status codes, this is required to handle UT for POX
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java?rev=916176&r1=916175&r2=916176&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java Thu Feb 25 08:19:37 2010
@@ -192,6 +192,7 @@
/**
* Process the incoming request
*/
+ @SuppressWarnings({"unchecked"})
public void run() {
String method = request.getRequestLine().getMethod().toUpperCase();
@@ -266,31 +267,49 @@
// dual channel invocation. This is becasue we need to ACK to the request once the request
// is received to synapse. Otherwise we will not be able to support the single channel
// invocation within the actual service and synapse for a dual channel request from the
- // client. This condition is a bit complex but cannot simplify any further.
- if (msgContext != null && msgContext.getOperationContext() != null &&
- (!msgContext.getOperationContext().getAxisOperation().isControlOperation() ||
- msgContext.isPropertyTrue(NhttpConstants.FORCE_SC_ACCEPTED))) {
-
- String respWritten = (String)
- msgContext.getOperationContext().getProperty(Constants.RESPONSE_WRITTEN);
- boolean respWillFollow
- = !Constants.VALUE_TRUE.equals(respWritten) && !"SKIP".equals(respWritten);
+ // client.
+ if (isAckRequired()) {
+ String respWritten = "";
+ if (msgContext.getOperationContext() != null) {
+ respWritten = (String) msgContext.getOperationContext().getProperty(
+ Constants.RESPONSE_WRITTEN);
+ }
+ boolean respWillFollow = !Constants.VALUE_TRUE.equals(respWritten)
+ && !"SKIP".equals(respWritten);
boolean acked = (((RequestResponseTransport) msgContext.getProperty(
RequestResponseTransport.TRANSPORT_CONTROL)).getStatus()
== RequestResponseTransport.RequestResponseTransportStatus.ACKED);
boolean forced = msgContext.isPropertyTrue(NhttpConstants.FORCE_SC_ACCEPTED);
+ boolean nioAck = msgContext.isPropertyTrue("NIO-ACK-Requested", false);
- if (respWillFollow || acked || forced) {
+ if (respWillFollow || acked || forced || nioAck) {
- if (log.isDebugEnabled()) {
- log.debug("Sending 202 Accepted response for MessageID : " +
- msgContext.getMessageID() +
- " response written : " + respWritten +
- " response will follow : " + respWillFollow +
- " acked : " + acked + " forced ack : " + forced);
+ if (!nioAck) {
+ if (log.isDebugEnabled()) {
+ log.debug("Sending 202 Accepted response for MessageID : " +
+ msgContext.getMessageID() +
+ " response written : " + respWritten +
+ " response will follow : " + respWillFollow +
+ " acked : " + acked + " forced ack : " + forced);
+ }
+ response.setStatusCode(HttpStatus.SC_ACCEPTED);
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Sending ACK response with status "
+ + msgContext.getProperty(NhttpConstants.HTTP_SC)
+ + ", for MessageID : " + msgContext.getMessageID());
+ }
+ response.setStatusCode(Integer.parseInt(
+ msgContext.getProperty(NhttpConstants.HTTP_SC).toString()));
+ Map<String, String> responseHeaders = (Map<String, String>)
+ msgContext.getProperty(MessageContext.TRANSPORT_HEADERS);
+ if (responseHeaders != null) {
+ for (String headerName : responseHeaders.keySet()) {
+ response.addHeader(headerName, responseHeaders.get(headerName));
+ }
+ }
}
- response.setStatusCode(HttpStatus.SC_ACCEPTED);
if (metrics != null) {
metrics.incrementMessagesSent();
}
@@ -340,6 +359,23 @@
}
}
+ private boolean isAckRequired() {
+
+ // This condition is a bit complex but cannot simplify any further.
+ if (msgContext != null) {
+ if (msgContext.getOperationContext() != null &&
+ (!msgContext.getOperationContext().getAxisOperation().isControlOperation() ||
+ msgContext.isPropertyTrue(NhttpConstants.FORCE_SC_ACCEPTED))) {
+
+ return true;
+ } else if (msgContext.isPropertyTrue("NIO-ACK-Requested", false)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
/**
*
*/