博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用SAP云平台 + JNDI访问Internet Service
阅读量:2438 次
发布时间:2019-05-10

本文共 5326 字,大约阅读时间需要 17 分钟。

700

以Internet Service 为例,

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

700

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

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

700

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

700

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

700

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

700

SAP云平台Cockpit显示如下:

700

浏览器访问如下:

700

web.xml:

ConnectivityServlet
com.sap.cloud.sample.connectivity.ConnectivityServlet
ConnectivityServlet
/
connectivityConfiguration
com.sap.core.connectivity.api.configuration.ConnectivityConfiguration
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);        }    }}

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

321
531

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24475491/viewspace-2154397/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24475491/viewspace-2154397/

你可能感兴趣的文章
实例编程:用VC写个文件捆绑工具(转)
查看>>
教你如何用手工迅速剿灭QQ广告弹出木马(转)
查看>>
Windows系统维护完全图形化攻略(转)
查看>>
WAP2.0移动互联(转)
查看>>
WAP手机防毒攻略(转)
查看>>
如何建立C++ BuilderX 1.5 Mobile Edition开发环境(转)
查看>>
蓝牙套接字概述(转)
查看>>
TCPDUMP简介(转)
查看>>
Symbian智能手机特殊号码搜集(转)
查看>>
Linux操作系统下媒体播放器的初步探讨(转)
查看>>
网站内页权重如何提高-SEO优化技术群课堂笔记(转)
查看>>
用MSDOS.SYS同装两个WIN98(转)
查看>>
用DHTML来模拟实现下拉菜单(转)
查看>>
oracle数据库应用中实现汉字“同音”查询(转)
查看>>
关于无盘网络正确网络配置建议,减少卡机蓝屏关键(转)
查看>>
交换机及路由器如何才能更加安全?(转)
查看>>
chinaunix
查看>>
bxp读写分离怎么设置(转)
查看>>
复制表结构的通用存储过程(转)
查看>>
Symbian OS SDKs简介(转)
查看>>