Что является исправлением для "Объединение не поддерживается для узлов типа NamedTypeExpressionNode и TypeDeclarationNode"

У меня есть RAML, который определяет некоторые коды состояния HTTP в ответах примерно так (типы данных упрощены для обсуждения)...


#%RAML 1.0
title: Schmitle.
version: v0
protocols: [HTTP]
baseUri: http://api.deduper.com
mediaType: application/json

uses:
  deduper: libs/lib-deduper.raml

/myResources/{someId}:
  uriParameters:
    someId:
      type: string

  get:
    body:
      application/json:
        type: deduper.MyGetRequestType

    responses:
      200:
        body:
          application/json:
            type: deduper.MyResponseType

      400:
        body: 
          application/json:
            type: deduper.MyErrorType
      429:
        body: 
          application/json:
            type: deduper.MyErrorType
      500:
        body: 
          application/json:
            type: deduper.MyErrorType

  post:

    body:
          application/json:
            type: deduper.MyRequestType

    responses: 
      200:     

      400: 
        body:
          application/json:
             type: deduper.MyErrorType

      429:
        body: 
          application/json:
             type: deduper.MyErrorType
      500:
        body: 
          application/json:
             type: deduper.MyErrorType

  put:

    body:
          application/json:
             type: deduper.MyRequestType

    responses:
      200:

      400:
        body: 
          application/json:
             type: deduper.MyErrorType
      429:
        body: 
          application/json:
             type: deduper.MyErrorType
      500:
        body: 
          application/json:
             type: deduper.MyErrorType

MyRequestType:
    properties:
      foo:
        type: string
        pattern: ^[a-zA-Z]{1024}$
        minLength: 1
        maxLength: 1024
        required: true

MyResponseType:
    properties:
      bar:
        type: string
        pattern: ^[a-zA-Z]{1024}$
        minLength: 1
        maxLength: 1024
        required: true

MyErrorType:
    properties:
      bar:
        type: string
        pattern: ^[a-zA-Z]{1024}$
        minLength: 1
        maxLength: 1024
        required: true

----

Когда я запускаю свой фактический RAML (из которого вышеприведенное является только репрезентативным) с помощью утилиты MuleSoft с открытым исходным кодом raml-to-jaxrs-cli, я получаю следующую ошибку из анализатора RAML (я использую версию утилиты 2.0.0 утилиты)...


Exception in thread "main" java.lang.RuntimeException: Merging not supported for nodes of type NamedTypeExpressionNode and TypeDeclarationNode
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:64)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:135)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:52)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:135)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:52)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:135)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:52)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:135)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:52)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:135)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:52)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:135)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsMerger.merge(ResourceTypesTraitsMerger.java:52)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsTransformer.applyResourceType(ResourceTypesTraitsTransformer.java:163)
        at org.raml.v2.internal.impl.commons.phase.ResourceTypesTraitsTransformer.transform(ResourceTypesTraitsTransformer.java:97)
        at org.raml.yagi.framework.phase.TransformationPhase.apply(TransformationPhase.java:45)
        at org.raml.yagi.framework.phase.TransformationPhase.apply(TransformationPhase.java:54)
        at org.raml.yagi.framework.phase.TransformationPhase.apply(TransformationPhase.java:54)
        at org.raml.yagi.framework.phase.TransformationPhase.apply(TransformationPhase.java:54)
        at org.raml.yagi.framework.phase.TransformationPhase.apply(TransformationPhase.java:54)
        at org.raml.v2.internal.impl.v10.Raml10Builder.runPhases(Raml10Builder.java:114)
        at org.raml.v2.internal.impl.v10.Raml10Builder.build(Raml10Builder.java:93)
        at org.raml.v2.internal.impl.RamlBuilder.build(RamlBuilder.java:116)
        at org.raml.v2.internal.impl.RamlBuilder.build(RamlBuilder.java:100)
        at org.raml.v2.api.RamlModelBuilder.buildApi(RamlModelBuilder.java:125)
        at org.raml.v2.api.RamlModelBuilder.buildApi(RamlModelBuilder.java:115)
        at org.raml.jaxrs.generator.RamlScanner.handle(RamlScanner.java:66)
        at org.raml.jaxrs.generator.RamlScanner.handle(RamlScanner.java:55)
        at org.raml.jaxrs.ramltojaxrs.Main.main(Main.java:75)

Однако, если я закомментирую коды состояния 400, 429 и 500 из post узел myResources/{someId} затем анализатор утилиты raml-to-jaxrs-cli обрабатывает get а также put коды состояния просто отлично. Проблема в том, что, хотя он и разбирается нормально, генератор не генерирует правильный Java-код для post вещи.

Это фрагмент JAX-RS, связанный с кодом состояния, который инструмент генерирует...


...

public static GetMyResourcesBySomeIdResponse respond400WithApplicationJson(MyErrorType entity) {
  Response.ResponseBuilder responseBuilder = Response.status(400).header("Content-Type", "application/json");
  responseBuilder.entity(entity);
  return new GetMyResourcesBySomeIdResponse(responseBuilder.build(), entity);
}

public static GetMyResourcesBySomeIdResponse respond429WithApplicationJson(MyErrorType entity) {
  Response.ResponseBuilder responseBuilder = Response.status(429).header("Content-Type", "application/json");
  responseBuilder.entity(entity);
  return new GetMyResourcesBySomeIdResponse(responseBuilder.build(), entity);
}

public static GetMyResourcesBySomeIdResponse respond500WithApplicationJson(MyErrorType entity) {
  Response.ResponseBuilder responseBuilder = Response.status(500).header("Content-Type", "application/json");
  responseBuilder.entity(entity);
  return new GetMyResourcesBySomeIdResponse(responseBuilder.build(), entity);
}

...

public static PostMyResourcesBySomeIdResponse respond400WithApplicationJson(MyResourcesSomeIdPost400ApplicationJson entity) {
  Response.ResponseBuilder responseBuilder = Response.status(400).header("Content-Type", "application/json");
  responseBuilder.entity(entity);
  return new PostMyResourcesBySomeIdResponse(responseBuilder.build(), entity);
}

public static PostMyResourcesBySomeIdResponse respond429WithApplicationJson(MyResourcesSomeIdPost429ApplicationJson entity) {
  Response.ResponseBuilder responseBuilder = Response.status(429).header("Content-Type", "application/json");
  responseBuilder.entity(entity);
  return new PostMyResourcesBySomeIdResponse(responseBuilder.build(), entity);
}

public static PostMyResourcesBySomeIdResponse respond500WithApplicationJson(MyResourcesSomeIdPost500ApplicationJson entity) {
  Response.ResponseBuilder responseBuilder = Response.status(500).header("Content-Type", "application/json");
  responseBuilder.entity(entity);
  return new PostMyResourcesBySomeIdResponse(responseBuilder.build(), entity);
}

...

public static PutMyResourcesBySomeIdResponse respond400WithApplicationJson(MyErrorType entity) {
  Response.ResponseBuilder responseBuilder = Response.status(400).header("Content-Type", "application/json");
  responseBuilder.entity(entity);
  return new PutMyResourcesBySomeIdResponse(responseBuilder.build(), entity);
}

public static PutMyResourcesBySomeIdResponse respond429WithApplicationJson(MyErrorType entity) {
  Response.ResponseBuilder responseBuilder = Response.status(429).header("Content-Type", "application/json");
  responseBuilder.entity(entity);
  return new PutMyResourcesBySomeIdResponse(responseBuilder.build(), entity);
}

public static PutMyResourcesBySomeIdResponse respond500WithApplicationJson(MyErrorType entity) {
  Response.ResponseBuilder responseBuilder = Response.status(500).header("Content-Type", "application/json");
  responseBuilder.entity(entity);
  return new PutMyResourcesBySomeIdResponse(responseBuilder.build(), entity);
}           

Итак, вот мой вопрос: что мне нужно сделать, чтобы парсер утилиты raml-to-jaxrs-cli обрабатывал связанные с ошибками коды состояния моего post узел успешно?

Я был бы благодарен за дополнительное объяснение того, почему парсер задыхается только на post коды состояния тоже. Пожалуйста?

ТИА

0 ответов

Другие вопросы по тегам