Технологии в моем проекте
Spring Boot 2
Spring Integration (XML style)
Java 8
Tomcat 9.x/Liberty 19.0.0.1
В рамках проекта Spring Integration (REST API с входящим http-шлюзом, который принимает входные данные XML и создает XMLвывод), я пишу следующие компоненты:
- Сервис-активатор, который выполняет базовую проверку входящего XML по его XSD.
- Если проверка прошла успешно, POJO (aJava-объект builder-pattern) создается с переменной / свойством Boolean экземпляра с именем isError, установленным в true.
- Если проверка не удалась, POJO (Java-объект builder-pattern) создается сЛогическая переменная / свойство экземпляра с именем "isError" установлена в false.
- После создания POJO оно помещается в Сообщение и отправляется в выходной канал.
- Существует компонент маршрутизатора, которыйполучает сообщение из выходного канала и решает целевой маршрут / канал на основе значения свойства «isError» в полезной нагрузке / POJO.
Черновик POJO class (в действительности у POJO будет больше свойств, но в нашем примере он был коротким):
public class Composite {
private Boolean isError;
private Composite(CompositeBuilder compositeBuilder) {
this.isError = miCompositeBuilder.isError;
}
public boolean isError() {
return isError;
}
//Builder
public static class CompositeBuilder {
private Boolean isError;
public CompositeBuilder(Boolean isError) {
this.isError = isError;
}
public Composite build() {
return new Composite(this);
}
}
}
Компонент-активатор службы валидатора в XML:
<!-- SERVICE ACTIVATOR FOR REQUEST VALIDATION -->
<int:service-activator ref="myService"
method="validateMYRequest"
input-channel="myGatewayRequests"
output-channel="compositesPostRequestValidation" />
МаршрутизаторКомпонент в XML:
<!-- ROUTER POST-REQUEST VALIDATION -->
<int:router input-channel="compositesPostRequestValidation" expression="payload.isError">
<int:mapping value="true" channel="upstreamResponses"/>
<int:mapping value="false" channel="downstreamValidatedRequests"/>
</int:router>
Наконец, на мои вопросы, в этом "роутере",
Вопрос 1) Что-то вроденеправильно с выражением SpEL (payload.isError), так как я получил исключение во время вызова маршрутизатора, которое выглядит так:
org.springframework.expression.spel.SpelEvaluationException: EL1008E: Свойство или поле 'isError' не можетбыть найденным на объекте типа 'com.amb.restSample.core.model.Composite' - может быть не публичным или недействительным?в org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty (PropertyOrFieldReference.java:217) ~ [spring-expression-5.1.5.RELEASE.jar: 5.1.5.RELEASE] ... ... *
Подскажите, пожалуйста, как получить доступ к логическому свойству isError внутри Compoite POJO?Предполагается, что сообщение, отправляемое маршрутизатору, является сообщением
- Вопрос 2) В случае, если я хочу разместить свойство "isError" в качестве заголовка сообщения (String) передотправляя его на маршрутизатор (вместо использования его в качестве логического свойства внутри составного POJO), есть ли выражение для доступа к нему?