2015-10-06 122 views
0

如何创建HTTP适配器以检索Web主机上的文件。 我很困惑,因为HTTP适配器用于检索用于RSS提要的json输出。我如何定位文件(例如.jpg)。IBM Worklight-HTTP适配器

谢谢。

+0

jpg路径应该在json输出中返回的响应中,然后您可以抓取该文件。 –

+0

@Hussam Eddin如何抓取文件呢? –

+0

伊丹的答案解释了如何抓住它。我遵循相同的步骤将其放入我的项目中。 –

回答

1

扩展标识一的回答是:

提供远程图像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代码目录:

enter image description here

注:DON“T TRUST所有证书。你需要添加你自己的信任经理。这仅用于测试

0

您可以按照提供的说明in this blog post

的步骤如下:

  1. 作为参数提供远程图像URL到适配器
  2. 的Base64编码使用Java效用
  3. 返回的base64编码串在服务器上返回的图像到应用
  4. Base64的解码串并显示图像