如何在Olingo OData服务文档中包含完整的元数据URI?

时间:2016-03-15 20:40:00

标签: odata olingo

我按照Apache Lingo教程中列出的步骤创建了一个示例OData服务。

客户收到的默认服务文档是:

{
  "@odata.context" : "$metadata",
  "value" : [
  {
    "name" : "Products",
    "url" : "Products"
  } ]
}

有没有办法配置Olingo在文档中包含完整的元数据uri?具体来说,假设服务在http://localhost:8080/DemoService/DemoService.svc/运行,我希望服务文档如下:

{
  "@odata.context" : "http://localhost:8080/DemoService/DemoService.svc$metadata",
  "value" : [
  {
    "name" : "Products",
    "url" : "Products"
  } ]
}

2 个答案:

答案 0 :(得分:2)

您可以在调用序列化程序时设置元数据URL。签名有:serviceDocument(ServiceMetadata serviceMetadata,String serviceRoot)

为了自己调用序列化程序,您需要注册自己的ServiceDocumentProcessor以覆盖服务文档的DefaultProcessor。 您可以从DefaultProcessor复制服务文档的代码,并自己添加服务根。 以下是DefaultProcessor实现的链接:https://github.com/apache/olingo-odata4/blob/3786699f018ac2deb1df9571d12bb61ab57f2d8a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java

答案 1 :(得分:1)

在EntityCollectionProcessor和EntityProcessor中将服务根URI设置为ContextURL的“ serviceRoot”属性。

ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).serviceRoot(<service root URI>).build();