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 2008/03/12 18:20:33 UTC
svn commit: r636429 - in /synapse/trunk/java/modules:
core/src/main/java/org/apache/synapse/config/xml/
core/src/main/java/org/apache/synapse/mediators/transform/
transports/src/main/java/org/apache/synapse/transport/nhttp/
Author: ruwan
Date: Wed Mar 12 10:20:27 2008
New Revision: 636429
URL: http://svn.apache.org/viewvc?rev=636429&view=rev
Log:
Fixing the issue SYNAPSE-250
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java?rev=636429&r1=636428&r2=636429&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java Wed Mar 12 10:20:27 2008
@@ -57,6 +57,7 @@
private static final String SOAP11 = "soap11";
private static final String SOAP12 = "soap12";
+ private static final String POX = "pox";
public Mediator createMediator(OMElement elem) {
@@ -68,7 +69,9 @@
faultMediator.setSoapVersion(FaultMediator.SOAP11);
} else if (SOAP12.equals(version.getAttributeValue())) {
faultMediator.setSoapVersion(FaultMediator.SOAP12);
- }else {
+ } else if (POX.equals(version.getAttributeValue())) {
+ faultMediator.setSoapVersion(FaultMediator.POX);
+ } else {
String msg = "Invalid SOAP version";
log.error(msg);
throw new SynapseException(msg);
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java?rev=636429&r1=636428&r2=636429&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java Wed Mar 12 10:20:27 2008
@@ -42,6 +42,8 @@
private static final String SOAP12 = "soap12";
+ private static final String POX = "pox";
+
public OMElement serializeMediator(OMElement parent, Mediator m) {
if (!(m instanceof FaultMediator)) {
@@ -55,9 +57,12 @@
if(mediator.getSoapVersion()==FaultMediator.SOAP11) {
fault.addAttribute(fac.createOMAttribute(
"version", nullNS, SOAP11));
- }else if(mediator.getSoapVersion()==FaultMediator.SOAP12) {
+ } else if(mediator.getSoapVersion()==FaultMediator.SOAP12) {
fault.addAttribute(fac.createOMAttribute(
"version", nullNS, SOAP12));
+ } else if(mediator.getSoapVersion()==FaultMediator.POX) {
+ fault.addAttribute(fac.createOMAttribute(
+ "version", nullNS, POX));
}
OMElement code = fac.createOMElement("code", synNS, fault);
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java?rev=636429&r1=636428&r2=636429&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java Wed Mar 12 10:20:27 2008
@@ -22,6 +22,7 @@
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMDocument;
import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
import org.apache.axiom.soap.*;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.RelatesTo;
@@ -53,6 +54,8 @@
public static final int SOAP11 = 1;
/** Make a SOAP 1.2 fault */
public static final int SOAP12 = 2;
+ /** Make a POX fault */
+ public static final int POX = 3;
/** Holds the SOAP version to be used to make the fault, if specified */
private int soapVersion;
@@ -90,25 +93,101 @@
return makeSOAPFault(synCtx, SOAP11, traceOrDebugOn, traceOn);
case SOAP12:
return makeSOAPFault(synCtx, SOAP12, traceOrDebugOn, traceOn);
+ case POX:
+ return makePOXFault(synCtx, traceOrDebugOn, traceOn);
default : {
- // determine from current message's SOAP envelope namespace
- SOAPEnvelope envelop = synCtx.getEnvelope();
- if (envelop != null) {
- if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(
- envelop.getNamespace().getNamespaceURI())) {
- soapVersion = SOAP12;
- return makeSOAPFault(synCtx, SOAP12, traceOrDebugOn, traceOn);
+ // if this is a POX or REST message then make a POX fault
+ if (synCtx.isDoingPOX() || synCtx.isDoingGET()) {
+
+ return makePOXFault(synCtx, traceOrDebugOn, traceOn);
+
+ } else {
+
+ // determine from current message's SOAP envelope namespace
+ SOAPEnvelope envelop = synCtx.getEnvelope();
+ if (envelop != null) {
+
+ if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(
+ envelop.getNamespace().getNamespaceURI())) {
+
+ soapVersion = SOAP12;
+ return makeSOAPFault(synCtx, SOAP12, traceOrDebugOn, traceOn);
+
+ } else {
+ soapVersion = SOAP11;
+ return makeSOAPFault(synCtx, SOAP11, traceOrDebugOn, traceOn);
+ }
+
} else {
- soapVersion = SOAP11;
+ // default to SOAP 11
return makeSOAPFault(synCtx, SOAP11, traceOrDebugOn, traceOn);
}
- } else {
- // default to SOAP 11
- return makeSOAPFault(synCtx, SOAP11, traceOrDebugOn, traceOn);
}
}
}
+ }
+
+ private boolean makePOXFault(MessageContext synCtx, boolean traceOrDebugOn, boolean traceOn) {
+
+ OMFactory fac = synCtx.getEnvelope().getOMFactory();
+ OMElement faultPayload = fac.createOMElement(new QName("Exception"));
+
+ if (faultDetail != null) {
+
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "Setting the fault detail : "
+ + faultDetail + " as athe POX Fault");
+ }
+
+ faultPayload.setText(faultDetail);
+
+ } else if (faultReasonValue != null) {
+
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "Setting the fault reason : "
+ + faultReasonValue + " as athe POX Fault");
+ }
+
+ faultPayload.setText(faultReasonValue);
+
+ } else if (faultReasonExpr != null) {
+
+ String faultReason = faultReasonExpr.getStringValue(synCtx);
+ faultPayload.setText(faultReason);
+
+ if (traceOrDebugOn) {
+ traceOrDebug(traceOn, "Setting the fault detail : "
+ + faultDetail + " as athe POX Fault");
+ }
+ }
+
+ SOAPBody body = synCtx.getEnvelope().getBody();
+ if (body != null) {
+
+ if (body.getFirstElement() != null) {
+ body.getFirstElement().detach();
+ }
+
+ body.addChild(faultPayload);
+ }
+
+ synCtx.setFaultResponse(true);
+ ((Axis2MessageContext) synCtx).getAxis2MessageContext().setProcessingFault(true);
+
+ if (traceOrDebugOn) {
+ String msg =
+ "Original SOAP Message : " + synCtx.getEnvelope().toString() +
+ "POXFault Message created : " + faultPayload.toString();
+ if (traceOn && trace.isTraceEnabled()) {
+ trace.trace(msg);
+ }
+ if (log.isTraceEnabled()) {
+ log.trace(msg);
+ }
+ }
+
+ return true;
}
/**
Modified: synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java?rev=636429&r1=636428&r2=636429&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java (original)
+++ synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java Wed Mar 12 10:20:27 2008
@@ -333,7 +333,7 @@
messageFormatter.getContentType(msgContext, format, msgContext.getSoapAction()));
// return http 500 when a SOAP fault is returned
- if (msgContext.getEnvelope().getBody().hasFault()) {
+ if (msgContext.getEnvelope().getBody().hasFault() || msgContext.isProcessingFault()) {
response.setStatusCode(HttpStatus.SC_INTERNAL_SERVER_ERROR);
}