解决方法“名称为TypeExpressionNode和TypeDeclarationNode类型的节点不支持合并”的解决方法

时间:2018-06-30 05:02:35

标签: java jax-rs raml raml-java-parser raml-1.0

我得到了一些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

----

当我通过MuleSoft的开源 raml-to-jaxrs-cli utility 运行我的实际RAML(其中上面只是代表性的)时,我从RAML中得到以下错误解析器(我正在使用实用程序的release version 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)

但是,令人困惑的是,如果我从post的{​​{1}}节点注释掉了400、429和500状态码,那么 raml-to-jaxrs-cli utility's 解析器进程myResources/{someId}get状态码就可以了。问题是-即使解析得很好-生成器也无法为put东西生成正确的Java代码。

这是该工具最终生成的与状态码相关的JAX-RS的摘要...


post

这是我的问题: 我需要做些什么才能使raml-to-jaxrs-cli utility's解析器成功处理我的... 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); } 节点的与错误相关的状态码?

对于解析器为什么也仅在状态post处阻塞的补充说明,我将不胜感激。好吗?

TIA

0 个答案:

没有答案