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

68次阅读
没有评论

共计 5447 个字符,预计需要花费 14 分钟才能阅读完成。

如何使用 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 问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计5447字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)