Search code examples
javawatson-discovery

IBM Watson: Unknown API error when adding documents to the collection


I am trying to add documents to a collection of my IBM Bluemix Discovery instance via the IBM Watson API in Java. For a given file, I do as follows:

Discovery discovery = new Discovery("2017-08-01");
discovery.setEndPoint("https://gateway.watsonplatform.net/discovery/api");
discovery.setUsernameAndPassword("{username}", "{password}");
String environmentId = "{environment_id}";
String collectionId = "{collection_id}";

File f = new File("path/to/file");
String path = f.getPath();
String ext = FilenameUtils.getExtension(f.getName());

CreateDocumentRequest.Builder builder = new CreateDocumentRequest.Builder(environmentId, collectionId).documentId(path).file(f);
CreateDocumentResponse createResponse = discovery.createDocument(builder.build()).execute();
System.out.println(createResponse.toString());

However, when I execute my program, I get the error Exception in thread "main" com.ibm.watson.developer_cloud.service.exception.NotFoundException: Unknown API: POST [...], which comes from the line where createResponse is initialized.

Thank you.


Solution

  • You have the wrong documentId.

    The correct documentId is like "49a82bd4-xxxx-xxxx-xxxx-900b7378ff35" but you put path as your params.

    If you want to add documents, you don't need specify value for documentId by default.

    Discovery discovery = new Discovery("2017-08-01");
    discovery.setEndPoint("https://gateway.watsonplatform.net/discovery/api");                             
    discovery.setUsernameAndPassword("feeb4a95-xxxx-xxxx-xxxx-4d94c98b2b24", "KQc6G5nK6HrD");
    String environmentId = "59d0fa32-xxxx-xxxx-xxxx-cf98a8cdc52e";
    String collectionId = "49a82bd4-xxxx-xxxx-xxxx-900b7378ff35";
    File f = new File("/Users/xxx/Desktop/myDoc.json");
    Path path = Paths.get(f.getPath());
    InputStream documentStream = new ByteArrayInputStream(Files.readAllBytes(path));
    
    //Create
    CreateDocumentRequest.Builder builder = new CreateDocumentRequest.Builder(environmentId, collectionId);
    builder.inputStream(documentStream, HttpMediaType.APPLICATION_JSON);
    CreateDocumentResponse createResponse = discovery.createDocument(builder.build()).execute();
    //Retrieve  (You can get documentId here)
    QueryRequest.Builder queryBuilder = new QueryRequest.Builder(environmentId, collectionId);
    QueryResponse queryResponse = discovery.query(queryBuilder.build()).execute();
    System.out.println(queryResponse.toString());
    //Delete
    String documentId = "d1059598-xxxx-xxxx-xxxx-b65a1f3334d8";
    DeleteDocumentRequest deleteRequest = new DeleteDocumentRequest.Builder(environmentId, collectionId, documentId).build();
    DeleteDocumentResponse deleteResponse = discovery.deleteDocument(deleteRequest).execute();