
在 SAP HANA 中,我们通过开源的 ODATA Java 实现 — Apache Olingo,构建了一个 Java Application 来实现 ODATA。ODATA Service 的地址是访问
ApplicationPath/*.svc
当你访问这个地址时,会自动调用同名的 servlet 进行相关的操作。
当我们访问这个地址时,一切还是正常的。但当我们在构建的 HTML5 Application 中为了使用该 ODATA Service 中的数据,将该地址作为 ODATA Service 地址传入的时候,访问出现了
400 Bad Request
出现400无效请求的原因是因为 ODATA Service 和 HTML5 Application 不在同一个域中,为了保护数据,ODATA 对来自其他域的请求做了限制。
解决的方法是在 HANA 中设置一个 Destination 作跳转:
Step1.New Destination
在 SAP HANA Cloud Platform Cockpit 左侧菜单中选择 Destinations,点击 New Destination 并填写相关下信息。其中,URL 应为需要跳转的域,这里指该 ODATA Java Application 地址;
Step2.Destination Path
新建完成后会生成一个新的 Destination,我们假设 Name 为 odataui5,则这个时候便生成了一个新的相对地址供其它 Application 调用,格式为:
1 |
/destinations/{{DESTINATION NAME}}/{{APPLICATION PATH}}/{{ODATA SERVICE}} |
如在之前提到的 HTML5 Application 中调用就是
1 |
this.personModel = new sap.ui.model.odata.ODataModel("/destinations/odataui5/DemoServiceWrite/DemoService.svc/", true); |
//odataui5 是 destination name;DemoServiceWrite 是 Java Application name;DemoService.svc 是 ODATA Service name。
Step3. Make Destination Work
修改 HTML5 Application 中的 neo-app.json,注意 destination path:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
{ "welcomeFile": "index.html", "routes": [ { ...... }, { ...... }, { "path": "/destinations/odataui5", "target": { "type": "destination", "name": "odataui5" }, "description": "oData Service" } ], "cacheControl": [ { ...... }, { ...... } ] } |
修改生效后,回到 SAP HANA Cloud Platform Cockpit 查看该 HTML5 Application 详情,会发现 Required Destinations 一项出现了刚添加的 destination ,并处于有效状态。
这个时候再访问这个 HTML5 Application,就能访问到 ODATA Service 了。
本文链接地址: SAP HANA ODATA 跨域访问
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。