### Question:
IntegrationContextRoutingKeyResolver extends AbstractMessageHeadersRoutingKeyResolver { @Override public String resolve(Map<String, Object> headers) { return build(headers, HEADER_KEYS); }  @Override String resolve(Map<String, Object> headers); @Override String getPrefix(); final String[] HEADER_KEYS; }### Answer:
@Test public void testResolveRoutingKeyFromValidHeadersInAnyOrder() { Map<String, Object> headers = MapBuilder.<String, Object> map(RuntimeBundleInfoMessageHeaders.SERVICE_NAME, "service-name") .with(IntegrationContextMessageHeaders.PROCESS_INSTANCE_ID, "process-instance-id") .with(RuntimeBundleInfoMessageHeaders.APP_NAME, "app-name") .with(IntegrationContextMessageHeaders.CONNECTOR_TYPE, "connector-type") .with(IntegrationContextMessageHeaders.BUSINESS_KEY, "business-key"); String routingKey = subject.resolve(headers); assertThat(routingKey).isEqualTo("integrationContext.service-name.app-name.connector-type.process-instance-id.business-key"); }