我的IBM Bluemix帳戶中有發現實例,並且我想將本地文件夾中的文檔添加到此發現實例中的私有集合中。我通過基本調用主本地文件夾中的遞歸函數來完成。程序本身工作正常;然而,添加文檔的幾次迭代後我encounteer以下錯誤:IBM Watson:將文檔遞歸添加到集合中時關閉異常流
Aug 08, 2017 1:55:07 PM okhttp3.internal.platform.Platform log
INFO: --> POST https://gateway.watsonplatform.net/discovery/api/v1/environments/{environmentId}/collections/{collectionId}/documents?version=2017-08-01 http/1.1 (-1-byte body)
Aug 08, 2017 1:59:09 PM okhttp3.internal.platform.Platform log
INFO: <-- HTTP FAILED: java.net.SocketException: Connection reset by peer: socket write error
Aug 08, 2017 1:59:10 PM okhttp3.internal.platform.Platform log
INFO: --> POST https://gateway.watsonplatform.net/discovery/api/v1/environments/{environmentId}/collections/{collectionId}/documents?version=2017-08-01 http/1.1 (-1-byte body)
Aug 08, 2017 1:59:10 PM okhttp3.internal.platform.Platform log
INFO: <-- HTTP FAILED: java.io.IOException: Stream Closed
Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Stream Closed
我怎麼做是我第一次初始化一個發現實例:
Discovery discovery = new Discovery("2017-08-01");
discovery.setEndPoint("https://gateway.watsonplatform.net/discovery/api");
discovery.setUsernameAndPassword({username}, {password});
然後爲每個MIME支持的文件˚F該文件夾中的文件類型MIME類型的,我做的:
CreateDocumentRequest.Builder builder = new CreateDocumentRequest.Builder({environmentId}, {collectionId}).file(f, mimetype);
CreateDocumentResponse createResponse = discovery.createDocument(builder.build()).execute();
是否有可能發現實例在循環中會超時?我應該爲每個請求初始化一個新的發現實例嗎?
UPDATE
我敢肯定,發生異常時,由於連接問題。現在我正在嘗試添加文檔,以便在連接丟失時重新初始化Discovery
實例。但是,它給出了INFO: <-- HTTP FAILED: java.io.IOException: Stream Closed
。
boolean successful;
do {
try {
CreateDocumentResponse createResponse = this.discovery.createDocument(builder.build()).execute();
System.out.println(createResponse.toString());
successful = true;
} catch (Exception e) {
System.err.println("Exception: " + e.getMessage());
try {
TimeUnit.MILLISECONDS.sleep(500);
} catch (InterruptedException e1) {
System.err.println("InterruptedException: " + e1.getMessage());
}
this.discovery = new Discovery("2017-08-01");
this.discovery.setEndPoint("https://gateway.watsonplatform.net/discovery/api");
this.discovery.setUsernameAndPassword(DataUploader.USERNAME, DataUploader.PASSWORD);
successful = false;
}
} while (!successful)
我已經在使用'Builder文件(File inputFile,String mediaType)'。該錯誤發生在不同的迭代索引中,所以我認爲這個問題可能是由於我的連接帶寬。 –
我無法爲您的更新添加評論,但是您不必重新初始化發現類。如果你看看https://github.com/watson-developer-cloud/java-sdk/blob/develop/discovery/src/main/java/com/ibm/watson/developer_cloud/discovery/v1/Discovery.java# L89,你可以看到在初始化過程中沒有什麼特別的事情發生。它僅存儲在稍後時間點調用端點時可能需要的信息。 對於連接問題,您可能是正確的。當您遇到異常情況時,您可以重試文檔上傳請求。 – User10001