2015-07-10 46 views
1

我想用java代碼添加一個新的存儲插件。目前我正在創建一個json文件並在鑽取web ui上進行上傳。但它失敗了。這裏是我的代碼java api在apache drill中添加存儲插件

def creatplugin() { 
    val httpclient = new DefaultHttpClient() 
    val httpPost = new HttpPost("http://ip:port/storage/hdfs1.json") 
    val uploadFilePart = new FileBody(new File("D:/plugin.json")) 
    val reqEntity = new MultipartEntity() 
    reqEntity.addPart("hdfs1.json", uploadFilePart) 
    httpPost.setEntity(reqEntity) 
    httpPost.setHeader("Content-type", "application/json") 
    val response = httpclient.execute(httpPost) 
    println(response.getStatusLine().getStatusCode()) 
    } 

在這種情況下,響應代碼爲400,請求不好。

任何建議,發生了什麼問題?有沒有其他方式來動態地使用java代碼而不是其他API來添加插件?

謝謝

回答

0

我認爲這可能是多部分條目。我只會發布json數據作爲發佈消息正文的一部分。下面是一個可用的curl示例。使用StringEntity代替。

curl -X POST -H「Authorization:Basic bWFwcjpyb290NG1hcHI =」-H「Content-Type:application/json」-d'{「name」:「nfl」,「config」:{「type」:「文件中啓用了」, 「」:真實的, 「連接」: 「maprfs:///」, 「工作區」:{ 「意見」:{ 「位置」: 「/mapr/demo.mapr.com/data/views」 「可寫」:真 「defaultInputFormat」:NULL} 「JSON」:{ 「位置」: 「/ MAPR/demo.mapr.com /數據/ NFL/JSON」, 「可寫」:假 「defaultInputFormat」:」 JSON 「},」 CSV 「:{」 位置 「:」/ MAPR/demo.mapr.com /數據/ NFL/CSV」, 「可寫」:假 「defaultInputFormat」: 「CSV」}, 「標籤」:{ 「位置」: 「/ MAPR/demo.mapr.com /數據/ NFL/TXT」, 「可寫」:假 「defaultInputFormat」: 「TSV」}, 「XML」:{ 「位置」:「/ MAPR /演示.mapr.com /數據/ NFL/XML 「 」可寫「:假 」defaultInputFormat「:空}}, 」格式「:{ 」CSV「:{ 」類型「: 」文本「, 」擴展「:[」 CSV 「],」 定界符 「:」, 「}」,TSV 「:{」 類型 「:」 文本」, 「擴展」:[ 「TSV」, 「TXT」], 「定界符」: 「\ t」 的}, 「json」:{「type」:「json」}}}}'http://maprdemo:8047/storage/nfl.json

1

問題在於Jim指出的多部分實體。這裏是工作代碼

def creatplugin() { 
    val source = scala.io.Source.fromFile("D:/plugin.json").mkString 
    val httpclient = new DefaultHttpClient() 
    val httpPost = new HttpPost("http://ip:port/storage/hdfs1.json") 
    val reqEntity = new StringEntity(source) 
    httpPost.setEntity(reqEntity) 
    httpPost.setHeader("content-type", "application/json") 
    httpPost.setHeader("Accept", "application/json") 
    val response = httpclient.execute(httpPost) 
    println(response.getStatusLine().getStatusCode()) 
    }