JAVA-23450: changes made for Update spring-boot-documentation module (#14533)

This commit is contained in:
Bipin kumar
2023-08-17 18:14:53 +05:30
committed by GitHub
parent 65159d313a
commit 7f13b86f3b
16 changed files with 103 additions and 130 deletions
@@ -0,0 +1,12 @@
package com.baeldung.boot.documentation.springwolf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringwolfApplication {
public static void main(String[] args) {
SpringApplication.run(SpringwolfApplication.class, args);
}
}
@@ -0,0 +1,48 @@
package com.baeldung.boot.documentation.springwolf.adapter.incoming;
import com.baeldung.boot.documentation.springwolf.dto.IncomingPayloadDto;
import com.baeldung.boot.documentation.springwolf.service.ProcessorService;
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata.annotation.AsyncListener;
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata.annotation.AsyncOperation;
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata.annotation.KafkaAsyncOperationBinding;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
import static org.springframework.kafka.support.mapping.AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME;
@AllArgsConstructor
@Component
@Slf4j
public class IncomingConsumer {
private static final String TOPIC_NAME = "incoming-topic";
private final ProcessorService processorService;
@KafkaListener(topics = TOPIC_NAME)
@AsyncListener(operation = @AsyncOperation(
channelName = TOPIC_NAME,
description = "More details for the incoming topic",
headers = @AsyncOperation.Headers(
schemaName = "SpringKafkaDefaultHeadersIncomingPayloadDto",
values = {
// this header is generated by Spring by default
@AsyncOperation.Headers.Header(
name = DEFAULT_CLASSID_FIELD_NAME,
description = "Spring Type Id Header",
value = "com.baeldung.boot.documentation.springwolf.dto.IncomingPayloadDto"
),
}
)
)
)
@KafkaAsyncOperationBinding
public void consume(IncomingPayloadDto payload) {
log.info("Received new message: {}", payload.toString());
processorService.doHandle(payload);
}
}
@@ -0,0 +1,47 @@
package com.baeldung.boot.documentation.springwolf.adapter.outgoing;
import com.baeldung.boot.documentation.springwolf.dto.OutgoingPayloadDto;
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata.annotation.AsyncOperation;
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata.annotation.AsyncPublisher;
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata.annotation.KafkaAsyncOperationBinding;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
import static org.springframework.kafka.support.mapping.AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME;
@AllArgsConstructor
@Component
@Slf4j
public class OutgoingProducer {
private static final String TOPIC_NAME = "outgoing-topic";
private final KafkaTemplate<String, OutgoingPayloadDto> kafkaTemplate;
@AsyncPublisher(
operation = @AsyncOperation(
channelName = TOPIC_NAME,
description = "More details for the outgoing topic",
headers = @AsyncOperation.Headers(
schemaName = "SpringKafkaDefaultHeadersOutgoingPayloadDto",
values = {
// this header is generated by Spring by default
@AsyncOperation.Headers.Header(
name = DEFAULT_CLASSID_FIELD_NAME,
description = "Spring Type Id Header",
value = "com.baeldung.boot.documentation.springwolf.dto.OutgoingPayloadDto"
),
}
)
)
)
@KafkaAsyncOperationBinding
public void publish(OutgoingPayloadDto payload) {
log.info("Publishing new message: {}", payload.toString());
kafkaTemplate.send(TOPIC_NAME, payload);
}
}
@@ -0,0 +1,25 @@
package com.baeldung.boot.documentation.springwolf.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.NOT_REQUIRED;
import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED;
@Data
@Schema(description = "Incoming payload model")
public class IncomingPayloadDto {
@Schema(description = "Some string field", example = "some string value", requiredMode = REQUIRED)
private String someString;
@Schema(description = "Some long field", example = "5", requiredMode = NOT_REQUIRED)
private long someLong;
@Schema(description = "Some enum field", example = "FOO2", requiredMode = REQUIRED)
private IncomingPayloadEnum someEnum;
public enum IncomingPayloadEnum {
FOO1, FOO2, FOO3
}
}
@@ -0,0 +1,20 @@
package com.baeldung.boot.documentation.springwolf.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.NOT_REQUIRED;
import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED;
@Data
@Builder
@Schema(description = "Outgoing payload model")
public class OutgoingPayloadDto {
@Schema(description = "Foo field", example = "bar", requiredMode = NOT_REQUIRED)
private String foo;
@Schema(description = "IncomingPayload field", requiredMode = REQUIRED)
private IncomingPayloadDto incomingWrapped;
}
@@ -0,0 +1,23 @@
package com.baeldung.boot.documentation.springwolf.service;
import com.baeldung.boot.documentation.springwolf.adapter.outgoing.OutgoingProducer;
import com.baeldung.boot.documentation.springwolf.dto.OutgoingPayloadDto;
import com.baeldung.boot.documentation.springwolf.dto.IncomingPayloadDto;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
public class ProcessorService {
private final OutgoingProducer outgoingProducer;
public void doHandle(IncomingPayloadDto payload) {
OutgoingPayloadDto message = OutgoingPayloadDto.builder()
.foo("Foo message")
.incomingWrapped(payload)
.build();
outgoingProducer.publish(message);
}
}
@@ -0,0 +1,30 @@
#########
# Spring Configuration
spring.application.name=Baeldung Tutorial Springwolf Application
#########
# Spring Kafka Configuration
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=baeldung-kafka-group-id
spring.kafka.consumer.properties.spring.json.trusted.packages=com.baeldung.boot.documentation.springwolf.*
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
#########
# Springwolf Configuration
springwolf.docket.base-package=com.baeldung.boot.documentation.springwolf.adapter
springwolf.docket.info.title=${spring.application.name}
springwolf.docket.info.version=1.0.0
springwolf.docket.info.description=Baeldung Tutorial Application to Demonstrate AsyncAPI Documentation using Springwolf
# Springwolf Kafka Configuration
springwolf.docket.servers.kafka.protocol=kafka
springwolf.docket.servers.kafka.url=localhost:9092
springwolf.plugin.kafka.publishing.enabled=true
springwolf.plugin.kafka.publishing.producer.bootstrap-servers=localhost:9092
springwolf.plugin.kafka.publishing.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
springwolf.plugin.kafka.publishing.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
springwolf.plugin.kafka.publishing.producer.properties.spring.json.add.type.headers=false