Что является исправлением для "Объединение не поддерживается для узлов типа 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
коды состояния тоже. Пожалуйста?
ТИА