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