Package org.opensaml.soap.soap11.profile.impl

# Class AddSOAPFault

java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
org.opensaml.profile.action.AbstractProfileAction
org.opensaml.soap.soap11.profile.impl.AddSOAPFault

All Implemented Interfaces:
  `Component`, `DestructableComponent`, `InitializableComponent`, `ProfileAction`

public class AddSOAPFault extends AbstractProfileAction
Action that resolves or builds a SOAP 1.1 `Fault` object, and stores it in the outbound message context.

An attempt will first be made to resolve a pre-existing fault instance from the `ProfileRequestContext`, via an optionally configured lookup strategy. This is to accommodate SOAP-aware components which may choose to emit a specific, locally determined fault. The default strategy is `AddSOAPFault.MessageContextFaultStrategy`.

If no context fault instance is resolved, a new instance will be built using strategy functions which lookup the `FaultCode` `QName` and the `FaultString` `String` values. If no value is produced, the former defaults to `FaultCode.SERVER`. The latter defaults to `null`.

Event:
  `EventIds.PROCEED_EVENT_ID`

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static class`
`AddSOAPFault.FaultCodeMappingFunction`
A default method to map event IDs to faultcode QName based on `EventContext`.
`static class`
`AddSOAPFault.MessageContextFaultStrategy`
Default strategy which returns a `Fault` instance already registered in the current request context.

## Field Summary

Fields
Modifier and Type
Field
Description
`private Function<ProfileRequestContext,Fault>`
`contextFaultStrategy`
Strategy for resolving a fault instance directly from the request context.
`private QName`
`defaultFaultCode`
Default fault codes to insert.
`private boolean`
`detailedErrors`
Whether to include detailed status information.
`private Predicate<ProfileRequestContext>`
`detailedErrorsCondition`
Predicate determining whether detailed error information is permitted.
`private Function<ProfileRequestContext,QName>`
`faultCodeLookupStrategy`
Optional method to obtain fault code.
`private String`
`faultString`
A default fault string to include.
`private Function<ProfileRequestContext,String>`
`faultStringLookupStrategy`
Optional method to obtain a fault string.
`private org.slf4j.Logger`
`log`
Class logger.
`private boolean`
`nullifyOutboundMessage`
Whether to set the outbound message context's message property to null.

## Constructor Summary

Constructors
Constructor
Description
`AddSOAPFault()`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`private void`
`buildFaultString(Fault fault, String message)`
Build and attach `FaultString` element.
`private Fault`
`buildNewMappedFault(ProfileRequestContext profileRequestContext)`
Build and return a new `Fault` based on configured mapping strategy.
`protected void`
`doExecute(ProfileRequestContext profileRequestContext)`
Performs this action.
`protected boolean`
`doPreExecute(ProfileRequestContext profileRequestContext)`
Called prior to execution, actions may override this method to perform pre-processing for a request.
`private Fault`
`resolveContextFault(ProfileRequestContext profileRequestContext)`
Resolve a `Fault` instance stored in the `ProfileRequestContext`.
`void`
`setContextFaultStrategy(Function<ProfileRequestContext,Fault> strategy)`
Set the optional strategy used to resolve a `Fault` instance directly from the request context.
`void`
`setDetailedErrorsCondition(Predicate<ProfileRequestContext> condition)`
Set the predicate used to determine the detailed errors condition.
`void`
`setFaultCode(QName code)`
Set the default faultcode to insert.
`void`
`setFaultCodeLookupStrategy(Function<ProfileRequestContext,QName> strategy)`
Set the optional strategy used to obtain a faultcode to include.
`void`
`setFaultString(String message)`
Set a default faultstring to use in the event that error detail is off, or no specific message is obtained.
`void`
`setFaultStringLookupStrategy(Function<ProfileRequestContext,String> strategy)`
Set the optional strategy used to obtain a faultstring to include.
`void`
`setNullifyOutboundMessage(boolean flag)`
Set the flag indicating whether to set the outbound message context's message property to null.

### Methods inherited from class org.opensaml.profile.action.AbstractProfileAction

`doPostExecute, doPostExecute, ensureHttpServletRequest, ensureHttpServletResponse, execute, getHttpServletRequest, getHttpServletRequestSupplier, getHttpServletResponse, getHttpServletResponseSupplier, getLogPrefix, isPreExecuteCalled, setHttpServletRequestSupplier, setHttpServletResponseSupplier`

### Methods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent

`checkComponentActive, checkSetterPreconditions, destroy, doDestroy, doInitialize, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, initialize, isDestroyed, isInitialized`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface net.shibboleth.shared.component.InitializableComponent

`initialize, isInitialized`

## Field Details

### log

@Nonnull private org.slf4j.Logger log
Class logger.

### contextFaultStrategy

@Nullable private Function<ProfileRequestContext,Fault> contextFaultStrategy
Strategy for resolving a fault instance directly from the request context.

### detailedErrorsCondition

@Nonnull private Predicate<ProfileRequestContext> detailedErrorsCondition
Predicate determining whether detailed error information is permitted.

### faultCodeLookupStrategy

@Nullable private Function<ProfileRequestContext,QName> faultCodeLookupStrategy
Optional method to obtain fault code.

### faultStringLookupStrategy

@Nullable private Function<ProfileRequestContext,String> faultStringLookupStrategy
Optional method to obtain a fault string.

### defaultFaultCode

@Nonnull private QName defaultFaultCode
Default fault codes to insert.

### faultString

@Nullable private String faultString
A default fault string to include.

### detailedErrors

private boolean detailedErrors
Whether to include detailed status information.

### nullifyOutboundMessage

private boolean nullifyOutboundMessage
Whether to set the outbound message context's message property to null.

## Constructor Details

### AddSOAPFault

public AddSOAPFault()
Constructor.

## Method Details

### setNullifyOutboundMessage

public void setNullifyOutboundMessage(boolean flag)
Set the flag indicating whether to set the outbound message context's message property to null.

Default is: `true`

Parameters:
  `flag` - true if should nullify, false if not

### setContextFaultStrategy

public void setContextFaultStrategy(@Nullable Function<ProfileRequestContext,Fault> strategy)
Set the optional strategy used to resolve a `Fault` instance directly from the request context.

Parameters:
  `strategy` - strategy used to resolve the fault instance

### setDetailedErrorsCondition

public void setDetailedErrorsCondition(@Nonnull Predicate<ProfileRequestContext> condition)
Set the predicate used to determine the detailed errors condition.

Parameters:
  `condition` - predicate for detailed errors condition

### setFaultCodeLookupStrategy

public void setFaultCodeLookupStrategy(@Nullable Function<ProfileRequestContext,QName> strategy)
Set the optional strategy used to obtain a faultcode to include.

Parameters:
  `strategy` - strategy used to obtain faultcode

### setFaultStringLookupStrategy

public void setFaultStringLookupStrategy(@Nullable Function<ProfileRequestContext,String> strategy)
Set the optional strategy used to obtain a faultstring to include.

Parameters:
  `strategy` - strategy used to obtain a fault string

### setFaultCode

public void setFaultCode(@Nonnull QName code)
Set the default faultcode to insert.

Parameters:
  `code` - faultcode

### setFaultString

public void setFaultString(@Nullable String message)
Set a default faultstring to use in the event that error detail is off, or no specific message is obtained.

Parameters:
  `message` - default faultstring

### doPreExecute

protected boolean doPreExecute(@Nonnull ProfileRequestContext profileRequestContext)
Called prior to execution, actions may override this method to perform pre-processing for a request.

If false is returned, execution will not proceed, and the action should attach an `EventContext` to the context tree to signal how to continue with overall workflow processing.

If returning successfully, the last step should be to return the result of the superclass version of this method.

Overrides:
  `doPreExecute` in class `AbstractProfileAction`
Parameters:
  `profileRequestContext` - the current IdP profile request context
Returns:
  true iff execution should proceed

### doExecute

protected void doExecute(@Nonnull ProfileRequestContext profileRequestContext)
Performs this action. Actions must override this method to perform their work.

Overrides:
  `doExecute` in class `AbstractProfileAction`
Parameters:
  `profileRequestContext` - the current IdP profile request context

### resolveContextFault

@Nullable private Fault resolveContextFault(ProfileRequestContext profileRequestContext)
Resolve a `Fault` instance stored in the `ProfileRequestContext`.

Parameters:
  `profileRequestContext` - the current request context
Returns:
  the fault instance resolved from the request context, or null

### buildNewMappedFault

@Nonnull private Fault buildNewMappedFault(ProfileRequestContext profileRequestContext)
Build and return a new `Fault` based on configured mapping strategy.

Parameters:
  `profileRequestContext` - the current request context
Returns:
  the new fault

### buildFaultString

private void buildFaultString(@Nonnull Fault fault, @Nonnull @NotEmpty String message)
Build and attach `FaultString` element.

Parameters:
  `fault` - the element to attach to
  `message` - the message to set