2012-07-23 8 views
8

私はIBM worklightとおしゃべりしており、Google places APIからデータを入力するアダプタを作成しようとしています。Worklightを使用してserverside javascriptでHTTPSリクエストを作成するには?

https://maps.googleapis.com/maps/api/place/search/json?key=AIzaSyCTlPms1pvhzeoRrBao5qW-DJMI_CWcbAM&location=52.0700,1.1400&radius=10000&sensor=false&name=coffee 

このURLを実行すると、ブラウザでは正常に動作し、私はのWorkLightを経由して取得しようとしているいくつかの素晴らしいJSONを表示します。

私はこのURLを呼び出したいです。

function getCoffeeHouses() { 

    var input = { 
     method : 'get', 
     returnedContentType : 'json', 
     path : 'maps/api/place/search/json', 
     parameters : { 
      'key'  : 'AIzaSyCTlPms1pvhzeoRrBao5qW-DJMI_CWcbAM', 
      'location' : '52.0700,1.1400', 
      'radius' : '10000', 
      'sensor' : 'false', 
      'name'  : 'coffee' 
     } 
    }; 

    var response = WL.Server.invokeHttp(input); 

// Extract latitude and longitude from the response. 
    var type = typeof response; 
    if ("object" == type) { 
     if (true == response["isSuccessful"]) { 
      // Return JSON object with lat and lng. 
      return response["results"]; 
     } 
     else { 
      // Returning null. Web request was not successful. 
      return null; 
     } 
    } 
    else { 
     // Returning null. Response is not an object. 
     return null; 
    } 
} 

そして、これは私が上記をテストするとき、私は、コンソールで取得結果である:

のWorkLightアダプタはJavaScriptで作成された、これは私がこれまで持っているものである

Failed to parse JSON string 
<!DOCTYPE html> 
<html lang=en> 
    <meta charset=utf-8> 
    <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> 
    <title>Error 404 (Not Found)!!1</title> 
    <style> 
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}} 
    </style> 
    <a href=//www.google.com/><img src=//www.google.com/images/errors/logo_sm.gif alt=Google></a> 
    <p><b>404.</b> <ins>That’s an error.</ins> 
    <p>The requested URL <code>/maps/api/place/search/json?key=AIzaSyCTlPms1pvhzeoRrBao5qW-DJMI_CWcbAM&amp;location=52.0700%2C1.1400&amp;radius=10000&amp;sensor=false&amp;name=coffee</code> was not found on this server. <ins>That’s all we know.</ins> 
Caused by: java.io.IOException: Unexpected character '<' on line 1, column 1 
[2012-07-23 11:08:57] An error occurred while invoking procedure CoffeeFinder/getCoffeeHouses parameters: { 
    "arr": [ 
    ] 
} 
null 
Caused by: null 

これはおそらく、アダプタがHTTPとして要求しているのに対し、HTTPSを使用している必要があるためです。

ブラウザでHTTPを使用する要求を変更すると、同様の結果が表示されます。

質問:上記のJavascriptを変更してHTTPS要求を行うことはできますか、または私はワークライトアダプターを誤解していますか?

答えて

7

リクエストの中にホストヘッダーを指定しないと、googleapisは機能しません。 それが必要としてすべての作品にそれを追加した後:

これは、アダプタのXML部分である

<connectivity> 
    <connectionPolicy xsi:type="http:HTTPConnectionPolicyType"> 
     <protocol>https</protocol> 
     <domain>maps.googleapis.com</domain> 
     <port>443</port>    
    </connectionPolicy> 
    <loadConstraints maxConcurrentConnectionsPerNode="2" /> 
</connectivity> 

をこれは、アダプタのJSです:

function doGet() { 

var input = { 
    method : 'get', 
    returnedContentType : 'json', 
    path : 'maps/api/place/search/json', 
    headers: { 
     Host: 'maps.googleapis.com' 
    }, 
    parameters : { 
     'key'  : 'AIzaSyCTlPms1pvhzeoRrBao5qW-DJMI_CWcbAM', 
     'location' : '52.0700,1.1400', 
     'radius' : '10000', 
     'sensor' : 'false', 
     'name'  : 'coffee' 
    } 
}; 

var response = WL.Server.invokeHttp(input); 
return response; 

}

+0

私も同様の問題を抱えています。..私はすべてのすべてのコンテンツタイプについて言及しましたが、まったく動作しません。 – Sarath

+0

エラーの説明は次のとおりです。「要求エンティティがこの要求を拒否しました。要求されたメソッド(サポートされていないメディアタイプ)の要求されたリソースでサポートされていないフォーマット "....私はContent-Type: 'application/json' ..を指定しましたが、まだ問題presist .. – Sarath

2

がアダプタに{アダプタ名}はそれに

.XMLもあり、ConnectionPolicyの下の接続下で、プロトコルがあります。 httpsに変更してデプロイしましたか?