Skip to content

Payload property named message breaks with null value #863

Description

@ly29

Payload property named message breaks with null value

          "type": "object",
          "properties": {
            "message": {
              "type": ["string", "null"],
              "maxLength": 50
            }
          },
          "required": ["message"],
        },
        "examples": [{
            "name": "return",
            "payload": {
              "message": null
            }
          }
        ]
      }

It breaks rendering of the asyncapi spec, validation does not give valid errors and studio.asyncapi.com breaks

Expected result
It works and renders. Note that this works if the message property is renamed or given a non null example value.

Actual result

The following error is given

	Error thrown during AsyncAPI document validation. Name: Error, message: jsonPath: Cannot read properties of null (reading 'schemaFormat'): _$_property === 'message' && _$_v.schemaFormat === void 0, stack: Error: jsonPath: Cannot read properties of null (reading 'schemaFormat'): _$_property === 'message' && _$_v.schemaFormat === void 0 at v._eval (https://studio.asyncapi.com/static/js/main.f7f7093d.js:2:4494941) at https://studio.asyncapi.com/static/js/main.f7f7093d.js:2:4491179 at https://studio.asyncapi.com/static/js/main.f7f7093d.js:2:4493697 at Array.forEach (<anonymous>) at v._walk (https://studio.asyncapi.com/static/js/main.f7f7093d.js:2:4493676) at v._trace (https://studio.asyncapi.com/static/js/main.f7f7093d.js:2:4491130) at v._trace (https://studio.asyncapi.com/static/js/main.f7f7093d.js:2:4490522) at https://studio.asyncapi.com/static/js/main.f7f7093d.js:2:4490621 at https://studio.asyncapi.com/static/js/main.f7f7093d.js:2:4493697 at Array.forEach (<anonymous>)

Steps to reproduce

Paste the following gist into the asyncapi studio
https://gist.github.com/ly29/6b56cc8252ad48ac681f19ea468d540f

Troubleshooting
I have reduced the issue down to one specific property that breaks.

Activity

  1. github-actions commented on Oct 3, 2023

    @github-actions

    Welcome to AsyncAPI. Thanks a lot for reporting your first issue. Please check out our contributors guide and the instructions about a basic recommended setup useful for opening a pull request.
    Keep in mind there are also other channels you can use to interact with AsyncAPI community. For more details check out this issue.

  2. derberg commented on Oct 3, 2023

    @derberg
    Member

    thanks for the issue,

    so basically even though the message type is a tuple of string and null the example with "message": null throws an issue, but if you change to "message": "test" it works fine

    this is a validation issue, cannot be fixed in the react component. Moving to parser

  3. github-actions commented on Oct 3, 2023

    @github-actions

    Welcome to AsyncAPI. Thanks a lot for reporting your first issue. Please check out our contributors guide and the instructions about a basic recommended setup useful for opening a pull request.
    Keep in mind there are also other channels you can use to interact with AsyncAPI community. For more details check out this issue.

  4. ly29 commented on Oct 3, 2023

    @ly29
    Author

    Yeah it was not clear to me where to report, thank you taking care of that.

  5. ly29 commented on Oct 5, 2023

    @ly29
    Author

    So this looks like a bug to me. Any pointers to where to fix. Should be a reasonably small fix I imagine...

  6. jonaslagoni commented on Nov 9, 2023

    @jonaslagoni
    Member

    Without being 100% sure, I think its

    'asyncapi2-message-examples': {
    that might be complaining.

  7. github-actions commented on Mar 9, 2024

    @github-actions

    This issue has been automatically marked as stale because it has not had recent activity 😴

    It will be closed in 120 days if no further activity occurs. To unstale this issue, add a comment with a detailed explanation.

    There can be many reasons why some specific issue has no activity. The most probable cause is lack of time, not lack of interest. AsyncAPI Initiative is a Linux Foundation project not owned by a single for-profit company. It is a community-driven initiative ruled under open governance model.

    Let us figure out together how to push this issue forward. Connect with us through one of many communication channels we established here.

    Thank you for your patience ❤️

  8. tarunspandit commented on Jul 24, 2026

    @tarunspandit

    Hi maintainers — I would like to be considered for this issue under the 2026-08 Microgrant Program, if it remains available after the round is finalized.

    My proposed approach is:

    1. add a minimal regression fixture where an object has a nullable property named message and the example value is null;
    2. trace the ruleset/JSONPath callback that assumes every message value exposes schemaFormat;
    3. guard the null/non-schema case narrowly, without suppressing valid diagnostics for actual message objects;
    4. verify the original null case, a non-null string value, and the same schema with a renamed property; and
    5. add v2/v3 coverage if the affected ruleset is shared across specification versions.

    I understand assignment is at the maintainers' discretion, and I will wait for confirmation before opening a PR. Is this approach aligned with the intended fix?

  9. kishansinghifs1 commented on Jul 29, 2026

    @kishansinghifs1

    Hiii @AayushSaini101 can I work on this ?

  10. tzh476 commented on Aug 23, 2026

    @tzh476

    Implement and verified a fix. Root cause: several v2-ruleset given selectors navigate @property === "message" without a !@null guard, so when a payload object has a nullable property literally named message (e.g. message: null), the JSONPath reads .schemaFormat/.oneOf on null and crashes validation. Fix: add !@null && to those selectors in ruleset/v2/ruleset.ts (schemaFormat, payload default/examples, oneOf) and ruleset/v2/functions/messageExamples-spectral-rule-v2.ts. Verified: the OP example validates with no error diagnostic; full ruleset/validate suite passes (43 suites / 244 tests). Happy to open the PR when assigned for the microgrant round; otherwise the same change can be applied by whoever is assigned. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions