首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过OData -生成器-cli创建odata客户端时出现异常

通过OData -生成器-cli创建odata客户端时出现异常
EN

Stack Overflow用户
提问于 2021-01-08 16:31:30
回答 3查看 286关注 0票数 0

我想通过odata-generator-cli 3.35.0在Java语言中创建一个OData客户机。

使用以下Service from Business Hub的.edmx和swagger文件。

正在生成OData客户端,但出现异常:

代码语言:javascript
复制
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.ODataToVdmGenerator - Processing 1 OData service...
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.ODataToVdmGenerator - Processing OData service 'Integration Content' at /cpi/api/v1
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator -   Found entity type IntegrationDesigntimeArtifact from set IntegrationDesigntimeArtifacts
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator -   Found entity type RuntimeArtifactErrorInformation from set RuntimeArtifactErrorInformations
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator -   Found entity type Configuration from set Configurations
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator -   Found entity type Resource from set Resources
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator -   Found entity type IntegrationRuntimeArtifact from set IntegrationRuntimeArtifacts
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamingContext - Found more than one occurrence of the Java identifier type. The new identifier has been renamed to type_2
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator -   Found entity type IntegrationPackage from set IntegrationPackages
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator -   Found entity type ServiceEndpoint from set ServiceEndpoints
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator -   Found entity type EntryPoint from set EntryPoints
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamingContext - Found more than one occurrence of the Java identifier type. The new identifier has been renamed to type_2
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator -   Found entity type Definition from set APIDefinitions
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator -   Found entity type ValueMappingDesigntimeArtifact from set ValueMappingDesigntimeArtifacts
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator -   Found entity type ValMapSchema from set ValMapSchema
[main] WARN com.sap.cloud.sdk.datamodel.odata.generator.ODataToVdmGenerator - Error in file IntegrationContent; unable to generate all VDM classes.
com.sap.cloud.sdk.datamodel.odata.generator.ODataGeneratorReadException: org.apache.olingo.odata2.api.edm.EdmException: An exception occurred.
        at com.sap.cloud.sdk.datamodel.odata.generator.EdmService$TypedAdapter.getType(EdmService.java:317)
        at com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator.processNavigationProperties(NamespaceClassGenerator.java:1098)
        at com.sap.cloud.sdk.datamodel.odata.generator.NamespaceClassGenerator.processEntitySet(NamespaceClassGenerator.java:891)
        at com.sap.cloud.sdk.datamodel.odata.generator.EntitySetProcessor.processEntitySets(EntitySetProcessor.java:74)
        at com.sap.cloud.sdk.datamodel.odata.generator.CodeModelClassGenerator.processService(CodeModelClassGenerator.java:102)
        at com.sap.cloud.sdk.datamodel.odata.generator.ODataToVdmGenerator.createCodeModelForServices(ODataToVdmGenerator.java:133)
        at com.sap.cloud.sdk.datamodel.odata.generator.ODataToVdmGenerator.generate(ODataToVdmGenerator.java:98)
        at com.sap.cloud.sdk.datamodel.odata.generator.DataModelGenerator.execute(DataModelGenerator.java:797)
        at com.sap.cloud.sdk.datamodel.odata.generator.DataModelGeneratorCli.run(DataModelGeneratorCli.java:206)
        at com.sap.cloud.sdk.datamodel.odata.generator.DataModelGeneratorCli.main(DataModelGeneratorCli.java:188)
Caused by: org.apache.olingo.odata2.api.edm.EdmException: An exception occurred.
        at org.apache.olingo.odata2.core.edm.provider.EdmAssociationEndImplProv.getEntityType(EdmAssociationEndImplProv.java:51)
        at org.apache.olingo.odata2.core.edm.provider.EdmNavigationPropertyImplProv.getType(EdmNavigationPropertyImplProv.java:44)
        at com.sap.cloud.sdk.datamodel.odata.generator.EdmService$TypedAdapter.getType(EdmService.java:314)
        ... 9 more
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.ODataToVdmGenerator - Generating Java classes to C:\Users\W4ff3l\Downloads\odata-gen\trg
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.DataModelGeneratorCli - ------------------------------------------------------------
[main] WARN com.sap.cloud.sdk.datamodel.odata.generator.DataModelGeneratorCli -  Generator SUCCEEDED but had the following 1 warning messages:
[main] WARN com.sap.cloud.sdk.datamodel.odata.generator.DataModelGeneratorCli - Error in file IntegrationContent; unable to generate all VDM classes.
[main] INFO com.sap.cloud.sdk.datamodel.odata.generator.DataModelGeneratorCli - ------------------------------------------------------------

似乎导航有问题,但我不知道如何调试或解决这个问题。

要复制该问题,请从Business Hub下载.edmx和.json,并在生成器中使用它们。

EN

回答 3

Stack Overflow用户

发布于 2021-02-23 01:01:10

缺失实体类型的官方修复目前正在我们的发布管道中,从现在开始大约4周内,大概可以通过SAP API Business Hub获得。

同时,您已经可以使用SAP Integration Suite (以前称为SAP Cloud Platform Integration,CPI)检索最新的服务元数据,方法是导航到已部署的服务并与/api/v1/$metadata交换API路径。

例如,假设您的服务在https://<YourAccountShortName>-tmn.<SSLHost>.<Landscapehost>上运行,只需导航到https://<YourAccountShortName>-tmn.<SSLHost>.<Landscapehost>/api/v1/$metadata

使用显示的元数据和来自SAP API Business Hub的Swagger定义来生成您的OData客户机。

票数 2
EN

Stack Overflow用户

发布于 2021-01-15 16:21:26

该SCP服务的元数据中存在问题,缺少实体类型。如果可以从API Business Hub下载更正后的元数据,我将更新此答案。

票数 1
EN

Stack Overflow用户

发布于 2021-03-17 20:52:51

不,您没有错过任何配置。事实上,目前只有OData v4服务支持这一点,这是云开发工具包中OData v2的一个功能差距。但是您可以利用我们的通用OData客户端来实现这一点。

以下是带有解释的示例代码:

代码语言:javascript
复制
ODataEntityKey entityKey = new ODataEntityKey(ODataProtocol.V2);
entityKey.addKeyProperty("keyId", "keyValue");

// creating resource path
final ODataResourcePath resourcePath = ODataResourcePath.of("IntegrationPackages", entityKey)
        .addSegment("IntegrationDesigntimeArtifacts"); // here "IntegrationPackages" is the entityCollection

// creating read request
ODataRequestRead request = new ODataRequestRead(Service.DEFAULT_SERVICE_PATH, resourcePath,"encodedQueryStringIfAny", ODataProtocol.V2);

//executing
final ODataRequestResultGeneric result = request.execute(HttpClientAccessor.getHttpClient(destination));

//response parsing
result.asList(IntegrationDesigntimeArtifact.class);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65625655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档