Various docs fixes
* Remove unused from now on assets * Fix `nav.adoc` order * Fix some typos in the docs * Fix links to SF docs on Antora * Modify Gradle build files according to tasks registration recommendations * Fix `antora.yml` removing `jvmargs` option since this cause the build failure on Windows
This commit is contained in:
24
build.gradle
24
build.gradle
@@ -21,7 +21,7 @@ plugins {
|
||||
id 'org.ajoberstar.grgit' version '4.1.1'
|
||||
id 'io.spring.dependency-management' version '1.1.2'
|
||||
id 'com.jfrog.artifactory' version '4.33.1' apply false
|
||||
id 'org.jetbrains.dokka' version "1.8.20"
|
||||
id 'org.jetbrains.dokka' version '1.8.20'
|
||||
id 'org.antora' version '1.0.0'
|
||||
id 'io.spring.antora.generate-antora-yml' version '0.0.1'
|
||||
}
|
||||
@@ -288,7 +288,7 @@ configure(javaProjects) { subproject ->
|
||||
ext.xLintArg = '-Xlint:all,-options,-processing'
|
||||
[compileJava, compileTestJava]*.options*.compilerArgs = [xLintArg, '-parameters']
|
||||
|
||||
task updateCopyrights {
|
||||
tasks.register('updateCopyrights') {
|
||||
onlyIf { !isCI }
|
||||
inputs.files(modifiedFiles.map(files -> files.filter { f -> f.path.contains(subproject.name) }))
|
||||
outputs.dir('build/classes')
|
||||
@@ -338,7 +338,7 @@ configure(javaProjects) { subproject ->
|
||||
}
|
||||
}
|
||||
|
||||
task testAll(type: Test, dependsOn: ['check'])
|
||||
tasks.register('testAll', Test) { dependsOn['check'] }
|
||||
|
||||
gradle.taskGraph.whenReady { graph ->
|
||||
if (graph.hasTask(testAll)) {
|
||||
@@ -390,7 +390,7 @@ configure(javaProjects) { subproject ->
|
||||
}
|
||||
}
|
||||
|
||||
task checkClasspathForConflicts {
|
||||
tasks.register('checkClasspathForConflicts') {
|
||||
onlyIf { isCI }
|
||||
inputs.files(configurations.runtimeClasspath)
|
||||
|
||||
@@ -1170,7 +1170,7 @@ sonar {
|
||||
}
|
||||
}
|
||||
|
||||
task api(type: Javadoc) {
|
||||
tasks.register('api', Javadoc) {
|
||||
group = 'Documentation'
|
||||
description = 'Generates aggregated Javadoc API documentation.'
|
||||
title = "${rootProject.description} ${version} API"
|
||||
@@ -1196,14 +1196,14 @@ task api(type: Javadoc) {
|
||||
}
|
||||
|
||||
dokkaHtmlMultiModule {
|
||||
dependsOn api
|
||||
dependsOn 'api'
|
||||
moduleName.set('spring-integration')
|
||||
outputDirectory.set(file("$buildDir/kdoc"))
|
||||
}
|
||||
|
||||
apply from: "${rootDir}/gradle/docs.gradle"
|
||||
|
||||
task schemaZip(type: Zip) {
|
||||
tasks.register('schemaZip', Zip) {
|
||||
group = 'Distribution'
|
||||
archiveClassifier = 'schema'
|
||||
description = "Builds -${archiveClassifier} archive containing all " +
|
||||
@@ -1238,7 +1238,8 @@ task schemaZip(type: Zip) {
|
||||
}
|
||||
}
|
||||
|
||||
task docsZip(type: Zip, dependsOn: [dokkaHtmlMultiModule]) {
|
||||
tasks.register('docsZip', Zip) {
|
||||
dependsOn 'dokkaHtmlMultiModule'
|
||||
group = 'Distribution'
|
||||
archiveClassifier = 'docs'
|
||||
description = "Builds -${archiveClassifier} archive containing api and reference " +
|
||||
@@ -1257,7 +1258,9 @@ task docsZip(type: Zip, dependsOn: [dokkaHtmlMultiModule]) {
|
||||
}
|
||||
}
|
||||
|
||||
task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) {
|
||||
tasks.register('distZip', Zip) {
|
||||
dependsOn 'docsZip'
|
||||
dependsOn 'schemaZip'
|
||||
group = 'Distribution'
|
||||
archiveClassifier = 'dist'
|
||||
description = "Builds -${archiveClassifier} archive, containing all jars and docs, " +
|
||||
@@ -1299,7 +1302,8 @@ task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) {
|
||||
}
|
||||
}
|
||||
|
||||
task dist(dependsOn: assemble) {
|
||||
tasks.register('dist') {
|
||||
dependsOn assemble
|
||||
group = 'Distribution'
|
||||
description = 'Builds -dist, -docs and -schema distribution archives.'
|
||||
}
|
||||
|
||||
@@ -23,12 +23,12 @@ tasks.named("generateAntoraYml") {
|
||||
baseAntoraYmlFile = file('src/reference/antora/antora.yml')
|
||||
}
|
||||
|
||||
tasks.create(name: 'createAntoraPartials', type: Sync) {
|
||||
from { tasks.filterMetricsDocsContent.outputs }
|
||||
tasks.register('createAntoraPartials', Sync) {
|
||||
from tasks.filterMetricsDocsContent.outputs
|
||||
into layout.buildDirectory.dir('generated-antora-resources/modules/ROOT/partials')
|
||||
}
|
||||
|
||||
tasks.create('generateAntoraResources') {
|
||||
tasks.register('generateAntoraResources') {
|
||||
dependsOn 'createAntoraPartials'
|
||||
dependsOn 'generateAntoraYml'
|
||||
}
|
||||
@@ -44,7 +44,7 @@ dependencies {
|
||||
def observationInputDir = file('spring-integration-core/src/main/java/org/springframework/integration/support/management/observation').absolutePath
|
||||
def generatedDocsDir = file("$buildDir/reference/generated").absolutePath
|
||||
|
||||
task generateObservabilityDocs(type: JavaExec) {
|
||||
tasks.register('generateObservabilityDocs', JavaExec) {
|
||||
inputs.dir(observationInputDir)
|
||||
outputs.dir(generatedDocsDir)
|
||||
classpath configurations.micrometerDocs
|
||||
@@ -52,7 +52,7 @@ task generateObservabilityDocs(type: JavaExec) {
|
||||
mainClass = 'io.micrometer.docs.DocsGeneratorCommand'
|
||||
}
|
||||
|
||||
task filterMetricsDocsContent(type: Copy) {
|
||||
tasks.register('filterMetricsDocsContent', Copy) {
|
||||
dependsOn generateObservabilityDocs
|
||||
from generatedDocsDir
|
||||
include '_*.adoc'
|
||||
|
||||
@@ -6,7 +6,7 @@ nav:
|
||||
ext:
|
||||
collector:
|
||||
run:
|
||||
command: gradlew -q "-Dorg.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError" :generateAntoraResources
|
||||
command: gradlew :generateAntoraResources
|
||||
local: true
|
||||
scan:
|
||||
dir: build/generated-antora-resources
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 74 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 9.1 KiB |
@@ -159,6 +159,23 @@
|
||||
** xref:http/header-mapping.adoc[]
|
||||
** xref:http/int-graph-controller.adoc[]
|
||||
** xref:http/samples.adoc[]
|
||||
* xref:ip.adoc[]
|
||||
** xref:ip/intro.adoc[]
|
||||
** xref:ip/udp-adapters.adoc[]
|
||||
** xref:ip/tcp-connection-factories.adoc[]
|
||||
** xref:ip/testing-connections.adoc[]
|
||||
** xref:ip/interceptors.adoc[]
|
||||
** xref:ip/tcp-events.adoc[]
|
||||
** xref:ip/tcp-adapters.adoc[]
|
||||
** xref:ip/tcp-gateways.adoc[]
|
||||
** xref:ip/correlation.adoc[]
|
||||
** xref:ip/note-nio.adoc[]
|
||||
** xref:ip/ssl-tls.adoc[]
|
||||
** xref:ip/tcp-advanced-techniques.adoc[]
|
||||
** xref:ip/endpoint-reference.adoc[]
|
||||
** xref:ip/msg-headers.adoc[]
|
||||
** xref:ip/annotation.adoc[]
|
||||
** xref:ip/dsl.adoc[]
|
||||
* xref:jdbc.adoc[]
|
||||
** xref:jdbc/inbound-channel-adapter.adoc[]
|
||||
** xref:jdbc/outbound-channel-adapter.adoc[]
|
||||
@@ -203,23 +220,6 @@
|
||||
* xref:stomp.adoc[]
|
||||
* xref:stream.adoc[]
|
||||
* xref:syslog.adoc[]
|
||||
* xref:ip.adoc[]
|
||||
** xref:ip/intro.adoc[]
|
||||
** xref:ip/udp-adapters.adoc[]
|
||||
** xref:ip/tcp-connection-factories.adoc[]
|
||||
** xref:ip/testing-connections.adoc[]
|
||||
** xref:ip/interceptors.adoc[]
|
||||
** xref:ip/tcp-events.adoc[]
|
||||
** xref:ip/tcp-adapters.adoc[]
|
||||
** xref:ip/tcp-gateways.adoc[]
|
||||
** xref:ip/correlation.adoc[]
|
||||
** xref:ip/note-nio.adoc[]
|
||||
** xref:ip/ssl-tls.adoc[]
|
||||
** xref:ip/tcp-advanced-techniques.adoc[]
|
||||
** xref:ip/endpoint-reference.adoc[]
|
||||
** xref:ip/msg-headers.adoc[]
|
||||
** xref:ip/annotation.adoc[]
|
||||
** xref:ip/dsl.adoc[]
|
||||
* xref:webflux.adoc[]
|
||||
* xref:web-sockets.adoc[]
|
||||
* xref:ws.adoc[]
|
||||
@@ -235,6 +235,7 @@
|
||||
** xref:xml/validating-filter.adoc[]
|
||||
* xref:xmpp.adoc[]
|
||||
* xref:zeromq.adoc[]
|
||||
* xref:zip.adoc[]
|
||||
* xref:zookeeper.adoc[]
|
||||
* xref:error-handling.adoc[]
|
||||
* xref:spel.adoc[]
|
||||
@@ -268,4 +269,3 @@
|
||||
** xref:changes-2.1-2.2.adoc[]
|
||||
** xref:changes-2.0-2.1.adoc[]
|
||||
** xref:changes-1.0-2.0.adoc[]
|
||||
* xref:zip.adoc[]
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
= Spring `ApplicationEvent` Support
|
||||
|
||||
Spring Integration provides support for inbound and outbound `ApplicationEvents`, as defined by the underlying Spring Framework.
|
||||
For more information about Spring's support for events and listeners, see the https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#context-functionality-events[Spring Reference Manual].
|
||||
For more information about Spring's support for events and listeners, see the https://docs.spring.io/spring-framework/reference/core/beans/context-introduction.html#context-functionality-events[Spring Reference Manual].
|
||||
|
||||
You need to include this dependency into your project:
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ xref:spel.adoc[Spring Expression Language (SpEL)] :: Details about SpEL support
|
||||
xref:message-publishing.adoc[Message Publishing] :: The Publisher annotation etc.
|
||||
xref:jms.adoc#jms-ob-transactions[Transaction Support] :: Overview of transactions support in Spring Integration
|
||||
xref:security.adoc[Security in Spring Integration] :: Securing Spring Integration flows
|
||||
xref:kafka.adoc#kafka-inbound-gateway-configurartion[Configuration] :: Messaging annotations, task scheduler, global properties, message mapping
|
||||
xref:kafka.adoc#kafka-inbound-gateway-configuration[Configuration] :: Messaging annotations, task scheduler, global properties, message mapping
|
||||
xref:testing.adoc[Testing support] :: Test utilities, Integration mocks and testing framework
|
||||
xref:samples.adoc#samples-impl[Spring Integration Samples] :: The samples dedicated project
|
||||
xref:resources.adoc[Additional Resources] :: Other resources related to project
|
||||
|
||||
@@ -35,7 +35,7 @@ The outbound channel adapter uses the `JmsTemplate` to convert and send a JMS me
|
||||
|
||||
By using `JmsTemplate` and the `MessageListener` container, Spring Integration relies on Spring's JMS support.
|
||||
This is important to understand, since most of the attributes exposed on these adapters configure the underlying `JmsTemplate` and `MessageListener` container.
|
||||
For more details about `JmsTemplate` and the `MessageListener` container, see the https://docs.spring.io/spring/docs/current/spring-framework-reference/html/jms.html[Spring JMS documentation].
|
||||
For more details about `JmsTemplate` and the `MessageListener` container, see the https://docs.spring.io/spring-framework/reference/integration/jms.html[Spring JMS documentation].
|
||||
|
||||
Whereas the JMS channel adapters are intended for unidirectional messaging (send-only or receive-only), Spring Integration also provides inbound and outbound JMS Gateways for request and reply operations.
|
||||
The inbound gateway relies on one of Spring's `MessageListener` container implementations for message-driven reception.
|
||||
@@ -886,7 +886,7 @@ If configured properly, the JMS-backed message channel also supports transaction
|
||||
In other words, a producer would not actually write to a transactional JMS-backed channel if its send operation is part of a transaction that rolls back.
|
||||
Likewise, a consumer would not physically remove a JMS message from the channel if the reception of that message is part of a transaction that rolls back.
|
||||
Note that the producer and consumer transactions are separate in such a scenario.
|
||||
This is significantly different than the propagation of a transactional context across a simple, synchronous `<channel/>` element that has no `<queue/>` child element.
|
||||
This is significantly different from the propagation of a transactional context across a simple, synchronous `<channel/>` element that has no `<queue/>` child element.
|
||||
|
||||
Since the preceding example above references a JMS Queue instance, it acts as a point-to-point channel.
|
||||
If, on the other hand, you need publish-subscribe behavior, you can use a separate element and reference a JMS Topic instead.
|
||||
|
||||
@@ -566,7 +566,7 @@ public IntegrationFlow outboundGateFlow() {
|
||||
|
||||
The inbound gateway is for request/reply operations.
|
||||
|
||||
[[kafka-inbound-gateway-configurartion]]
|
||||
[[kafka-inbound-gateway-configuration]]
|
||||
=== Configuration
|
||||
|
||||
The following example shows how to configure an inbound gateway:
|
||||
|
||||
@@ -269,10 +269,10 @@ The following example shows how to an asynchronous `publishing-interceptor`:
|
||||
----
|
||||
<int:service-activator input-channel="inputChannel" output-channel="outputChannel" ref="sampleservice"/>
|
||||
|
||||
<bean id="sampleservice" class="test.SampleService"/>
|
||||
<bean id="sampleService" class="test.SampleService"/>
|
||||
|
||||
<aop:config>
|
||||
<aop:advisor advice-ref="interceptor" pointcut="bean(sampleservice)" />
|
||||
<aop:advisor advice-ref="interceptor" pointcut="bean(sampleService)" />
|
||||
</aop:config>
|
||||
|
||||
<int:publishing-interceptor id="interceptor" >
|
||||
|
||||
@@ -3,13 +3,3 @@
|
||||
:page-section-summary-toc: 1
|
||||
|
||||
This chapter covers the details of using Spring Integration to route messages.
|
||||
|
||||
// BE SURE TO PRECEDE ALL include:: with a blank line - see https://github.com/asciidoctor/asciidoctor/issues/1297
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// BE SURE TO PRECEDE ALL include:: with a blank line - see https://github.com/asciidoctor/asciidoctor/issues/1297
|
||||
|
||||
@@ -302,7 +302,7 @@ The default is `false` (the send blocks until delivery is confirmed).
|
||||
It contains the message, the topic, the `messageId` generated by the client library, the `clientId`, and the `clientInstance` (incremented each time the client is connected).
|
||||
When the delivery is confirmed by the client library, an `MqttMessageDeliveredEvent` is emitted.
|
||||
It contains the `messageId`, the `clientId`, and the `clientInstance`, enabling delivery to be correlated with the `send()`.
|
||||
Any `ApplicationListener` or an event inbound channel adapter can received these events.
|
||||
Any `ApplicationListener` or an event inbound channel adapter can receive these events.
|
||||
Note that it is possible for the `MqttMessageDeliveredEvent` to be received before the `MqttMessageSentEvent`.
|
||||
The default is `false`.
|
||||
|
||||
@@ -459,7 +459,7 @@ See more information in the `Mqttv5PahoMessageHandler` javadocs and its supercla
|
||||
The inbound channel adapter for the MQTT v5 protocol is present as an `Mqttv5PahoMessageDrivenChannelAdapter`.
|
||||
It requires a `clientId` and MQTT broker URL or `MqttConnectionOptions` reference, plus topics to which to subscribe and consume from.
|
||||
It supports a `MqttClientPersistence` option, which is in-memory by default.
|
||||
The expected `payloadType` (`byte[]` by default) can be configured and it is propagated to the provided `SmartMessageConverter` for conversion from `byte[]` of the received `MqttMessage`.
|
||||
The expected `payloadType` (`byte[]` by default) can be configured, and it is propagated to the provided `SmartMessageConverter` for conversion from `byte[]` of the received `MqttMessage`.
|
||||
If the `manualAck` option is set, then an `IntegrationMessageHeaderAccessor.ACKNOWLEDGMENT_CALLBACK` header is added to the message to produce as an instance of `SimpleAcknowledgment`.
|
||||
The `HeaderMapper<MqttProperties>` is used to map `PUBLISH` frame properties (including user properties) into the target message headers.
|
||||
Standard `MqttMessage` properties, such as `qos`, `id`, `dup`, `retained`, plus received topic are always mapped to headers.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[[native-images-support]]
|
||||
= Native Images Support
|
||||
|
||||
Starting with version 6.0, GraalVM compilation of Spring Integration applications to native images is supported by https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aot[Spring AOT] native hints.
|
||||
Starting with version 6.0, GraalVM compilation of Spring Integration applications to native images is supported by https://docs.spring.io/spring-framework/reference/core/aot.html[Spring AOT] native hints.
|
||||
For most common use cases, such as endpoint definitions with `@Bean` methods, Java DSL configuration with lambdas and `@MessagingGateway` interface scanning (importing), the framework provides respective reflection, proxy and serialization hints.
|
||||
If configuration uses messaging annotations (`@ServiceActivator`, `@Splitter` etc.) on POJO methods, or POJO methods are used with the `IntegrationFlowBuilder.handle(Object service, String methodName)` API, they have to be also marked with a `@Reflective` annotation since they are invoked by the framework reflectively.
|
||||
|
||||
|
||||
@@ -15,13 +15,13 @@ This section details the compatible https://www.oracle.com/technetwork/java/java
|
||||
[[supported-java-versions]]
|
||||
=== Compatible Java Versions
|
||||
|
||||
For Spring Integration 6.1.x, the minimum compatible Java version is Java SE 17.
|
||||
For Spring Integration 6.2.x, the minimum compatible Java version is Java SE 17.
|
||||
Older versions of Java are not supported.
|
||||
|
||||
[[supported-spring-versions]]
|
||||
=== Compatible Versions of the Spring Framework
|
||||
|
||||
Spring Integration 6.1.x requires Spring Framework 6.0 or later.
|
||||
Spring Integration 6.2.x requires Spring Framework 6.1 or later.
|
||||
|
||||
[[code-conventions]]
|
||||
== Code Conventions
|
||||
|
||||
@@ -27,7 +27,7 @@ compile "org.springframework.integration:spring-integration-rsocket:{project-ver
|
||||
======
|
||||
|
||||
This module is available starting with version 5.2 and is based on the Spring Messaging foundation with its RSocket component implementations, such as `RSocketRequester`, `RSocketMessageHandler` and `RSocketStrategies`.
|
||||
See https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#rsocket[Spring Framework RSocket Support] for more information about the RSocket protocol, terminology and components.
|
||||
See https://docs.spring.io/spring-framework/reference/rsocket.html[Spring Framework RSocket Support] for more information about the RSocket protocol, terminology and components.
|
||||
|
||||
Before starting an integration flow processing via channel adapters, we need to establish an RSocket connection between server and client.
|
||||
For this purpose, Spring Integration RSocket support provides the `ServerRSocketConnector` and `ClientRSocketConnector` implementations of the `AbstractRSocketConnector`.
|
||||
@@ -140,7 +140,7 @@ Starting with version 5.3, a `decodeFluxAsUnit` option (default `false`) is adde
|
||||
By default, incoming `Flux` is transformed the way that each its event is decoded separately.
|
||||
This is an exact behavior present currently with `@MessageMapping` semantics.
|
||||
To restore a previous behavior or decode the whole `Flux` as single unit according application requirements, the `decodeFluxAsUnit` has to be set to `true`.
|
||||
However the target decoding logic depends on the `Decoder` selected, e.g. a `StringDecoder` requires a new line separator (by default) to be present in the stream to indicate a byte buffer end.
|
||||
However, the target decoding logic depends on the `Decoder` selected, e.g. a `StringDecoder` requires a new line separator (by default) to be present in the stream to indicate a byte buffer end.
|
||||
|
||||
See xref:rsocket.adoc#rsocket-java-config[Configuring RSocket Endpoints with Java] for samples how to configure an `RSocketInboundGateway` endpoint and deal with payloads downstream.
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ The great benefit to the community is that we can now add more samples and make
|
||||
Having its own GitHub repository that is not tied to the actual framework is also a great benefit.
|
||||
You now have a dedicated place to suggest samples as well as report issues with existing samples.
|
||||
You can also submit a sample to us as a Pull Request.
|
||||
If we believe your sample adds value, we would be more then glad to add it to the 'samples' repository, properly crediting you as the author.
|
||||
If we believe your sample adds value, we would be more than glad to add it to the 'samples' repository, properly crediting you as the author.
|
||||
|
||||
[[samples-get]]
|
||||
== Where to Get Samples
|
||||
@@ -225,7 +225,7 @@ For other methods, we do not add any header.
|
||||
Now we can check downstream for the existence of this header.
|
||||
Based on its presence and its value, we can determine what type of reply the caller wants.
|
||||
|
||||
Based on the use case, we also know tat some pre-screening steps need to be performed, such as getting and evaluating the consumer's credit score, because some premiere banks only accept quote requests from consumers that meet a minimum credit score requirement.
|
||||
Based on the use case, we also know that some pre-screening steps need to be performed, such as getting and evaluating the consumer's credit score, because some premiere banks only accept quote requests from consumers that meet a minimum credit score requirement.
|
||||
So it would be nice if the message would be enriched with such information before it is forwarded to the banks.
|
||||
It would also be nice if, when several processes need to be completed to provide such meta-information, those processes could be grouped in a single unit.
|
||||
In our use case, we need to determine the credit score and, based on the credit score and some rule, select a list of message channels (bank channels) to which to send quote request.
|
||||
@@ -388,7 +388,7 @@ public class OrderSplitter {
|
||||
}
|
||||
----
|
||||
|
||||
In the case of the router, the return value does not have to be a `MessageChannel` instance (although it can be).
|
||||
In the case of the router, the return value does not have to be a `MessageChannel` instance (although, it can be).
|
||||
In this example, a `String` value that holds the channel name is returned instead, as the following listing shows.
|
||||
|
||||
[source,java]
|
||||
|
||||
@@ -31,7 +31,7 @@ compile "org.springframework.integration:spring-integration-scripting:{project-v
|
||||
In addition, you need to add a script engine implementation, e.g. JRuby, Jython.
|
||||
|
||||
Starting with version 5.2, Spring Integration provides a Kotlin Jsr223 support.
|
||||
You need to add these dependencies into your project to make it working:
|
||||
You need to add this dependency into your project to make it working:
|
||||
|
||||
[tabs]
|
||||
======
|
||||
@@ -41,17 +41,7 @@ Maven::
|
||||
----
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-script-util</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-compiler-embeddable</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-scripting-compiler-embeddable</artifactId>
|
||||
<artifactId>kotlin-scripting-jsr223</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
----
|
||||
@@ -60,14 +50,10 @@ Gradle::
|
||||
+
|
||||
[source, groovy, subs="normal", role="secondary"]
|
||||
----
|
||||
runtime 'org.jetbrains.kotlin:kotlin-script-util'
|
||||
runtime 'org.jetbrains.kotlin:kotlin-compiler-embeddable'
|
||||
runtime 'org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable'
|
||||
runtime 'org.jetbrains.kotlin:kotlin-scripting-jsr223'
|
||||
----
|
||||
======
|
||||
|
||||
The `KotlinScriptExecutor` is selected by the provided `kotlin` language indicator or script file comes with the `.kts` extension.
|
||||
|
||||
In order to use a JVM scripting language, a JSR223 implementation for that language must be included in your class path.
|
||||
The https://groovy-lang.org/[Groovy] and https://www.jruby.org[JRuby] projects provide JSR233 support in their standard distributions.
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[[spel]]
|
||||
= Spring Expression Language (SpEL)
|
||||
|
||||
You can configure many Spring Integration components by using expressions written in the https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#expressions[Spring Expression Language].
|
||||
You can configure many Spring Integration components by using expressions written in the https://docs.spring.io/spring-framework/reference/core/expressions.html[Spring Expression Language].
|
||||
|
||||
In most cases, the `#root` object is the `Message`, which has two properties (`headers` and `payload`) that allow such expressions as `payload`, `payload.thing`, `headers['my.header']`, and so on.
|
||||
|
||||
@@ -80,7 +80,7 @@ In the following example, SpEL expressions always use the bean factory's class l
|
||||
== SpEL Functions
|
||||
|
||||
Spring Integration provides namespace support to let you create SpEL custom functions.
|
||||
You can specify `<spel-function/>` components to provide https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#expressions-ref-functions[custom SpEL functions] to the `EvaluationContext` used throughout the framework.
|
||||
You can specify `<spel-function/>` components to provide https://docs.spring.io/spring-framework/reference/core/expressions/language-ref/functions.html[custom SpEL functions] to the `EvaluationContext` used throughout the framework.
|
||||
Instead of configuring the factory bean shown earlier, you can add one or more of these components, and the framework automatically adds them to the default `integrationEvaluationContext` factory bean.
|
||||
|
||||
For example, suppose you have a useful static method to evaluate XPath.
|
||||
@@ -149,7 +149,7 @@ Otherwise, the `#jsonPath` SpEL function is not registered.
|
||||
+
|
||||
For more information regarding JSON see 'JSON Transformers' in xref:transformer.adoc[Transformer].
|
||||
|
||||
* `#xpath`: To evaluate an 'xpath' on some provided object.
|
||||
* `#xpath`: To evaluate an xpath on some provided object.
|
||||
For more information regarding XML and XPath, see xref:xml.adoc[XML Support - Dealing with XML Payloads].
|
||||
|
||||
[[spel-property-accessors]]
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
Spring Integration version 4.2 introduced STOMP (Simple Text Orientated Messaging Protocol) client support.
|
||||
It is based on the architecture, infrastructure, and API from the Spring Framework's messaging module, stomp package.
|
||||
Spring Integration uses many of Spring STOMP components (such as `StompSession` and `StompClientSupport`).
|
||||
For more information, see the https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#websocket-stomp-client[Spring Framework STOMP Support] chapter in the Spring Framework reference manual.
|
||||
For more information, see the https://docs.spring.io/spring-framework/reference/web/websocket/stomp/client.html[Spring Framework STOMP Support] chapter in the Spring Framework reference manual.
|
||||
|
||||
You need to include this dependency into your project:
|
||||
|
||||
@@ -106,7 +106,7 @@ Another example is the `StompMessageHandler`.
|
||||
It processes `ERROR` STOMP frames, which are server responses to improper (unaccepted) messages sent by this `StompMessageHandler`.
|
||||
|
||||
The `StompMessageHandler` emits `StompReceiptEvent` as a part of `StompSession.Receiptable` callbacks in the asynchronous answers for the messages sent to the `StompSession`.
|
||||
The `StompReceiptEvent` can be positive or negative, depending on whether or not the `RECEIPT` frame was received from the server within the `receiptTimeLimit` period, which you can configure on the `StompClientSupport` instance.
|
||||
The `StompReceiptEvent` can be positive or negative, depending on whether the `RECEIPT` frame was received from the server within the `receiptTimeLimit` period, which you can configure on the `StompClientSupport` instance.
|
||||
It defaults to `15 * 1000` (in milliseconds, so 15 seconds).
|
||||
|
||||
NOTE: The `StompSession.Receiptable` callbacks are added only if the `RECEIPT` STOMP header of the message to send is not `null`.
|
||||
@@ -254,7 +254,7 @@ The default is `Integer.MIN_VALUE`.
|
||||
Values can be negative.
|
||||
See https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/SmartLifecycle.html[`SmartLifeCycle`].
|
||||
|
||||
[[understanding-the-<int-stomp:inbound-channel-adapter>-element]]
|
||||
[[understanding-the-int-stomp:inbound-channel-adapter-element]]
|
||||
=== Understanding the `<int-stomp:inbound-channel-adapter>` Element
|
||||
|
||||
The following listing shows the available attributes for the STOMP inbound channel adapter:
|
||||
|
||||
@@ -1,12 +1,3 @@
|
||||
[[system-management-chapter]]
|
||||
= System Management
|
||||
:page-section-summary-toc: 1
|
||||
|
||||
// BE SURE TO PRECEDE ALL include:: with a blank line - see https://github.com/asciidoctor/asciidoctor/issues/1297
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// BE SURE TO PRECEDE ALL include:: with a blank line - see https://github.com/asciidoctor/asciidoctor/issues/1297
|
||||
|
||||
@@ -15,7 +15,7 @@ A thorough treatment of testing in the enterprise is beyond the scope of this re
|
||||
See the https://www.enterpriseintegrationpatterns.com/docs/TestDrivenEAI.pdf["`Test-Driven Development in Enterprise Integration Projects`"] paper, by Gregor Hohpe and Wendy Istvanick, for a source of ideas and principles for testing your target integration solution.
|
||||
|
||||
The Spring Integration Test Framework and test utilities are fully based on existing JUnit, Hamcrest, and Mockito libraries.
|
||||
The application context interaction is based on the https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/testing.html#testing[Spring test framework].
|
||||
The application context interaction is based on the https://docs.spring.io/spring-framework/reference/testing.html#testing[Spring test framework].
|
||||
See the documentation for those projects for further information.
|
||||
|
||||
Thanks to the canonical implementation of the EIP in Spring Integration Framework and its first-class citizens (such as `MessageChannel`, `Endpoint` and `MessageHandler`), abstractions, and loose coupling principles, you can implement integration solutions of any complexity.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
Starting with version 4.1, Spring Integration has WebSocket support.
|
||||
It is based on the architecture, infrastructure, and API from the Spring Framework's `web-socket` module.
|
||||
Therefore, many of Spring WebSocket's components (such as `SubProtocolHandler` or `WebSocketClient`) and configuration options (such as `@EnableWebSocketMessageBroker`) can be reused within Spring Integration.
|
||||
For more information, see the https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#websocket[Spring Framework WebSocket Support] chapter in the Spring Framework reference manual.
|
||||
For more information, see the https://docs.spring.io/spring-framework/reference/web/websocket.html[Spring Framework WebSocket Support] chapter in the Spring Framework reference manual.
|
||||
|
||||
You need to include this dependency into your project:
|
||||
|
||||
@@ -208,7 +208,7 @@ Values can be negative.
|
||||
See https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/SmartLifecycle.html[`SmartLifeCycle`].
|
||||
<11> A `Map` of `HttpHeaders` to be used with the Handshake request.
|
||||
|
||||
[[<int-websocket:server-container>-attributes]]
|
||||
[[int-websocket:server-container-attributes]]
|
||||
=== `<int-websocket:server-container>` Attributes
|
||||
|
||||
The following listing shows the attributes available for the `<int-websocket:server-container>` element:
|
||||
@@ -338,7 +338,7 @@ The default is `Integer.MIN_VALUE`.
|
||||
Values can be negative.
|
||||
See https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/SmartLifecycle.html[`SmartLifeCycle`].
|
||||
|
||||
[[<int-websocket:inbound-channel-adapter>-attributes]]
|
||||
[[int-websocket:inbound-channel-adapter-attributes]]
|
||||
=== `<int-websocket:inbound-channel-adapter>` Attributes
|
||||
|
||||
The following listing shows the attributes available for the `<int-websocket:outbound-channel-adapter>` element:
|
||||
|
||||
@@ -29,7 +29,7 @@ compile "org.springframework.integration:spring-integration-webflux:{project-ver
|
||||
The `io.projectreactor.netty:reactor-netty` dependency must be included in case of non-Servlet-based server configuration.
|
||||
|
||||
The WebFlux support consists of the following gateway implementations: `WebFluxInboundEndpoint` and `WebFluxRequestExecutingMessageHandler`.
|
||||
The support is fully based on the Spring https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#spring-webflux[WebFlux] and https://projectreactor.io/[Project Reactor] foundations.
|
||||
The support is fully based on the Spring https://docs.spring.io/spring-framework/reference/web/webflux.html[WebFlux] and https://projectreactor.io/[Project Reactor] foundations.
|
||||
See xref:http.adoc[HTTP Support] for more information, since many options are shared between reactive and regular HTTP components.
|
||||
|
||||
[[webflux-namespace]]
|
||||
@@ -229,7 +229,7 @@ The Framework can't assume how complex the `Publisher` object can be after build
|
||||
If there is a requirements to restrict validation visibility for exactly final payload (or its `Publisher` elements), the validation should go downstream instead of WebFlux endpoint.
|
||||
See more information in the Spring WebFlux https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/web-reactive.html#webflux-fn-handler-validation[documentation].
|
||||
An invalid payload is rejected with an `IntegrationWebExchangeBindException` (a `WebExchangeBindException` extension), containing all the validation `Errors`.
|
||||
See more in Spring Framework https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation[Reference Manual] about validation.
|
||||
See more in Spring Framework https://docs.spring.io/spring-framework/reference/core/validation.html[Reference Manual] about validation.
|
||||
|
||||
[[webflux-outbound]]
|
||||
== WebFlux Outbound Components
|
||||
@@ -324,7 +324,7 @@ Otherwise, it is treated as an `async` mode, and the `Mono` response is adapted
|
||||
The target payload of the output message depends on the `WebFluxRequestExecutingMessageHandler` configuration.
|
||||
The `setExpectedResponseType(Class<?>)` or `setExpectedResponseTypeExpression(Expression)` identifies the target type of the response body element conversion.
|
||||
If `replyPayloadToFlux` is set to `true`, the response body is converted to a `Flux` with the provided `expectedResponseType` for each element, and this `Flux` is sent as the payload downstream.
|
||||
Afterwards, you can use a xref:splitter.adoc[splitter] to iterate over this `Flux` in a reactive manner.
|
||||
Afterward, you can use a xref:splitter.adoc[splitter] to iterate over this `Flux` in a reactive manner.
|
||||
|
||||
In addition, a `BodyExtractor<?, ClientHttpResponse>` can be injected into the `WebFluxRequestExecutingMessageHandler` instead of the `expectedResponseType` and `replyPayloadToFlux` properties.
|
||||
It can be used for low-level access to the `ClientHttpResponse` and more control over body and HTTP headers conversion.
|
||||
|
||||
@@ -30,7 +30,7 @@ See xref:debezium.adoc[Debezium Support] for more information.
|
||||
- The XML configuration for `<poller>` and `@Poller` annotation now support ISO 8601 duration format for `fixed-delay`, `fixed-rate` and `initial-delay` options.
|
||||
See xref:endpoint.adoc#endpoint-pollingconsumer[Polling Consumer] for more information.
|
||||
|
||||
- Java, Groovy and Kotlin DSLs have now context-specific methods in the `IntegationFlowDefinition` with a single `Consumer` argument to configure an endpoint and its handler with one builder and readable options.
|
||||
- Java, Groovy and Kotlin DSLs have now context-specific methods in the `IntegrationFlowDefinition` with a single `Consumer` argument to configure an endpoint and its handler with one builder and readable options.
|
||||
See, for example, `transformWith()`, `splitWith()` in xref:dsl.adoc#java-dsl[ Java DSL Chapter].
|
||||
|
||||
[[x6.2-websockets]]
|
||||
|
||||
@@ -11,7 +11,7 @@ Spring Integration's XML support extends the core of Spring Integration with the
|
||||
* xref:xml/xpath-routing.adoc[XPath Router]
|
||||
* xref:xml/xpath-header-enricher.adoc[XPath Header Enricher]
|
||||
* xref:xml/xpath-filter.adoc[XPath Filter]
|
||||
* xref:xpath-spel-function[#xpath SpEL Function]
|
||||
* xref:xml/xpath-spel-function.adoc[#xpath SpEL Function]
|
||||
* xref:xml/validating-filter.adoc[Validating Filter]
|
||||
|
||||
You need to include this dependency into your project:
|
||||
|
||||
@@ -33,7 +33,7 @@ compile "org.springframework.integration:spring-integration-zookeeper:{project-v
|
||||
[[zk-metadata-store]]
|
||||
== Zookeeper Metadata Store
|
||||
|
||||
You ca use the `ZookeeperMetadataStore` where any `MetadataStore` is needed, such as for persistent file list filters.
|
||||
You can use the `ZookeeperMetadataStore` where any `MetadataStore` is needed, such as for persistent file list filters.
|
||||
See xref:meta-data-store.adoc[Metadata Store] for more information.
|
||||
The following example configures a Zookeeper metadata store with XML:
|
||||
|
||||
@@ -100,7 +100,7 @@ When a leader is elected, an `OnGrantedEvent` is published for the role `cluster
|
||||
Any endpoints in that role are started.
|
||||
When leadership is revoked, an `OnRevokedEvent` is published for the role `cluster`.
|
||||
Any endpoints in that role are stopped.
|
||||
See xref:endpoint.adoc#endpoint-roles[Endpoint Roles] for more information.
|
||||
See xref:endpoint-roles.adoc[Endpoint Roles] for more information.
|
||||
|
||||
You can use Java configuration to create an instance of the leader initiator, as the following example shows:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user