Skip to content

Commit b79279e

Browse files
committed
feedbacks
1 parent 8ca3a72 commit b79279e

File tree

16 files changed

+429
-95
lines changed

16 files changed

+429
-95
lines changed

incubator/binding-asyncapi/src/main/java/io/aklivity/zilla/runtime/binding/asyncapi/internal/AyncapiKafkaProtocol.java

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,28 @@
1414
*/
1515
package io.aklivity.zilla.runtime.binding.asyncapi.internal;
1616

17+
import java.net.URI;
18+
import java.util.Map;
19+
import java.util.stream.Collectors;
1720

1821
import io.aklivity.zilla.runtime.binding.asyncapi.config.AsyncapiOptionsConfig;
1922
import io.aklivity.zilla.runtime.binding.asyncapi.internal.model.Asyncapi;
23+
import io.aklivity.zilla.runtime.binding.asyncapi.internal.model.AsyncapiMessage;
2024
import io.aklivity.zilla.runtime.binding.asyncapi.internal.model.AsyncapiOperation;
2125
import io.aklivity.zilla.runtime.binding.asyncapi.internal.view.AsyncapiChannelView;
26+
import io.aklivity.zilla.runtime.binding.asyncapi.internal.view.AsyncapiMessageView;
2227
import io.aklivity.zilla.runtime.binding.asyncapi.internal.view.AsyncapiServerView;
23-
import io.aklivity.zilla.runtime.binding.http.config.HttpRequestConfig;
2428
import io.aklivity.zilla.runtime.binding.kafka.config.KafkaOptionsConfig;
2529
import io.aklivity.zilla.runtime.binding.kafka.config.KafkaOptionsConfigBuilder;
2630
import io.aklivity.zilla.runtime.binding.kafka.config.KafkaSaslConfig;
2731
import io.aklivity.zilla.runtime.binding.kafka.config.KafkaServerConfig;
32+
import io.aklivity.zilla.runtime.binding.kafka.config.KafkaTopicConfig;
33+
import io.aklivity.zilla.runtime.binding.kafka.config.KafkaTopicConfigBuilder;
2834
import io.aklivity.zilla.runtime.engine.config.BindingConfigBuilder;
35+
import io.aklivity.zilla.runtime.engine.config.CatalogedConfigBuilder;
2936
import io.aklivity.zilla.runtime.engine.config.KindConfig;
3037
import io.aklivity.zilla.runtime.engine.config.NamespaceConfigBuilder;
31-
32-
import java.net.URI;
33-
import java.util.stream.Collectors;
38+
import io.aklivity.zilla.runtime.model.json.config.JsonModelConfig;
3439

3540
public class AyncapiKafkaProtocol extends AsyncapiProtocol
3641
{
@@ -82,7 +87,7 @@ public <C> BindingConfigBuilder<C> injectProtocolClientOptions(
8287
.password(sasl.password)
8388
.build()
8489
.inject(this::injectKafkaServerOptions)
85-
.inject(this::injectKafkaBootstrapOptions)
90+
//.inject(this::injectKafkaBootstrapOptions)
8691
.inject(this::injectKafkaTopicOptions)
8792
.build();
8893
}
@@ -124,24 +129,56 @@ private <C> KafkaOptionsConfigBuilder<C> injectKafkaTopicOptions(
124129
{
125130
AsyncapiOperation operation = asyncApi.operations.get(name);
126131
AsyncapiChannelView channel = AsyncapiChannelView.of(asyncApi.channels, operation.channel);
127-
String topic = channel.address().replaceAll("\\{[^}]+\\}", "*");
128-
132+
String topic = channel.address();
129133

130-
131-
132-
HttpRequestConfig.Method method = HttpRequestConfig.Method.valueOf(operation.bindings.get("http").method);
133134
if (channel.messages() != null && !channel.messages().isEmpty() ||
134135
channel.parameters() != null && !channel.parameters().isEmpty())
135136
{
136137
options
137-
.request()
138-
.path(path)
139-
.method(method)
140-
.inject(request -> injectContent(request, channel.messages()))
141-
.inject(request -> injectPathParams(request, channel.parameters()))
138+
.topic(KafkaTopicConfig::builder)
139+
.name(topic)
140+
.inject(topicConfig -> injectValue(topicConfig, channel.messages()))
141+
.build()
142142
.build();
143143
}
144144
}
145145
return options;
146146
}
147+
148+
private <C> KafkaTopicConfigBuilder<C> injectValue(
149+
KafkaTopicConfigBuilder<C> topic,
150+
Map<String, AsyncapiMessage> messages)
151+
{
152+
if (messages != null)
153+
{
154+
if (hasJsonContentType())
155+
{
156+
topic
157+
.value(JsonModelConfig::builder)
158+
.catalog()
159+
.name(INLINE_CATALOG_NAME)
160+
.inject(catalog -> injectSchemas(catalog, messages))
161+
.build()
162+
.build();
163+
}
164+
}
165+
return topic;
166+
}
167+
168+
private <C> CatalogedConfigBuilder<C> injectSchemas(
169+
CatalogedConfigBuilder<C> catalog,
170+
Map<String, AsyncapiMessage> messages)
171+
{
172+
for (String name : messages.keySet())
173+
{
174+
AsyncapiMessageView message = AsyncapiMessageView.of(asyncApi.components.messages, messages.get(name));
175+
String subject = message.refKey() != null ? message.refKey() : name;
176+
catalog
177+
.schema()
178+
.subject(subject)
179+
.build()
180+
.build();
181+
}
182+
return catalog;
183+
}
147184
}

incubator/binding-asyncapi/src/main/java/io/aklivity/zilla/runtime/binding/asyncapi/internal/view/AsyncapiServerView.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,18 @@
1414
*/
1515
package io.aklivity.zilla.runtime.binding.asyncapi.internal.view;
1616

17+
import static org.agrona.LangUtil.rethrowUnchecked;
18+
1719
import java.net.URI;
1820
import java.util.List;
1921
import java.util.Map;
2022

21-
import io.aklivity.zilla.runtime.binding.asyncapi.internal.model.AsyncapiServer;
22-
import static org.agrona.LangUtil.rethrowUnchecked;
23-
2423
import com.fasterxml.jackson.core.JsonProcessingException;
2524
import com.fasterxml.jackson.core.type.TypeReference;
2625
import com.fasterxml.jackson.databind.ObjectMapper;
2726

27+
import io.aklivity.zilla.runtime.binding.asyncapi.internal.model.AsyncapiServer;
28+
2829
public final class AsyncapiServerView
2930
{
3031
private final AsyncapiServer server;
@@ -40,7 +41,8 @@ public List<Map<String, List<String>>> security()
4041
List<Map<String, List<String>>> security = null;
4142
try
4243
{
43-
security = objectMapper.readValue(server.security.toString(), new TypeReference<>() { });
44+
security = objectMapper.readValue(server.security.toString(), new TypeReference<>()
45+
{ });
4446
}
4547
catch (JsonProcessingException e)
4648
{

0 commit comments

Comments
 (0)