共計 5447 個字符,預計需要花費 14 分鐘才能閱讀完成。
如何使用 SAP 云平臺 + JNDI 訪問 Internet Service,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
在瀏覽器里訪問這個 url,得到輸出:從 Walldorf 到 Berlin 的距離。
首先在 SAP 云平臺里創建一個 destination,維護 service 的 end point:
?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 行業資訊頻道了解更多相關知識。
正文完