Author: klape
Date: 2013-03-04 09:57:40 -0500 (Mon, 04 Mar 2013)
New Revision: 17378
Modified:
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/FailedAuthenticationException.java
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/FailedCheckException.java
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/InvalidSecurityHeaderException.java
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/InvalidSecurityTokenException.java
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/SecurityTokenUnavailableException.java
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/UnsupportedAlgorithmException.java
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/UnsupportedSecurityTokenException.java
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/WSSecurityException.java
Log:
Various improvements to WS-Security error handling:
- Fix JBPAPP-10468: WSSecurityException conversion to SOAP 1.2 fault fails
- Marking several exceptions as external errors (e.g. InvalidSecurityTokenException)
- This will make the SOAP 1.2 fault code be "Sender" rather than
"Receiver"
- Printing the stack trace of the original exception before converstion to SOAP fault
- The stack trace is truncated at the HTTPServlet frame to reduce redundancy
- Stop redundant namespace declarations from being added to the SOAP fault envelope
Modified:
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java 2013-03-04
09:19:04 UTC (rev 17377)
+++
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java 2013-03-04
14:57:40 UTC (rev 17378)
@@ -800,7 +800,7 @@
public void writeElement(Writer writer)
{
- new DOMWriter(writer).print(this);
+ new DOMWriter(writer).setCompleteNamespaces(false).print(this);
}
private static SOAPElement getChildElement(SOAPElement element, QName name)
Modified:
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java 2013-03-04
09:19:04 UTC (rev 17377)
+++
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java 2013-03-04
14:57:40 UTC (rev 17378)
@@ -25,16 +25,20 @@
import java.util.List;
import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.WebServiceException;
+import javax.xml.ws.soap.SOAPFaultException;
+import javax.xml.ws.soap.SOAPBinding;
import org.jboss.logging.Logger;
import org.jboss.ws.core.CommonMessageContext;
import org.jboss.ws.core.CommonSOAPFaultException;
import org.jboss.ws.core.soap.MessageContextAssociation;
import org.jboss.ws.core.soap.SOAPMessageImpl;
+import org.jboss.ws.core.soap.SOAPFaultImpl;
import org.jboss.ws.extensions.security.exception.InvalidSecurityHeaderException;
import org.jboss.ws.extensions.security.exception.WSSecurityException;
import org.jboss.ws.extensions.security.nonce.DefaultNonceFactory;
@@ -263,21 +267,65 @@
return newList;
}
- private CommonSOAPFaultException convertToFault(WSSecurityException e)
+ private RuntimeException convertToFault(WSSecurityException e) throws SOAPException
{
return convertToFault(e, VERBOSE_EXCEPTION_REPORTING);
}
- private CommonSOAPFaultException convertToFault(WSSecurityException e, boolean
verbose)
+ private RuntimeException convertToFault(WSSecurityException e, boolean verbose) throws
SOAPException
{
- if (verbose) {
- return new CommonSOAPFaultException(e.getFaultCode(), e.getFaultString());
- } else {
- QName faultCode = new QName(Constants.JBOSS_WSSE_NS, "GenericError",
Constants.JBOSS_WSSE_PREFIX);
- return new CommonSOAPFaultException(faultCode, "A WS-Security error
occurred.");
+ //Try to reduce redundant stack trace elements printed to log
+ chopStackTrace(e);
+ log.error("Original WSSecurityException: ", e);
+
+ if(isSOAP12())
+ {
+ SOAPFaultImpl fault = new SOAPFaultImpl(
+ org.jboss.ws.Constants.PREFIX_ENV,
+ org.jboss.ws.Constants.NS_SOAP12_ENV
+ );
+
+ if(e.isInternalError())
+ fault.setFaultCode(SOAPConstants.SOAP_RECEIVER_FAULT);
+ else
+ fault.setFaultCode(SOAPConstants.SOAP_SENDER_FAULT);
+
+ fault.appendFaultSubcode(e.getFaultCode());
+ fault.setFaultString(e.getFaultString());
+
+ return new SOAPFaultException(fault);
}
+ else
+ {
+ if (verbose)
+ {
+ return new CommonSOAPFaultException(e.getFaultCode(), e.getFaultString());
+ }
+ else
+ {
+ QName faultCode = new QName(Constants.JBOSS_WSSE_NS,
"GenericError", Constants.JBOSS_WSSE_PREFIX);
+ return new CommonSOAPFaultException(faultCode, "A WS-Security error
occurred.");
+ }
+ }
}
+ private void chopStackTrace(Exception e)
+ {
+ StackTraceElement[] original = e.getStackTrace();
+ int cutOffElement = 0;
+ for(; cutOffElement < original.length; cutOffElement++)
+ {
+ StackTraceElement elem = original[cutOffElement];
+ String className = elem.getClassName();
+ if("javax.servlet.http.HttpServlet".equals(className))
+ {
+ StackTraceElement[] newSte = new StackTraceElement[cutOffElement + 1];
+ System.arraycopy(original, 0, newSte, 0, cutOffElement + 1);
+ e.setStackTrace(newSte);
+ }
+ }
+ }
+
private List<RequireOperation> buildRequireOperations(Config operationConfig,
boolean fault)
{
if (operationConfig == null)
@@ -368,4 +416,20 @@
return requires != null && (!fault || requires.includesFaults());
}
+
+ private static boolean isSOAP12()
+ {
+ CommonMessageContext msgContext = MessageContextAssociation.peekMessageContext();
+ if (msgContext != null)
+ {
+ EndpointMetaData emd = msgContext.getEndpointMetaData();
+ String bindingId = emd.getBindingId();
+ if (SOAPBinding.SOAP12HTTP_BINDING.equals(bindingId) ||
SOAPBinding.SOAP12HTTP_MTOM_BINDING.equals(bindingId))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
}
Modified:
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/FailedAuthenticationException.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/FailedAuthenticationException.java 2013-03-04
09:19:04 UTC (rev 17377)
+++
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/FailedAuthenticationException.java 2013-03-04
14:57:40 UTC (rev 17378)
@@ -39,6 +39,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public FailedAuthenticationException(Throwable cause)
@@ -46,6 +47,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public FailedAuthenticationException(String message)
@@ -53,6 +55,7 @@
super(message);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
public FailedAuthenticationException(String message, Throwable cause)
@@ -60,5 +63,6 @@
super(message, cause);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
}
Modified:
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/FailedCheckException.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/FailedCheckException.java 2013-03-04
09:19:04 UTC (rev 17377)
+++
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/FailedCheckException.java 2013-03-04
14:57:40 UTC (rev 17378)
@@ -39,6 +39,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public FailedCheckException(Throwable cause)
@@ -46,6 +47,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public FailedCheckException(String message)
@@ -60,5 +62,6 @@
super(message, cause);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
}
Modified:
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/InvalidSecurityHeaderException.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/InvalidSecurityHeaderException.java 2013-03-04
09:19:04 UTC (rev 17377)
+++
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/InvalidSecurityHeaderException.java 2013-03-04
14:57:40 UTC (rev 17378)
@@ -39,6 +39,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public InvalidSecurityHeaderException(Throwable cause)
@@ -46,6 +47,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public InvalidSecurityHeaderException(String message)
@@ -53,6 +55,7 @@
super(message);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
public InvalidSecurityHeaderException(String message, Throwable cause)
@@ -60,5 +63,6 @@
super(message, cause);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
}
Modified:
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/InvalidSecurityTokenException.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/InvalidSecurityTokenException.java 2013-03-04
09:19:04 UTC (rev 17377)
+++
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/InvalidSecurityTokenException.java 2013-03-04
14:57:40 UTC (rev 17378)
@@ -39,6 +39,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public InvalidSecurityTokenException(Throwable cause)
@@ -46,6 +47,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public InvalidSecurityTokenException(String message)
@@ -53,6 +55,7 @@
super(message);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
public InvalidSecurityTokenException(String message, Throwable cause)
@@ -60,5 +63,6 @@
super(message, cause);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
}
Modified:
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/SecurityTokenUnavailableException.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/SecurityTokenUnavailableException.java 2013-03-04
09:19:04 UTC (rev 17377)
+++
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/SecurityTokenUnavailableException.java 2013-03-04
14:57:40 UTC (rev 17378)
@@ -39,6 +39,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public SecurityTokenUnavailableException(Throwable cause)
@@ -46,6 +47,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public SecurityTokenUnavailableException(String message)
@@ -53,6 +55,7 @@
super(message);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
public SecurityTokenUnavailableException(String message, Throwable cause)
@@ -60,5 +63,6 @@
super(message, cause);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
}
Modified:
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/UnsupportedAlgorithmException.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/UnsupportedAlgorithmException.java 2013-03-04
09:19:04 UTC (rev 17377)
+++
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/UnsupportedAlgorithmException.java 2013-03-04
14:57:40 UTC (rev 17378)
@@ -39,6 +39,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public UnsupportedAlgorithmException(Throwable cause)
@@ -46,6 +47,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public UnsupportedAlgorithmException(String message)
@@ -53,6 +55,7 @@
super(message);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
public UnsupportedAlgorithmException(String message, Throwable cause)
@@ -60,5 +63,6 @@
super(message, cause);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
}
Modified:
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/UnsupportedSecurityTokenException.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/UnsupportedSecurityTokenException.java 2013-03-04
09:19:04 UTC (rev 17377)
+++
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/UnsupportedSecurityTokenException.java 2013-03-04
14:57:40 UTC (rev 17378)
@@ -39,6 +39,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public UnsupportedSecurityTokenException(Throwable cause)
@@ -46,6 +47,7 @@
super(faultString);
setFaultCode(faultCode);
setFaultString(faultString);
+ internal = false;
}
public UnsupportedSecurityTokenException(String message)
@@ -53,6 +55,7 @@
super(message);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
public UnsupportedSecurityTokenException(String message, Throwable cause)
@@ -60,5 +63,6 @@
super(message, cause);
setFaultCode(faultCode);
setFaultString(message);
+ internal = false;
}
}
Modified:
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/WSSecurityException.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/WSSecurityException.java 2013-03-04
09:19:04 UTC (rev 17377)
+++
stack/native/branches/jbossws-native-3.1.2/modules/core/src/main/java/org/jboss/ws/extensions/security/exception/WSSecurityException.java 2013-03-04
14:57:40 UTC (rev 17378)
@@ -30,7 +30,7 @@
*/
public class WSSecurityException extends Exception
{
- private boolean internal = false;
+ protected boolean internal = false;
private QName faultCode = new QName(Constants.JBOSS_WSSE_NS,
"InternalError", Constants.JBOSS_WSSE_PREFIX);