A étudié comment appeler des services avec Watson SDK pour Java

C'est l'histoire originale

https://github.com/watson-developer-cloud/java-sdk

Qu'est-ce qui ne va pas

Au premier coup d'œil, j'ai été guidé vers cette partie de code qui dit "Oui, oui, je passe API_Key" ...

Sample.java


// letting the SDK manage the IAM token
Authenticator authenticator = new IamAuthenticator("<iam_api_key>");
Discovery service = new Discovery("2019-04-30", authenticator);

façon de penser de base

Si vous déployez sur IBM Cloud, vous pouvez utiliser des variables VCAP, vous pouvez donc créer une instance du service sans spécifier Authenticator. (Ceux qui pensent aux choses difficiles perdent)

Lors d'un test unitaire

Il est facile de récupérer le fichier d'identification et de le charger (il n'y a pas de variable VCAP, mais on a l'impression que c'est le cas)

Credential file (easier!)

With a credential file, you just need to put the file in the right place and the SDK will do the work of parsing it and authenticating. You can get this file by clicking the Download button for the credentials in the Manage tab of your service instance.

J'ai également été frappé par le fait que le volet Identifiants n'était parfois pas affiché sur cette page ("Administration" dans "Services"). (Je me demande s'il n'a pas réussi à lire ...?) nlc.png

Avec ce téléchargement, vous pouvez supprimer ʻibm-credentials.env. Le format est <lettre supérieure du nom du service> _ <Clé> = `

Ce service NLC a été créé dans la région de Tokyo que j'ai trouvée, alors faites attention à ce que l'URL soit pour la région de Tokyo. Lorsque j'ai essayé et fait une erreur avant de charger le fichier, j'ai pu passer la clé API mais je n'ai pas pu spécifier l'URL, auquel cas https: // gateway.watsonplatform.net / natural-language-classifier / api Est spécifié, et 403 Forbidden est renvoyé lors de la tentative d'accès à ʻUS-South`.

Spécifiez l'API comme argument Si vous avez créé le service dans une région autre que && US-South, définissez l'URL.

Sample.java


NaturalLanguageClassifier nlc = new NaturalLanguageClassifier("<api_key");
//Spécifiez l'URL de la région de service
nlc.setURL("https://gateway-tok.watsonplatform.net/natural-language-classifier/api");

ibm-credentials.env emplacement de chargement et ordre

Je l'ai écrit dans le Readme, mais c'était plus facile à comprendre si je regardais la source.

Nom de fichier fixé sur ʻibm-credentials.env` L'ordre de lecture est le suivant, et celui trouvé du haut est lu (ne pas lire après cela)

CredentialUtils.java


  private static List<File> getFilesToCheck() {
    List<File> files = new ArrayList<>();

    String userSpecifiedPath = EnvironmentUtils.getenv("IBM_CREDENTIALS_FILE");
    String currentWorkingDirectory = System.getProperty("user.dir");
    String unixHomeDirectory = EnvironmentUtils.getenv("HOME");
    String windowsFirstHomeDirectory = EnvironmentUtils.getenv("HOMEDRIVE") + EnvironmentUtils.getenv("HOMEPATH");
    String windowsSecondHomeDirectory = EnvironmentUtils.getenv("USERPROFILE");

https://github.com/IBM/java-sdk-core/blob/master/src/main/java/com/ibm/cloud/sdk/core/util/CredentialUtils.java

Notez également la version d'Apache Commons IO

J'ai utilisé Commons dans un autre but, et la version incluse était un peu ancienne, mais pour le moment, elle semble inutile à moins qu'elle ne soit 2.3 ou supérieure (Commons IO spécifie 2.6 dans le pom du SDK Core) Cette méthode n'existe pas et une erreur (NoSuchMethodError) se produit. https://commons.apache.org/proper/commons-io/javadocs/api-2.6/org/apache/commons/io/IOUtils.html#readLines-java.io.InputStream-java.nio.charset.Charset

Recommended Posts

A étudié comment appeler des services avec Watson SDK pour Java
[Java] Comment tester s'il est nul dans JUnit
Comment appeler des fonctions en bloc avec la réflexion Java
Comment compiler Java avec VsCode & Ant
[Java] Résumez comment comparer avec la méthode equals
Appeler la reconnaissance visuelle dans Watson Java SDK
Allons-y avec Watson Assistant (anciennement Conversation) ④ Comment créer un lien avec la logique Java
Comment utiliser le framework Java avec AWS Lambda! ??
Comment utiliser l'API Java avec des expressions lambda
[Java] (pour MacOS) Méthode de définition du chemin de classe
[Java] Comment rendre plusieurs boucles for uniques
Comment appeler AmazonSQSAsync
Comment créer un environnement Docker avec Gradle pour IntelliJ
[Java] Comment omettre l'injection de constructeur de ressort avec Lombok
Comment déployer Java sur AWS Lambda avec Serverless Framework
Comment traiter Aucun modèle de demande interactive
[Pour les débutants] Comment utiliser Stream API après Java 8
Comment utiliser Truth (bibliothèque d'assertions pour Java / Android)
Essayez de vous connecter à l'émulateur AzureCosmosDB pour Docker avec Java
Comment créer un environnement de développement Java avec VS Code
Comment faire une boucle Java Map (for Each / extended for statement)
Comment exécuter l'exemple WebCamCapture de NyARToolkit pour Java
[Java] Comment rompre une ligne avec StringBuilder
(Java) Comment implémenter equals () pour une classe avec des éléments de valeur ajoutés par héritage
Comment abaisser la version java
[Java] Comment utiliser Map
Comment inverser la compilation du fichier apk en code source Java avec MAC
Comment utiliser les jetons SAS pour les hubs d'événements Azure (Java)
Java pour jouer avec Function
Java - Comment créer JTable
[À voir absolument pour l'apprenti ingénieur Java] Comment utiliser l'API Stream
Comment créer une image de conteneur légère pour les applications Java
Comment gérer les exceptions froidement avec Java 8 Stream ou en option
Comment utiliser java Facultatif
Comment réduire les images Java
Comment rédiger un commentaire java
Comment utiliser la classe Java
[Java] Comment afficher les Wingdings
Comment numéroter (nombre) avec html.erb
Comment utiliser Java Map
Comment appeler et utiliser l'API en Java (Spring Boot)
Comment mettre à jour avec activerecord-import
Comment définir des constantes Java
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Comment utiliser les variables Java
Comment convertir la base Java
Essayez Spark Submit to EMR à l'aide du kit AWS SDK pour Java
Pour les débutants Java: List, Map, Iterator / Array ... Comment convertir?
Comment initialiser un tableau Java
[Java] Comment rechercher des valeurs dans un tableau (ou une liste) avec la méthode contains
Comment gérer le type auquel j'ai pensé en écrivant un programme Java pendant 2 ans
Crypter les données téléchargées vers S3 à l'aide du kit AWS SDK pour Java / SSE-KMS
Android: Comment gérer "Impossible de déterminer la version Java à partir de '10 .0.1 '"
[Pour les débutants] Exemple minimum pour mettre à jour RecyclerView avec DiffUtils en Java