2017-06-27 2 views
0

Dans un agent Java, je souhaite utiliser GSON pour analyser json. Mais lorsque je tente:Domino Agent et GSON - accès refusé

String jsonReceived = "{'product':'IBM Domino','args':{'since':'1970','current':'9.0.2'}}"; 
Product product = (Product) gson.fromJson(jsonReceived, Product.class); 

je reçois le message:

java.security.AccessControlException: Accès refusé ("java.lang.reflect.ReflectPermission" "suppressAccessChecks")

J'ai récemment changé la politique java au maximum:

grant { 
    permission java.security.AllPermission; 
} 

Alors qu'est-ce qui me limite?

Voici le code complet:

import lotus.domino.*; 

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 
import com.google.gson.JsonParseException; 

public class JavaAgent extends AgentBase { 

    public void NotesMain() throws JsonParseException{ 

     String msg = null; 

     lotus.domino.Session session = getSession(); 
     OpenLogItem oli = new OpenLogItem(session); 

     try { 

      AgentContext agentContext = session.getAgentContext(); 

      msg = "Agent " + agentContext.getCurrentAgent().getName() + " using runtime version:" + System.getProperty("java.runtime.version"); 
      oli.logEvent(msg, OpenLogItem.SEVERITY_LOW, null); 

      Gson gson = new GsonBuilder().create(); 

      msg = "after new Gson()"; 
      oli.logEvent(msg, OpenLogItem.SEVERITY_LOW, null); 

      String jsonReceived = "{'product':'IBM Domino'}"; 
      Product product = (Product) gson.fromJson(jsonReceived, Product.class); 

      msg = "after gson.fromJson"; 
      oli.logEvent(msg, OpenLogItem.SEVERITY_LOW, null); 


     } catch(Exception e) { 
      oli.logError(e); 
     } 
    } 

    public class Product{ 
     String product; 
     String msg = null; 

     lotus.domino.Session session = getSession(); 
     OpenLogItem oli = new OpenLogItem(session); 

     public Product(){ 
      msg = "Product() // constructor"; 
      oli.logEvent(msg, OpenLogItem.SEVERITY_LOW, null); 
     } 

     public String getProduct() { 
      return product; 
     } 

     public void setProduct(String product) { 
      this.product = product; 
     } 

     /*@Override 
     public String toString() { 
      // TODO Auto-generated method stub 
      return "product: " + getProduct(); 
     }*/ 


    } 
} 
+1

Un agent LotusScript est-il une option? Il existe des bibliothèques d'analyseurs JSON très simples disponibles ... –

+0

Je suis devenu rouillé en écrivant dans LotusScript ... –

+0

Alors quoi? Prenez un peu de schuurpapier, soyez pragmatique et faites un essai ;-) J'utilise la bibliothèque JSON créée à l'origine par Alan Faubel, avec quelques améliorations, à trouver sur OpenNTF. Ca marche, mais ce n'est pas Java bien sur ... –

Répondre

1

Je viens d'utiliser un agent Java pour l'analyse syntaxique JSON avec GSON. Vous avez la même erreur, créé le fichier java.pol avec la même permission complète et cela a fonctionné. N'oubliez pas de définir la sécurité pour autoriser les opérations restreintes sur l'agent.

+0

puis-je demander à quoi ressemble votre fichier de stratégie java? Je cours avec des opérations restreintes autorisées sur le serveur (avec des droits d'administrateur complets) –

+0

le java.pol a le même contenu que le vôtre. Je devrais mentionner que je courais manuellement l'agent dans le client de Notes, non programmé sur le serveur de Domino. –

+0

Je cours moi-même l'agent manuellement pendant le développement. et cela ne fonctionne pas :-( –