use of org.mule.runtime.core.api.MuleContext in project mule by mulesoft.
the class MessagingExceptionResolver method resolve.
/**
* Resolves a new {@link MessagingException} with the real cause of the problem based on the content of an Incoming
* {@link MessagingException} with a chain of causes inside it and the current event that the exception is carrying.
* <p>
* This method will pick the FIRST cause exception that has a mule or extension KNOWN error as the real cause, if there is not
* an exception in the causes that match with an Known error type then this method will try to find the error that the current
* {@link Event} is carrying.
* <p>
* When there are multiple exceptions that contains the same root error type, then this method will wrap the one that has
* highest position in the causes list
*
* @return a {@link MessagingException} with the proper {@link Error} associated to it's {@link CoreEvent}
*/
public MessagingException resolve(final MessagingException me, MuleContext context) {
ErrorTypeLocator locator = ((PrivilegedMuleContext) context).getErrorTypeLocator();
Optional<Pair<Throwable, ErrorType>> rootCause = findRoot(component, me, locator);
if (!rootCause.isPresent()) {
return updateCurrent(me, component, context);
}
Throwable root = rootCause.get().getFirst();
ErrorType rootErrorType = rootCause.get().getSecond();
Component failingComponent = getFailingProcessor(me, root).orElse(component);
ErrorType errorType = getErrorMappings(component).stream().filter(m -> m.match(rootErrorType)).findFirst().map(ErrorMapping::getTarget).orElse(rootErrorType);
Error error = ErrorBuilder.builder(getMessagingExceptionCause(root)).errorType(errorType).build();
CoreEvent event = CoreEvent.builder(me.getEvent()).error(error).build();
MessagingException result;
if (root instanceof MessagingException) {
((MessagingException) root).setProcessedEvent(event);
result = ((MessagingException) root);
} else {
result = me instanceof FlowExecutionException ? new FlowExecutionException(event, root, failingComponent) : new MessagingException(event, root, failingComponent);
}
if (me.getInfo().containsKey(INFO_ALREADY_LOGGED_KEY)) {
result.addInfo(INFO_ALREADY_LOGGED_KEY, me.getInfo().get(INFO_ALREADY_LOGGED_KEY));
}
return enrich(result, failingComponent, event, context);
}
use of org.mule.runtime.core.api.MuleContext in project mule by mulesoft.
the class DeploymentMuleContextListenerFactoryTestCase method createsContextListener.
@Test
public void createsContextListener() throws Exception {
MuleContextListener contextListener = factory.create(APP_NAME);
MuleContext context = mock(MuleContext.class);
contextListener.onCreation(context);
verify(deploymentListener).onArtifactCreated(eq(APP_NAME), any(CustomizationService.class));
}
use of org.mule.runtime.core.api.MuleContext in project mule by mulesoft.
the class MuleContextLifecycleTestCase method testIsInValidJdk.
@Test(expected = InitialisationException.class)
public void testIsInValidJdk() throws InitialisationException {
try {
JdkVersionUtils.validateJdk();
} catch (RuntimeException e) {
fail("Jdk version or vendor is invalid. Update the valid versions");
}
String javaVersion = System.setProperty("java.version", "1.5.0_12");
try {
try {
JdkVersionUtils.validateJdk();
fail("Test is invalid because the Jdk version or vendor is supposed to now be invalid");
} catch (RuntimeException e) {
// expected
}
MuleContext ctx = ctxBuilder.buildMuleContext();
assertFalse(ctx.isInitialised());
assertFalse(ctx.isInitialising());
assertFalse(ctx.isStarted());
assertFalse(ctx.isDisposed());
assertFalse(ctx.isDisposing());
ctx.initialise();
} finally {
System.setProperty("java.version", javaVersion);
}
}
use of org.mule.runtime.core.api.MuleContext in project mule by mulesoft.
the class DefaultExceptionStrategyTestCase method testExceptionNotifications.
// MULE-1627
@Test
public void testExceptionNotifications() throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
final AtomicInteger notificationCount = new AtomicInteger(0);
((MuleContextWithRegistries) muleContext).getRegistry().lookupObject(NotificationListenerRegistry.class).registerListener((ExceptionNotificationListener) notification -> {
if (new IntegerAction(EXCEPTION_ACTION).equals(notification.getAction())) {
assertEquals("exception", notification.getActionName());
assertEquals("Wrong info type", TYPE_ERROR, notification.getType());
notificationCount.incrementAndGet();
latch.countDown();
}
});
// throwing exception
InstrumentedExceptionStrategy strategy = new InstrumentedExceptionStrategy(muleContext);
strategy.setAnnotations(singletonMap(LOCATION_KEY, TEST_CONNECTOR_LOCATION));
strategy.setMuleContext(muleContext);
strategy.setNotificationFirer(((MuleContextWithRegistries) muleContext).getRegistry().lookupObject(NotificationDispatcher.class));
strategy.handleException(new IllegalArgumentException("boom"));
// Wait for the notifcation event to be fired as they are queue
latch.await(2000, MILLISECONDS);
assertEquals(1, notificationCount.get());
}
use of org.mule.runtime.core.api.MuleContext in project mule by mulesoft.
the class RegexExpressionLanguageFunctionTestCase method setup.
@Before
public void setup() throws InitialisationException {
ParserConfiguration parserConfiguration = new ParserConfiguration();
expressionExecutor = new MVELExpressionExecutor(parserConfiguration);
muleContext = mock(MuleContext.class);
context = new MVELExpressionLanguageContext(parserConfiguration, muleContext);
regexFuntion = new RegexExpressionLanguageFuntion();
context.declareFunction("regex", regexFuntion);
}
Aggregations