Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1294 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  J2ME -> Utilisation de KXmlRPC: blocage au 256ème caractère de réponse

 

 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

J2ME -> Utilisation de KXmlRPC: blocage au 256ème caractère de réponse

n°979763
jultey
Posté le 13-02-2005 à 01:29:52  profilanswer
 

Bonjour,
 
  J'essaie de faire une application sur un téléphone mobile. Cette application doit pouvoir dialoguer avec un blog disposé sur un serveur web.
 
  J'ai le WTK22 et mon blog de test est Nucleus http://nucleuscms.org/.
  J'essaie d'utiliser les APIs standards des blogs : surtout MetaWebBlogAPI (http://www.xmlrpc.com/metaWeblogApi)
  J'ai commencé par tester un programme Java "normal" et ça marchait à peu près (en tout cas pour récupérer un Post -pour poster un Post ça marche toujours pas... -http://forum.hardware.fr/hardwaref [...] 4150-1.htm-)
 
  Pour ce qui est de mon appli J2ME, j'ai récupéré un parser XML qui s'appelle kXML-RPC http://kxmlrpc.objectweb.org/ et qui est apparement fait pour tourner sur J2ME.
 
  Mon problème est que j'arrive à envoyer une requête mais que je ne récupère que les 256 premières caractères de la réponse.
 
Lorsque dans WTK j'active le Network Monitor, j'obtiens pour client -> serveur
 

Code :
  1. ..<methodCall>
  2. .. <methodName>metaWeblog.getPost</methodName>
  3. .. <params>
  4. ..  <param>
  5. ..   <value>
  6. ..    <string>1</string>
  7. ..   </value>
  8. ..  </param>
  9. ..  <param>
  10. ..   <value>
  11. ..    <string>monlogin</string>
  12. ..   </value>
  13. ..  </param>
  14. ..  <param>
  15. ..   <value>
  16. ..    <string>monpasswd</string>
  17. ..   </value>
  18. ..  </param>
  19. .. </params>
  20. ..</methodCall>


et pour la réponse serveur -> client, je n'obtiens apparemment que le début :

Code :
  1. <?xml version="1.0"?>
  2. .<methodResponse>
  3. . <params>
  4. .  <param>
  5. .   <value><struct>
  6. .    <member><name>dateCreated</name>
  7. .   <value>
  8.      <dateTime.iso8601>20050208T15:38:33</dateTime.iso8601></value>
  9. .    </member>
  10. .    <member><name>userid</name>
  11. .     <value><string>1</string></value>
  12. .    </member>


 
Voilà la partie de mon appli qui fait l'appel et la réponse du client :

Code :
  1. //L'adresse du blog ou l'on se connecte
  2. xmlrpc = new XmlRpcClient(
  3.           "http://monurl" ) ;
  4. //les parametres à passer à la fonction que l'on appelle sur le blog
  5.   params = new Vector() ;
  6.   params.addElement("1" ) ; // blogId
  7.   params.addElement("monlogin" ) ;
  8.   params.addElement("monpasswd" ) ;
  9. //on execute la méthode que je souhaite : recuperer un post
  10.   reponse = (Object) xmlrpc.execute(blogMethode, params) ;
  11. //String s = (String) xmlrpc.execute(blogMethode, params) ;
  12.   System.out.println("DB1 : " + reponse.toString()) ;
  13.   response.setString( reponse.toString() );
  14.   display.setCurrent( response );


Lorsque je lance l'application sur l'émulateur, j'obtiens un java.lang.nullPointerException et dans mon moniteur, la trace que j'ai posté + haut.
 
Si quelqu'un à déjà utilisé kXML-RPC ou a déjà rencontré ce problème...
Ou peut-être cela vient que J2ME est limité en taille mémoire ?
 
Bref, je suis preneur de toutes vos suggestions  :jap:
 
Merci pour vos réponses.
 
Julien
 
PS : Je peux mettre mon répertoire (WTK>monappli) en téléchargement si vous voulez voir le code en entier (y'a vraiment pas beaucoup de lignes) et tester vite fait (+ pratique si vous avez WTK installé) :p


Message édité par jultey le 13-02-2005 à 01:46:36
mood
Publicité
Posté le 13-02-2005 à 01:29:52  profilanswer
 

n°979805
omega2
Posté le 13-02-2005 à 11:11:00  profilanswer
 

Faudrait voir a quelle ligne de code correspond ton "java.lang.nullPointerException". En tout cas, c'est une exception qui met le thread par terre si elle n'est pas intercepter. C'est surement pour ça que ton applis ne renvoie pas tout ce qu'elle devrait.

n°979868
jultey
Posté le 13-02-2005 à 13:17:38  profilanswer
 

Ca doit venir de la méthode parseResponse()... mais où dans cette méthode. Elle fait partie du kxmlrpc.jar . Ce n'est pas moi qui l'ai faite, elle est un peu complexe pour moi...
 
Voici la classe XmlRpcClient (qui contient donc la méthode execute() )

Code :
  1. public class XmlRpcClient {
  2.   public Object execute ( String method, Vector params) throws Exception {
  3.   //[Là, j'ai l'envoi qui se passe correctement]
  4.   //[...]
  5.  
  6.     // Parse response from server
  7.       parser = new XmlRpcParser( new XmlParser( new InputStreamReader( in ) ) );
  8.       result = parser.parseResponse();
  9.     //Apparemment, c'est là que ça pose PB, donc de la méthode parseResponse() de
  10.     //la classe XmlRpcParser
  11.  
  12.   //[Et là j'ai la fermeture des connexions)]
  13.   //[...]
  14.   }
  15. }


 
Et voici le code de la méthode parseResponse() de la classe XmlRpcParser (comment je fais pour savoir où l'erreur est levée ?) :
Et le AbstractXmlParser (2ème ligne ci-dessous), je n'ai pas trouvé sa doc : ni dans la doc fournie avec kxmlrpc, ni dans la doc java...  
 

Code :
  1. public class XmlRpcParser{
  2.     AbstractXmlParser parser ;
  3.     String methodName ;
  4.     Vector params = new Vector() ;
  5. // [...]
  6.    /**
  7.      * Called by a client to parse an XML-RPC response returned by a server.
  8.      *
  9.      * @return The return parameter sent back by the server.
  10.      */
  11.     public Object parseResponse() throws IOException{
  12.         ParseEvent event ;
  13.         Object result ;
  14.         parser.skip() ;
  15.         parser.read(Xml.START_TAG, "", "methodResponse" ) ;
  16.         parser.skip() ;
  17.         event = parser.peek() ;
  18.         result = null ;
  19.         if(event.getType() == Xml.START_TAG){
  20.             // If an error occurred, the server will return a Fault
  21.             if("fault".equals(event.getName())){
  22.                 parser.read() ;
  23.                 // Fault's are returned as structs (which are mapped to Hashtables)
  24.                 Hashtable fault = (Hashtable) parseValue() ;
  25.                 parser.skip() ;
  26.                 parser.read(Xml.END_TAG, "", "fault" ) ;
  27.                 // Ultimately, a client-side exception object is generated
  28.                 result = new XmlRpcException
  29.                          ( ( (Integer) fault.get("faultCode" )).intValue(),
  30.                           (String) fault.get("faultString" )) ;
  31.             }
  32.               /* The current version of the XML-RPC spec -- http://www.xmlrpc.org/spec
  33.              does not permit multiple parameter values to be returned, although
  34.                a complex type (struct or array) containing multiple values (and even
  35.                other complext types) is permitted.  This aspect of the spec is currently
  36.               being debated and may be changed in the future. */
  37.             else if("params".equals(event.getName())){
  38.                 parseParams() ;
  39.                 if(params.size() > 1){
  40.                     throw new IOException("too many return parameters" ) ;
  41.                 }
  42.                 else if(params.size() == 1) {
  43.                     result = params.elementAt(0) ;
  44.                 }
  45.             }
  46.             else{
  47.                 throw new IOException
  48.                   ("<fault> or <params> expected instead of " + event) ;
  49.             }
  50.         } //end if( event.getType() == Xml.START_TAG ) {
  51.         parser.skip() ;
  52.         parser.read(Xml.END_TAG, "", "methodResponse" ) ;
  53.         parser.skip() ;
  54.         parser.read(Xml.END_DOCUMENT, null, null) ;
  55.         return result ;
  56.     } //end parseResponse()
  57. // [...]
  58. }



Message édité par jultey le 13-02-2005 à 21:45:32
n°980448
jultey
Posté le 13-02-2005 à 21:46:50  profilanswer
 

Pour ceux qui sont dans le même cas que moi pour l'utilisation de kXmlRpc, il semblerait que le bug ait été découvert et corrigé...
Plus d'infos ici : http://blog.gmane.org/gmane.comp.java.enhydra.kxmlrpc


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  J2ME -> Utilisation de KXmlRPC: blocage au 256ème caractère de réponse

 

Sujets relatifs
comment changer le caractère -> ' <- dans une chaineJTREE utilisation de JTree.AccessibleJTree et de setVisible
Probleme avec Target et utilisation des balises divUtilisation des relations ships et de JBoss (+EJB)
Utilisation de AS dans un SELECTUtilisation de control progress
utilisation d'un tabStripxsl:key pb utilisation d'une variable dans le match
[J2ME] Deployer une application sur téléphone portablecaractere blanc de php/javascript
Plus de sujets relatifs à : J2ME -> Utilisation de KXmlRPC: blocage au 256ème caractère de réponse


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR