Ладно, спасибо всем за попытки помочь. Не имея смысла расстраивать, публикация конфигурации и потока не поможет, я думаю, из-за того, что я нашел ниже:
При ближайшем рассмотрении произошло исключение:
org.springframework.expression.AccessException: Could not resolve bean reference against BeanFactory
Речь шла о методе внутри утилит, который я использовал в @SpyBean:
<int:transformer
expression="@utilities.asMap('licence_id', headers[licenceId], 'message', 'Delivered: ' + headers[confirmedMessage], 'secured_session_id', headers[visitorSession].getSecureSessionId())" />
Это не отдельный ApplicationContext, а SpEL, скорее всего, не примет шпионский компонент, поскольку ссылка изменилась или похожа.
Итак, я оставил утилиты в покое и модифицировал другой внутренний компонент для этого, чтобы генерировать числа, и использовал SpyBean для этого. Теперь Spring Integration / SpEL снова доволен, потому что служебный компонент, с которым он работает, корректен, и насмешка происходит внутри этого компонента и прозрачно для SpEL.
@Component
public class RandomSupplier implements Supplier<Double> {
@Override
public Double get() {
return Math.random();
}
}
public class FullIntegrationTest {
@Autowired
private MockMvc mvc;
@SpyBean
private RandomSupplier randomSupplier;
@Autowired // This is only necessary for the toy test below
private Utilities utilities;
@BeforeEach
public void setupAfterInit() {
Mockito.when(randomSupplier.get()).thenReturn(0.5);
}
@Test
public void t0() throws IOException {
System.out.println(utilities.getRandom());
}
...
Теперь Spring Integration / SpEL снова счастлив, потому что служебный бин, с которым он работает, корректен, и насмешка происходит внутри этого бина.
Три урока: не следите за компонентами, на которые непосредственно ссылаются в SpEL, в Spring Integration Flow; Читать журналы; У вас никогда не может быть достаточно косвенного обращения:)