如何使用SAP云平臺 + JNDI訪問Internet Service,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
巧家網(wǎng)站建設公司創(chuàng)新互聯(lián)建站,巧家網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為巧家數(shù)千家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設公司要多少錢,請找那個售后服務好的巧家做網(wǎng)站的公司定做!
以Internet Service http://maps.googleapis.com/maps/api/distancematrix/xml?origins=Walldorf&destinations=Berlin為例,
在瀏覽器里訪問這個url,得到輸出:從Walldorf到Berlin的距離。
如何讓一個部署到SAP云平臺的Java應用也能訪問到該internet service呢?
首先在SAP云平臺里創(chuàng)建一個destination,維護service的end point:
在Java代碼里使用SAP云平臺里創(chuàng)建的destination:
然后使用JNDI service讀取destination里配置的url:
部署到SAP云平臺之后,在Eclipse里看到preview結果:
SAP云平臺Cockpit顯示如下:
瀏覽器訪問如下:
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); } } }
關于如何使用SAP云平臺 + JNDI訪問Internet Service問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。