use of org.talend.esb.policy.samenabling.SamEnablingPolicy.AppliesToType in project tesb-rt-se by Talend.
the class SamEnablingInterceptorProvider method process.
static void process(Message message) {
AssertionInfoMap aim = message.get(AssertionInfoMap.class);
if (aim != null) {
Collection<AssertionInfo> ais = aim.get(SamEnablingPolicyBuilder.SAM_ENABLE);
if (ais != null) {
for (AssertionInfo ai : ais) {
if (ai.getAssertion() instanceof SamEnablingPolicy) {
SamEnablingPolicy vPolicy = (SamEnablingPolicy) ai.getAssertion();
AppliesToType appliesToType = vPolicy.getAppliesToType();
// Service service = ServiceModelUtil.getService(message
// .getExchange());
Exchange ex = message.getExchange();
Bus b = ex.getBus();
if (b.getFeatures().contains(EventFeature.class)) {
ai.setAsserted(true);
return;
}
Endpoint ep = ex.getEndpoint();
Bundle bundle = FrameworkUtil.getBundle(SamEnablingInterceptorProvider.class);
EventFeature eventFeature = null;
if (bundle != null) {
// OSGi
BundleContext context = FrameworkUtil.getBundle(SamEnablingInterceptorProvider.class).getBundleContext();
ServiceReference sref = context.getServiceReference(EventFeature.class.getName());
eventFeature = (EventFeature) context.getService(sref);
} else {
// non-OSGi
if (springContext == null) {
throw springContextException;
}
eventFeature = (EventFeature) springContext.getBean("eventFeature");
}
if (MessageUtils.isRequestor(message)) {
if (MessageUtils.isOutbound(message)) {
// REQ_OUT
if ((appliesToType == AppliesToType.consumer || appliesToType == AppliesToType.always)) {
Client cli = ex.get(Client.class);
if (!cli.getOutInterceptors().contains(WireTapOut.class)) {
eventFeature.initialize(cli, b);
List<Interceptor<? extends Message>> outInterceptors = cli.getOutInterceptors();
message.getInterceptorChain().add(outInterceptors);
outInterceptors.getClass();
}
}
} else {
// RESP_IN
if ((appliesToType == AppliesToType.consumer || appliesToType == AppliesToType.always)) {
Client cli = ex.get(Client.class);
eventFeature.initialize(cli, b);
}
}
} else {
ServerRegistry registry = b.getExtension(ServerRegistry.class);
List<Server> servers = registry.getServers();
if (MessageUtils.isOutbound(message)) {
// RESP_OUT
if ((appliesToType == AppliesToType.provider || appliesToType == AppliesToType.always)) {
for (Server sr : servers) {
EndpointInfo ei = sr.getEndpoint().getEndpointInfo();
if (null != ei && ei.getAddress().equals(ep.getEndpointInfo().getAddress())) {
eventFeature.initialize(sr, b);
}
}
}
} else {
// REQ_IN
if ((appliesToType == AppliesToType.provider || appliesToType == AppliesToType.always)) {
for (Server sr : servers) {
EndpointInfo ei = sr.getEndpoint().getEndpointInfo();
if (null != ei && ei.getAddress().equals(ep.getEndpointInfo().getAddress()) && (!sr.getEndpoint().getInInterceptors().contains(WireTapIn.class))) {
eventFeature.initialize(sr, b);
List<Interceptor<? extends Message>> inInterceptors = sr.getEndpoint().getInInterceptors();
message.getInterceptorChain().add(inInterceptors);
}
}
}
}
}
}
}
}
for (AssertionInfo ai : ais) {
ai.setAsserted(true);
}
}
}
Aggregations