IBM Worklight- HTTP 适配器
IBM Worklight- HTTP adapter
如何创建 HTTP 适配器来检索 Web 主机上的文件。
我很困惑,因为 HTTP 适配器用于检索用于 RSS 提要的 json 输出。我如何定位文件(例如 .jpg)。
谢谢。
您可以按照提供的说明进行操作 in this blog post。
步骤如下:
- 将远程图像URL作为参数提供给适配器
- 使用 Java 实用程序
在服务器上对返回的图像进行 Base64 编码
- Return 编码的 base64 字符串到应用程序
- Base64解码字符串并显示图片
扩展 Idan 的答案:
将远程图像 URL 作为参数提供给适配器:
适配器 JS:
function getImage() {
WL.Logger.info("################### getImage ######################");
var val = com.company.ProjectName.ImageEncoder.getImage("http://Some-Domain/../.../id.gif");
WL.Logger.info("################### IMAGE IS ######################");
WL.Logger.info(val);
WL.Logger.info("#####################################################");
var imageData = {"data":val};
WL.Logger.info(JSON.stringify(imageData));
return imageData;
}
适配器XML:
将程序添加到适配器:
<procedure name="getImage"/>
将自定义 Java 代码添加到您的服务器:
Java代码:
package com.company.ProjectName;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.MalformedInputException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class ImageEncoder {
public static String getImage(String imageUrl)
throws MalformedURLException, IOException {
String imageDataString = "";
URL url = null;
int i;
try {
url = new URL(imageUrl);
System.out.println(imageUrl);
HttpURLConnection connection = null;
String protocol = url.getProtocol();
System.out.println(protocol);
// this is to trust any certificates from the target server
if("https".equalsIgnoreCase(protocol)){
// Create a trust manager that does not validate certificate chains
System.out.println("inside If");
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
connection = (HttpsURLConnection)url.openConnection();
System.out.println("connection"+connection.getContentLength());
}else{
connection=(HttpURLConnection) url.openConnection();
}
InputStream input = connection.getInputStream();
byte[] bytes = org.apache.commons.io.IOUtils.toByteArray(input);
input.close();
imageDataString = encodeImage(bytes);
return imageDataString;
} catch (MalformedInputException malformedInputException) {
malformedInputException.printStackTrace();
imageDataString = malformedInputException.toString();
return ("exception while reading the imag <" + imageDataString + ">");
} catch (IOException ioException) {
ioException.printStackTrace();
imageDataString = ioException.toString();
return ("exception while reading the imag <" + imageDataString + ">");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
imageDataString = e.toString();
return ("exception while reading the imag <" + imageDataString + ">");
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
imageDataString = e.toString();
return ("exception while reading the imag <" + imageDataString + ">");
}
public static String encodeImage(byte[] imageData) {
// TODO Auto-generated method stub
org.apache.commons.codec.binary.Base64 base = new org.apache.commons.codec.binary.Base64(
false);
return base.encodeToString(imageData);
}
}
Java代码目录:
注意:不要相信所有证书。您需要添加自己的信任管理器。这仅用于测试
如何创建 HTTP 适配器来检索 Web 主机上的文件。 我很困惑,因为 HTTP 适配器用于检索用于 RSS 提要的 json 输出。我如何定位文件(例如 .jpg)。
谢谢。
您可以按照提供的说明进行操作 in this blog post。
步骤如下:
- 将远程图像URL作为参数提供给适配器
- 使用 Java 实用程序 在服务器上对返回的图像进行 Base64 编码
- Return 编码的 base64 字符串到应用程序
- Base64解码字符串并显示图片
扩展 Idan 的答案:
将远程图像 URL 作为参数提供给适配器:
适配器 JS:
function getImage() {
WL.Logger.info("################### getImage ######################");
var val = com.company.ProjectName.ImageEncoder.getImage("http://Some-Domain/../.../id.gif");
WL.Logger.info("################### IMAGE IS ######################");
WL.Logger.info(val);
WL.Logger.info("#####################################################");
var imageData = {"data":val};
WL.Logger.info(JSON.stringify(imageData));
return imageData;
}
适配器XML:
将程序添加到适配器:
<procedure name="getImage"/>
将自定义 Java 代码添加到您的服务器:
Java代码:
package com.company.ProjectName;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.MalformedInputException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class ImageEncoder {
public static String getImage(String imageUrl)
throws MalformedURLException, IOException {
String imageDataString = "";
URL url = null;
int i;
try {
url = new URL(imageUrl);
System.out.println(imageUrl);
HttpURLConnection connection = null;
String protocol = url.getProtocol();
System.out.println(protocol);
// this is to trust any certificates from the target server
if("https".equalsIgnoreCase(protocol)){
// Create a trust manager that does not validate certificate chains
System.out.println("inside If");
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
connection = (HttpsURLConnection)url.openConnection();
System.out.println("connection"+connection.getContentLength());
}else{
connection=(HttpURLConnection) url.openConnection();
}
InputStream input = connection.getInputStream();
byte[] bytes = org.apache.commons.io.IOUtils.toByteArray(input);
input.close();
imageDataString = encodeImage(bytes);
return imageDataString;
} catch (MalformedInputException malformedInputException) {
malformedInputException.printStackTrace();
imageDataString = malformedInputException.toString();
return ("exception while reading the imag <" + imageDataString + ">");
} catch (IOException ioException) {
ioException.printStackTrace();
imageDataString = ioException.toString();
return ("exception while reading the imag <" + imageDataString + ">");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
imageDataString = e.toString();
return ("exception while reading the imag <" + imageDataString + ">");
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
imageDataString = e.toString();
return ("exception while reading the imag <" + imageDataString + ">");
}
public static String encodeImage(byte[] imageData) {
// TODO Auto-generated method stub
org.apache.commons.codec.binary.Base64 base = new org.apache.commons.codec.binary.Base64(
false);
return base.encodeToString(imageData);
}
}
Java代码目录:
注意:不要相信所有证书。您需要添加自己的信任管理器。这仅用于测试