文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用SAP云平台 + JNDI访问Internet Service

2023-06-04 01:20

关注

如何使用SAP云平台 + JNDI访问Internet Service,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

如何使用SAP云平台 + JNDI访问Internet Service

以Internet Service http://maps.googleapis.com/maps/api/distancematrix/xml?origins=Walldorf&destinations=Berlin为例,

在浏览器里访问这个url,得到输出:从Walldorf到Berlin的距离。

如何使用SAP云平台 + JNDI访问Internet Service

如何让一个部署到SAP云平台的Java应用也能访问到该internet service呢?

首先在SAP云平台里创建一个destination,维护service的end point:

如何使用SAP云平台 + JNDI访问Internet Service

在Java代码里使用SAP云平台里创建的destination:

如何使用SAP云平台 + JNDI访问Internet Service

然后使用JNDI service读取destination里配置的url:

如何使用SAP云平台 + JNDI访问Internet Service

部署到SAP云平台之后,在Eclipse里看到preview结果:

如何使用SAP云平台 + JNDI访问Internet Service

SAP云平台Cockpit显示如下:

如何使用SAP云平台 + JNDI访问Internet Service

浏览器访问如下:

如何使用SAP云平台 + JNDI访问Internet Service

web.xml:

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <!-- Main sample servlet mapped to / so that the integration test harness can detect readiness (generic for all samples) --> <servlet> <servlet-name>ConnectivityServlet</servlet-name> <servlet-class>com.sap.cloud.sample.connectivity.ConnectivityServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ConnectivityServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- Declare the JNDI lookup of destination --> <resource-ref> <res-ref-name>connectivityConfiguration</res-ref-name> <res-type>com.sap.core.connectivity.api.configuration.ConnectivityConfiguration</res-type> </resource-ref> </web-app>
package com.sap.cloud.sample.connectivity; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import javax.annotation.Resource; import javax.naming.Context; import javax.naming.InitialContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sap.cloud.account.TenantContext; import com.sap.core.connectivity.api.configuration.ConnectivityConfiguration; import com.sap.core.connectivity.api.configuration.DestinationConfiguration; public class ConnectivityServlet extends HttpServlet { @Resource private TenantContext  tenantContext; private static final long serialVersionUID = 1L; private static final int COPY_CONTENT_BUFFER_SIZE = 1024; private static final Logger LOGGER = LoggerFactory.getLogger(ConnectivityServlet.class); private static final String ON_PREMISE_PROXY = "OnPremise"; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        HttpURLConnection urlConnection = null;        String destinationName = request.getParameter("destname"); if (destinationName == null) {            destinationName = "google_map";        } try {            Context ctx = new InitialContext();            ConnectivityConfiguration configuration = (ConnectivityConfiguration) ctx.lookup("java:comp/env/connectivityConfiguration");            DestinationConfiguration destConfiguration = configuration.getConfiguration(destinationName); if (destConfiguration == null) {                response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,                        String.format("Destination %s is not found. Hint:" + " Make sure to have the destination configured.", destinationName)); return;            }            String value = destConfiguration.getProperty("URL");            URL url = new URL(value + "xml?origins=Walldorf&destinations=Paris");            String proxyType = destConfiguration.getProperty("ProxyType");            Proxy proxy = getProxy(proxyType);            urlConnection = (HttpURLConnection) url.openConnection(proxy);            injectHeader(urlConnection, proxyType);            InputStream instream = urlConnection.getInputStream();            OutputStream outstream = response.getOutputStream();            copyStream(instream, outstream);        } catch (Exception e) {            String errorMessage = "Connectivity operation failed with reason: " + e.getMessage()                    + ". See " + "logs for details. Hint: Make sure to have an HTTP proxy configured in your " + "local environment in case your environment uses " + "an HTTP proxy for the outbound Internet " + "communication.";            LOGGER.error("Connectivity operation failed", e);            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,                    errorMessage);        }    } private Proxy getProxy(String proxyType) {        Proxy proxy = Proxy.NO_PROXY;        String proxyHost = null;        String proxyPort = null; if (ON_PREMISE_PROXY.equals(proxyType)) { // Get proxy for on-premise destinations proxyHost = System.getenv("HC_OP_HTTP_PROXY_HOST");            proxyPort = System.getenv("HC_OP_HTTP_PROXY_PORT");        } else { // Get proxy for internet destinations proxyHost = System.getProperty("https.proxyHost");            proxyPort = System.getProperty("https.proxyPort");        } if (proxyPort != null && proxyHost != null) { int proxyPortNumber = Integer.parseInt(proxyPort);            proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPortNumber));        } return proxy;    } private void injectHeader(HttpURLConnection urlConnection, String proxyType) { if (ON_PREMISE_PROXY.equals(proxyType)) { // Insert header for on-premise connectivity with the consumer account name urlConnection.setRequestProperty("SAP-Connectivity-ConsumerAccount",                    tenantContext.getTenant().getAccount().getId());        }    } private void copyStream(InputStream inStream, OutputStream outStream) throws IOException { byte[] buffer = new byte[COPY_CONTENT_BUFFER_SIZE]; int len; while ((len = inStream.read(buffer)) != -1) {            outStream.write(buffer, 0, len);        }    }}

关于如何使用SAP云平台 + JNDI访问Internet Service问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯