use of org.apache.wss4j.common.cache.ReplayCacheFactory in project cxf by apache.
the class WSS4JUtils method getReplayCache.
/**
* Get a ReplayCache instance. It first checks to see whether caching has been explicitly
* enabled or disabled via the booleanKey argument. If it has been set to false then no
* replay caching is done (for this booleanKey). If it has not been specified, then caching
* is enabled only if we are not the initiator of the exchange. If it has been specified, then
* caching is enabled.
*
* It tries to get an instance of ReplayCache via the instanceKey argument from a
* contextual property, and failing that the message exchange. If it can't find any, then it
* defaults to using an EH-Cache instance and stores that on the message exchange.
*/
public static ReplayCache getReplayCache(SoapMessage message, String booleanKey, String instanceKey) {
boolean specified = false;
Object o = message.getContextualProperty(booleanKey);
if (o != null) {
if (!PropertyUtils.isTrue(o)) {
return null;
}
specified = true;
}
if (!specified && MessageUtils.isRequestor(message)) {
return null;
}
Endpoint ep = message.getExchange().getEndpoint();
if (ep != null && ep.getEndpointInfo() != null) {
EndpointInfo info = ep.getEndpointInfo();
synchronized (info) {
ReplayCache replayCache = (ReplayCache) message.getContextualProperty(instanceKey);
if (replayCache == null) {
replayCache = (ReplayCache) info.getProperty(instanceKey);
}
if (replayCache == null) {
String cacheKey = instanceKey;
if (info.getName() != null) {
int hashcode = info.getName().toString().hashCode();
if (hashcode < 0) {
cacheKey += hashcode;
} else {
cacheKey += "-" + hashcode;
}
}
URL configFile = SecurityUtils.getConfigFileURL(message, SecurityConstants.CACHE_CONFIG_FILE, "cxf-ehcache.xml");
if (ReplayCacheFactory.isEhCacheInstalled()) {
Bus bus = message.getExchange().getBus();
replayCache = new CXFEHCacheReplayCache(cacheKey, bus, configFile);
} else {
ReplayCacheFactory replayCacheFactory = ReplayCacheFactory.newInstance();
replayCache = replayCacheFactory.newReplayCache(cacheKey, configFile);
}
info.setProperty(instanceKey, replayCache);
}
return replayCache;
}
}
return null;
}
Aggregations