-
Notifications
You must be signed in to change notification settings - Fork 77
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
StackOverflow error on AsyncAPI creation #1052
Comments
Welcome to Springwolf. Thanks a lot for reporting your first issue. Please check out our contributors guide and feel free to join us on discord. |
Hi @slava110 Enabling the debug logs will potentially add a bit more context: https://www.springwolf.dev/docs/faq#show-debug-output-in-the-logs Can you share the payload PaymentResponse class? I suspect some recursive structure, which regardless should be handled by Springwolf. |
Hi. Thank you for quick response. Log
payment.proto
Generated PaymentResponse classpublic static final class PaymentResponse extends
com.google.protobuf.GeneratedMessage implements
// @@protoc_insertion_point(message_implements:model.PaymentResponse)
PaymentResponseOrBuilder {
private static final long serialVersionUID = 0L;
static {
com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
/* major= */ 4,
/* minor= */ 28,
/* patch= */ 3,
/* suffix= */ "",
PaymentResponse.class.getName());
}
// Use PaymentResponse.newBuilder() to construct.
private PaymentResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
super(builder);
}
private PaymentResponse() {
status_ = 0;
redirectUrl_ = "";
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return com.microdelivery.model.Payment.internal_static_model_PaymentResponse_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.microdelivery.model.Payment.internal_static_model_PaymentResponse_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.microdelivery.model.Payment.PaymentResponse.class, com.microdelivery.model.Payment.PaymentResponse.Builder.class);
}
/**
* Protobuf enum {@code model.PaymentResponse.Status}
*/
public enum Status
implements com.google.protobuf.ProtocolMessageEnum {
/**
* <code>SUCCESSFUL = 0;</code>
*/
SUCCESSFUL(0),
/**
* <code>FAILED = 1;</code>
*/
FAILED(1),
/**
* <code>ABORTED = 2;</code>
*/
ABORTED(2),
/**
* <code>UNAVAILABLE = 3;</code>
*/
UNAVAILABLE(3),
UNRECOGNIZED(-1),
;
static {
com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
/* major= */ 4,
/* minor= */ 28,
/* patch= */ 3,
/* suffix= */ "",
Status.class.getName());
}
/**
* <code>SUCCESSFUL = 0;</code>
*/
public static final int SUCCESSFUL_VALUE = 0;
/**
* <code>FAILED = 1;</code>
*/
public static final int FAILED_VALUE = 1;
/**
* <code>ABORTED = 2;</code>
*/
public static final int ABORTED_VALUE = 2;
/**
* <code>UNAVAILABLE = 3;</code>
*/
public static final int UNAVAILABLE_VALUE = 3;
public final int getNumber() {
if (this == UNRECOGNIZED) {
throw new java.lang.IllegalArgumentException(
"Can't get the number of an unknown enum value.");
}
return value;
}
/**
* @param value The numeric wire value of the corresponding enum entry.
* @return The enum associated with the given numeric wire value.
* @deprecated Use {@link #forNumber(int)} instead.
*/
@java.lang.Deprecated
public static Status valueOf(int value) {
return forNumber(value);
}
/**
* @param value The numeric wire value of the corresponding enum entry.
* @return The enum associated with the given numeric wire value.
*/
public static Status forNumber(int value) {
switch (value) {
case 0: return SUCCESSFUL;
case 1: return FAILED;
case 2: return ABORTED;
case 3: return UNAVAILABLE;
default: return null;
}
}
public static com.google.protobuf.Internal.EnumLiteMap<Status>
internalGetValueMap() {
return internalValueMap;
}
private static final com.google.protobuf.Internal.EnumLiteMap<
Status> internalValueMap =
new com.google.protobuf.Internal.EnumLiteMap<Status>() {
public Status findValueByNumber(int number) {
return Status.forNumber(number);
}
};
public final com.google.protobuf.Descriptors.EnumValueDescriptor
getValueDescriptor() {
if (this == UNRECOGNIZED) {
throw new java.lang.IllegalStateException(
"Can't get the descriptor of an unrecognized enum value.");
}
return getDescriptor().getValues().get(ordinal());
}
public final com.google.protobuf.Descriptors.EnumDescriptor
getDescriptorForType() {
return getDescriptor();
}
public static final com.google.protobuf.Descriptors.EnumDescriptor
getDescriptor() {
return com.microdelivery.model.Payment.PaymentResponse.getDescriptor().getEnumTypes().get(0);
}
private static final Status[] VALUES = values();
public static Status valueOf(
com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
if (desc.getType() != getDescriptor()) {
throw new java.lang.IllegalArgumentException(
"EnumValueDescriptor is not for this type.");
}
if (desc.getIndex() == -1) {
return UNRECOGNIZED;
}
return VALUES[desc.getIndex()];
}
private final int value;
private Status(int value) {
this.value = value;
}
// @@protoc_insertion_point(enum_scope:model.PaymentResponse.Status)
}
public static final int ID_FIELD_NUMBER = 1;
private int id_ = 0;
/**
* <code>int32 id = 1;</code>
* @return The id.
*/
@java.lang.Override
public int getId() {
return id_;
}
public static final int STATUS_FIELD_NUMBER = 2;
private int status_ = 0;
/**
* <code>.model.PaymentResponse.Status status = 2;</code>
* @return The enum numeric value on the wire for status.
*/
@java.lang.Override public int getStatusValue() {
return status_;
}
/**
* <code>.model.PaymentResponse.Status status = 2;</code>
* @return The status.
*/
@java.lang.Override public com.microdelivery.model.Payment.PaymentResponse.Status getStatus() {
com.microdelivery.model.Payment.PaymentResponse.Status result = com.microdelivery.model.Payment.PaymentResponse.Status.forNumber(status_);
return result == null ? com.microdelivery.model.Payment.PaymentResponse.Status.UNRECOGNIZED : result;
}
public static final int REDIRECTURL_FIELD_NUMBER = 3;
@SuppressWarnings("serial")
private volatile java.lang.Object redirectUrl_ = "";
/**
* <code>string redirectUrl = 3;</code>
* @return The redirectUrl.
*/
@java.lang.Override
public java.lang.String getRedirectUrl() {
java.lang.Object ref = redirectUrl_;
if (ref instanceof java.lang.String) {
return (java.lang.String) ref;
} else {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
java.lang.String s = bs.toStringUtf8();
redirectUrl_ = s;
return s;
}
}
/**
* <code>string redirectUrl = 3;</code>
* @return The bytes for redirectUrl.
*/
@java.lang.Override
public com.google.protobuf.ByteString
getRedirectUrlBytes() {
java.lang.Object ref = redirectUrl_;
if (ref instanceof java.lang.String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(java.lang.String) ref);
redirectUrl_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
private byte memoizedIsInitialized = -1;
@java.lang.Override
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized == 1) return true;
if (isInitialized == 0) return false;
memoizedIsInitialized = 1;
return true;
}
@java.lang.Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
if (id_ != 0) {
output.writeInt32(1, id_);
}
if (status_ != com.microdelivery.model.Payment.PaymentResponse.Status.SUCCESSFUL.getNumber()) {
output.writeEnum(2, status_);
}
if (!com.google.protobuf.GeneratedMessage.isStringEmpty(redirectUrl_)) {
com.google.protobuf.GeneratedMessage.writeString(output, 3, redirectUrl_);
}
getUnknownFields().writeTo(output);
}
@java.lang.Override
public int getSerializedSize() {
int size = memoizedSize;
if (size != -1) return size;
size = 0;
if (id_ != 0) {
size += com.google.protobuf.CodedOutputStream
.computeInt32Size(1, id_);
}
if (status_ != com.microdelivery.model.Payment.PaymentResponse.Status.SUCCESSFUL.getNumber()) {
size += com.google.protobuf.CodedOutputStream
.computeEnumSize(2, status_);
}
if (!com.google.protobuf.GeneratedMessage.isStringEmpty(redirectUrl_)) {
size += com.google.protobuf.GeneratedMessage.computeStringSize(3, redirectUrl_);
}
size += getUnknownFields().getSerializedSize();
memoizedSize = size;
return size;
}
@java.lang.Override
public boolean equals(final java.lang.Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof com.microdelivery.model.Payment.PaymentResponse)) {
return super.equals(obj);
}
com.microdelivery.model.Payment.PaymentResponse other = (com.microdelivery.model.Payment.PaymentResponse) obj;
if (getId()
!= other.getId()) return false;
if (status_ != other.status_) return false;
if (!getRedirectUrl()
.equals(other.getRedirectUrl())) return false;
if (!getUnknownFields().equals(other.getUnknownFields())) return false;
return true;
}
@java.lang.Override
public int hashCode() {
if (memoizedHashCode != 0) {
return memoizedHashCode;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
hash = (37 * hash) + ID_FIELD_NUMBER;
hash = (53 * hash) + getId();
hash = (37 * hash) + STATUS_FIELD_NUMBER;
hash = (53 * hash) + status_;
hash = (37 * hash) + REDIRECTURL_FIELD_NUMBER;
hash = (53 * hash) + getRedirectUrl().hashCode();
hash = (29 * hash) + getUnknownFields().hashCode();
memoizedHashCode = hash;
return hash;
}
public static com.microdelivery.model.Payment.PaymentResponse parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static com.microdelivery.model.Payment.PaymentResponse parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static com.microdelivery.model.Payment.PaymentResponse parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static com.microdelivery.model.Payment.PaymentResponse parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static com.microdelivery.model.Payment.PaymentResponse parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static com.microdelivery.model.Payment.PaymentResponse parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static com.microdelivery.model.Payment.PaymentResponse parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessage
.parseWithIOException(PARSER, input);
}
public static com.microdelivery.model.Payment.PaymentResponse parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessage
.parseWithIOException(PARSER, input, extensionRegistry);
}
public static com.microdelivery.model.Payment.PaymentResponse parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessage
.parseDelimitedWithIOException(PARSER, input);
}
public static com.microdelivery.model.Payment.PaymentResponse parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessage
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
public static com.microdelivery.model.Payment.PaymentResponse parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessage
.parseWithIOException(PARSER, input);
}
public static com.microdelivery.model.Payment.PaymentResponse parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessage
.parseWithIOException(PARSER, input, extensionRegistry);
}
@java.lang.Override
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
public static Builder newBuilder(com.microdelivery.model.Payment.PaymentResponse prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@java.lang.Override
public Builder toBuilder() {
return this == DEFAULT_INSTANCE
? new Builder() : new Builder().mergeFrom(this);
}
@java.lang.Override
protected Builder newBuilderForType(
com.google.protobuf.GeneratedMessage.BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
/**
* Protobuf type {@code model.PaymentResponse}
*/
public static final class Builder extends
com.google.protobuf.GeneratedMessage.Builder<Builder> implements
// @@protoc_insertion_point(builder_implements:model.PaymentResponse)
com.microdelivery.model.Payment.PaymentResponseOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return com.microdelivery.model.Payment.internal_static_model_PaymentResponse_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.microdelivery.model.Payment.internal_static_model_PaymentResponse_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.microdelivery.model.Payment.PaymentResponse.class, com.microdelivery.model.Payment.PaymentResponse.Builder.class);
}
// Construct using com.microdelivery.model.Payment.PaymentResponse.newBuilder()
private Builder() {
}
private Builder(
com.google.protobuf.GeneratedMessage.BuilderParent parent) {
super(parent);
}
@java.lang.Override
public Builder clear() {
super.clear();
bitField0_ = 0;
id_ = 0;
status_ = 0;
redirectUrl_ = "";
return this;
}
@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return com.microdelivery.model.Payment.internal_static_model_PaymentResponse_descriptor;
}
@java.lang.Override
public com.microdelivery.model.Payment.PaymentResponse getDefaultInstanceForType() {
return com.microdelivery.model.Payment.PaymentResponse.getDefaultInstance();
}
@java.lang.Override
public com.microdelivery.model.Payment.PaymentResponse build() {
com.microdelivery.model.Payment.PaymentResponse result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
@java.lang.Override
public com.microdelivery.model.Payment.PaymentResponse buildPartial() {
com.microdelivery.model.Payment.PaymentResponse result = new com.microdelivery.model.Payment.PaymentResponse(this);
if (bitField0_ != 0) { buildPartial0(result); }
onBuilt();
return result;
}
private void buildPartial0(com.microdelivery.model.Payment.PaymentResponse result) {
int from_bitField0_ = bitField0_;
if (((from_bitField0_ & 0x00000001) != 0)) {
result.id_ = id_;
}
if (((from_bitField0_ & 0x00000002) != 0)) {
result.status_ = status_;
}
if (((from_bitField0_ & 0x00000004) != 0)) {
result.redirectUrl_ = redirectUrl_;
}
}
@java.lang.Override
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof com.microdelivery.model.Payment.PaymentResponse) {
return mergeFrom((com.microdelivery.model.Payment.PaymentResponse)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(com.microdelivery.model.Payment.PaymentResponse other) {
if (other == com.microdelivery.model.Payment.PaymentResponse.getDefaultInstance()) return this;
if (other.getId() != 0) {
setId(other.getId());
}
if (other.status_ != 0) {
setStatusValue(other.getStatusValue());
}
if (!other.getRedirectUrl().isEmpty()) {
redirectUrl_ = other.redirectUrl_;
bitField0_ |= 0x00000004;
onChanged();
}
this.mergeUnknownFields(other.getUnknownFields());
onChanged();
return this;
}
@java.lang.Override
public final boolean isInitialized() {
return true;
}
@java.lang.Override
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
if (extensionRegistry == null) {
throw new java.lang.NullPointerException();
}
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
case 8: {
id_ = input.readInt32();
bitField0_ |= 0x00000001;
break;
} // case 8
case 16: {
status_ = input.readEnum();
bitField0_ |= 0x00000002;
break;
} // case 16
case 26: {
redirectUrl_ = input.readStringRequireUtf8();
bitField0_ |= 0x00000004;
break;
} // case 26
default: {
if (!super.parseUnknownField(input, extensionRegistry, tag)) {
done = true; // was an endgroup tag
}
break;
} // default:
} // switch (tag)
} // while (!done)
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.unwrapIOException();
} finally {
onChanged();
} // finally
return this;
}
private int bitField0_;
private int id_ ;
/**
* <code>int32 id = 1;</code>
* @return The id.
*/
@java.lang.Override
public int getId() {
return id_;
}
/**
* <code>int32 id = 1;</code>
* @param value The id to set.
* @return This builder for chaining.
*/
public Builder setId(int value) {
id_ = value;
bitField0_ |= 0x00000001;
onChanged();
return this;
}
/**
* <code>int32 id = 1;</code>
* @return This builder for chaining.
*/
public Builder clearId() {
bitField0_ = (bitField0_ & ~0x00000001);
id_ = 0;
onChanged();
return this;
}
private int status_ = 0;
/**
* <code>.model.PaymentResponse.Status status = 2;</code>
* @return The enum numeric value on the wire for status.
*/
@java.lang.Override public int getStatusValue() {
return status_;
}
/**
* <code>.model.PaymentResponse.Status status = 2;</code>
* @param value The enum numeric value on the wire for status to set.
* @return This builder for chaining.
*/
public Builder setStatusValue(int value) {
status_ = value;
bitField0_ |= 0x00000002;
onChanged();
return this;
}
/**
* <code>.model.PaymentResponse.Status status = 2;</code>
* @return The status.
*/
@java.lang.Override
public com.microdelivery.model.Payment.PaymentResponse.Status getStatus() {
com.microdelivery.model.Payment.PaymentResponse.Status result = com.microdelivery.model.Payment.PaymentResponse.Status.forNumber(status_);
return result == null ? com.microdelivery.model.Payment.PaymentResponse.Status.UNRECOGNIZED : result;
}
/**
* <code>.model.PaymentResponse.Status status = 2;</code>
* @param value The status to set.
* @return This builder for chaining.
*/
public Builder setStatus(com.microdelivery.model.Payment.PaymentResponse.Status value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000002;
status_ = value.getNumber();
onChanged();
return this;
}
/**
* <code>.model.PaymentResponse.Status status = 2;</code>
* @return This builder for chaining.
*/
public Builder clearStatus() {
bitField0_ = (bitField0_ & ~0x00000002);
status_ = 0;
onChanged();
return this;
}
private java.lang.Object redirectUrl_ = "";
/**
* <code>string redirectUrl = 3;</code>
* @return The redirectUrl.
*/
public java.lang.String getRedirectUrl() {
java.lang.Object ref = redirectUrl_;
if (!(ref instanceof java.lang.String)) {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
java.lang.String s = bs.toStringUtf8();
redirectUrl_ = s;
return s;
} else {
return (java.lang.String) ref;
}
}
/**
* <code>string redirectUrl = 3;</code>
* @return The bytes for redirectUrl.
*/
public com.google.protobuf.ByteString
getRedirectUrlBytes() {
java.lang.Object ref = redirectUrl_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(java.lang.String) ref);
redirectUrl_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
/**
* <code>string redirectUrl = 3;</code>
* @param value The redirectUrl to set.
* @return This builder for chaining.
*/
public Builder setRedirectUrl(
java.lang.String value) {
if (value == null) { throw new NullPointerException(); }
redirectUrl_ = value;
bitField0_ |= 0x00000004;
onChanged();
return this;
}
/**
* <code>string redirectUrl = 3;</code>
* @return This builder for chaining.
*/
public Builder clearRedirectUrl() {
redirectUrl_ = getDefaultInstance().getRedirectUrl();
bitField0_ = (bitField0_ & ~0x00000004);
onChanged();
return this;
}
/**
* <code>string redirectUrl = 3;</code>
* @param value The bytes for redirectUrl to set.
* @return This builder for chaining.
*/
public Builder setRedirectUrlBytes(
com.google.protobuf.ByteString value) {
if (value == null) { throw new NullPointerException(); }
checkByteStringIsUtf8(value);
redirectUrl_ = value;
bitField0_ |= 0x00000004;
onChanged();
return this;
}
// @@protoc_insertion_point(builder_scope:model.PaymentResponse)
}
// @@protoc_insertion_point(class_scope:model.PaymentResponse)
private static final com.microdelivery.model.Payment.PaymentResponse DEFAULT_INSTANCE;
static {
DEFAULT_INSTANCE = new com.microdelivery.model.Payment.PaymentResponse();
}
public static com.microdelivery.model.Payment.PaymentResponse getDefaultInstance() {
return DEFAULT_INSTANCE;
}
private static final com.google.protobuf.Parser<PaymentResponse>
PARSER = new com.google.protobuf.AbstractParser<PaymentResponse>() {
@java.lang.Override
public PaymentResponse parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
Builder builder = newBuilder();
try {
builder.mergeFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.setUnfinishedMessage(builder.buildPartial());
} catch (com.google.protobuf.UninitializedMessageException e) {
throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
} catch (java.io.IOException e) {
throw new com.google.protobuf.InvalidProtocolBufferException(e)
.setUnfinishedMessage(builder.buildPartial());
}
return builder.buildPartial();
}
};
public static com.google.protobuf.Parser<PaymentResponse> parser() {
return PARSER;
}
@java.lang.Override
public com.google.protobuf.Parser<PaymentResponse> getParserForType() {
return PARSER;
}
@java.lang.Override
public com.microdelivery.model.Payment.PaymentResponse getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
} To generate this mess I'm using |
Thank you, we will have to look into it. In case you want to experiment, debug and contribute: |
Hi. I've tested both my and your schema in https://github.com/springwolf/springwolf-core/tree/master/springwolf-examples/springwolf-amqp-example project Log
|
If you have configured springwolf in init lazy mode, the endpoint must be called first. It sounds like that you have adapted the example already. Do you mind putting it on a branch and open a PR? That improves chances that we can quickly reproduce it. When running gradlew test (ApiSystemTest), the error/exception should appear. Just using your proto file did not reproduce the error for me, i havent looked into the dependencies nor used both request and response object together. |
I've created PR #1053. I can also upload to GitHub my own project's source code c:
Maybe it's a problem specifically with protobuf + RabbitMQ mix? |
I've used debug mode and
I might be wrong cause I have no idea what's going on with avro properties and haven't dig into your codebase much. So take it with a grain of salt |
Hi @slava110, I opened #1062 to address it. We will probably review it on Friday. Still, I am surprised why all these fields appear in the Schema (in additional to all the other protobuf classes). The protobuf file in the kafka examples does not include all these additional fields in the Schema, and thereby no cycle... |
I've added ObjectMapperConfiguration from Kafka example module to AMQP example module and it fixed the issue. That's why Kafka example works fine |
#1062 is merged now. Thank you for the ObjectMapperConfiguration reminder, I updated the website to add some information for Protobuf: springwolf/springwolf.github.io#99 |
The change is staged for release and will be part of the next release. If you want to try and verify it in your application today, Thank you for the report/contribution! |
The change is available in the latest release. 🎉 Thank you for the report/contribution and making Springwolf better! |
Describe the bug
StackOverflow error on AsyncAPI creation
java.lang.RuntimeException: Error occured during creation of AsyncAPI
Caused by: java.lang.StackOverflowError: null
In
io.github.springwolf.core.asyncapi.components.postprocessors.AvroSchemaPostProcessor.removeAvroProperties
Dependencies and versions used
SpringBoot 3.3.5
Java 17
Code example
RabbitMQ Configuration
Consumer
Producer
Spring `application.properties`
Stack trace and error logs
Error
The text was updated successfully, but these errors were encountered: