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:
Artem Bilan
2023-08-11 12:22:21 -04:00
parent eb6ddfe429
commit 50bf00e6a1
27 changed files with 75 additions and 118 deletions

View File

@@ -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.'
}

View File

@@ -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'

View File

@@ -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

View File

@@ -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[]

View File

@@ -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:

View File

@@ -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

View File

@@ -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.

View File

@@ -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:

View File

@@ -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" >

View File

@@ -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

View File

@@ -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.

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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]

View File

@@ -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.

View File

@@ -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]]

View File

@@ -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:

View File

@@ -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

View File

@@ -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.

View File

@@ -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:

View File

@@ -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.

View File

@@ -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]]

View File

@@ -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:

View File

@@ -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: