2010-06-03 2 views
0

Actuellement, j'ai un design prêt pour l'application blackberry.Appelez un service Web et analyser la réponse xml dans blackberry

Maintenant, je dois appeler le service Web dans mon application, et ce service web me donnera une réponse xml. Donc, j'ai besoin d'analyser cette réponse de xml à un peu de POJO. Donc, pour analyser la réponse xml, dois-je utiliser le praser DOM de base ou devrais-je utiliser un autre concept de prasing spécifique à J2ME?

Si quelqu'un a un exemple de lien tutoriel pour le même alors il serait très utile pour moi.

Merci à l'avance ....

Répondre

2

Cela dépend de ce que votre service Web sert. Si c'est basé sur REST, vous êtes probablement responsable d'analyser le XML vous-même, avec une bibliothèque. J'ai seulement utilisé kXml 2, une bibliothèque J2ME qui peut être utilisée sur les terminaux BlackBerry. Pour l'utiliser, il est préférable de lier à la source (sinon, vous devez préverifier le pot et l'exporter et cela ne semble jamais fonctionner pour moi). C'est un analyseur d'extraction uniquement en avant, similaire à XmlReader dans .NET, si vous le connaissez.

Si votre service Web est basé sur WS * (c'est-à-dire qu'il utilise SOAP), vous pouvez utiliser un générateur de stub pour générer une classe de client que vous pouvez utiliser. BlackBerry prend en charge JSR 172, l'API des services Web pour J2ME. Le WTK a un générateur de tronçon qui fonctionne bien. Il suffit de pointer le générateur vers le fichier wsdl de votre service Web. Une recherche sur le Web devrait clarifier comment l'utiliser.

+0

Merci pour la réponse ... En fait, j'ai un cas de SOAP dans mon service web ... Alors, je vais étudier JSR 172 comme vous le suggérez. – Nirmal

1

Ajoutez vos données fichier xml pour strXML

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
InputStream inputStream = new ByteArrayInputStream(strXML.getBytes("UTF-8")); 
Document document = builder.parse(inputStream); 
Element rootElement = document.getDocumentElement(); 
rootElement.normalize(); 
blnViewReport=false; 
listNodes(rootElement); // use this function to parse the xml 
inputStream.close(); 

void listNodes(Node node) 
    { 
     Node tNode; 
     String strData; 
     String nodeName = node.getNodeName(); 

     if(nodeName.equals("Tagname")) 
     { 
    tNode=node.getFirstChild(); 
      if(tNode.getNodeType() == Node.TEXT_NODE) 
      { 
     // here you get the specified tag value 
      } 
     } 
     else if(nodeName.equals(“Tag name 2”)) 
      ..... 
      ..... 

     NodeList list = node.getChildNodes();  
     if(list.getLength() > 0) 
     {     
      for(int i = 0 ; i<list.getLength() ; i++) 
      { 
       listNodes(list.item(i));  
      } 
     } 

} 
0

Je crois que vous avez reçu l'objet de requête.

Je vais donner le code que j'ai utilisé pour analyser l'objet de requête à partir de XML.

_value est l'objet

System.out.println("value="+_value); 

SAXParserFactory factory = SAXParserFactory.newInstance(); 

SAXParser parser = null; // create a parser 

try { 
     parser = factory.newSAXParser(); 
    } 
catch (ParserConfigurationException e1) 
    { 
     System.out.println("ParserConfigurationException"+e1.getMessage()); 
    } 
catch (SAXException e1) 
    { 
    System.out.println("SAXException"+e1.getMessage()); 

    } 

     // instantiate our handler 
     PharmacyDataXMLHandler pharmacydataXMLHandler= new PharmacyDataXMLHandler(); 

     ByteArrayInputStream objBAInputStream = new java.io.ByteArrayInputStream(_value.getBytes()); 
     InputSource inputSource = new InputSource(objBAInputStream); 

     // perform the synchronous parse   
     try { 
      parser.parse(inputSource, pharmacydataXMLHandler); 
     } catch (SAXException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     _pharmacydataList = pharmacydataXMLHandler.getpharmacydataList(); 

} 



public class PharmacyDataXMLHandler extends DefaultHandler 
{ 


    private Vector _pharmacyDataList = new Vector(); 
    PharmacyData _pharmacydata; 
    StringBuffer _sb = null; 

    public void warning(SAXParseException e) { 
     System.err.println("warning: " + e.getMessage()); 

    } 

    public void error(SAXParseException e) { 
     System.err.println("error: " + e.getMessage()); 
    } 

    public void fatalError(SAXParseException e) { 
     System.err.println("fatalError: " + e.getMessage()); 

    } 


    public void startElement(String uri, String localName, String name, 
      Attributes attributes) throws SAXException { 
     try{ 
      _sb = new StringBuffer(""); 
      if(localName.equals("Table")) 
      { 

       _pharmacydata= new PharmacyData(); 
      } 
     }catch (Exception e) { 
      System.out.println(""+e.getMessage()); 
     } 
    } 

    public void endElement(String namespaceURI, String localName, String qName) throws SAXException 
    { 
     try{ 
      if(localName.equals("ID")) 
      { 
       // System.out.println("Id :"+sb.toString()); 
       this._pharmacydata.setId(_sb.toString());    
      } 

      else if(localName.equals("Name")) 
      { 
       //System.out.println("name :"+sb.toString()); 
       this._pharmacydata.setName(_sb.toString());   
      } 

      else if(localName.equals("PharmacyID")) 
      { 
       // System.out.println("pharmacyId :"+sb.toString()); 
       this._pharmacydata.setPharmacyId(_sb.toString());    
      } 

      else if(localName.equals("Password")) 
      { 
       // System.out.println("password :"+sb.toString()); 
       this._pharmacydata.setPassword(_sb.toString());   
      } 

      else if(localName.equals("Phone")) 
      { 
       // System.out.println("phone:"+sb.toString()); 
       this._pharmacydata.setPhone(_sb.toString());    
      } 

      else if(localName.equals("Transmit")) 
      { 
       //System.out.println("transmit"+sb.toString()); 
       this._pharmacydata.setTransmit(_sb.toString());   
      } 

      else if(localName.equals("TimeZone")) 
      { 
       // System.out.println("timeZone"+sb.toString()); 
       this._pharmacydata.setTimeZone(_sb.toString());   
      } 

      else if(localName.equals("FaxModem")) 
      { 
       // System.out.println("faxModem"+sb.toString()); 
       this._pharmacydata.setFaxModem(_sb.toString());   
      } 

      else if(localName.equals("VoicePhone")) 
      { 
       // System.out.println("voicePhone"+sb.toString()); 
       this._pharmacydata.setVoicePhone(_sb.toString());    
      } 

      else if(localName.equals("ZipCode")) 
      { 
       // System.out.println("zipCode"+sb.toString()); 
       this._pharmacydata.setZipCode(_sb.toString());    
      } 

      else if(localName.equals("Address")) 
      { 
       // System.out.println("address"+sb.toString()); 
       this._pharmacydata.setAddress(_sb.toString());    
      } 

      else if(localName.equals("City")) 
      { 
       // System.out.println("city"+sb.toString()); 
       this._pharmacydata.setCity(_sb.toString());   
      } 

      else if(localName.equals("State")) 
      { 
       // System.out.println("state"+sb.toString()); 
       this._pharmacydata.setState(_sb.toString());    
      } 

      else if(localName.equals("WebInterface")) 
      { 
       // System.out.println("webInterface"+sb.toString()); 
       this._pharmacydata.setWebInterface(_sb.toString());   
      } 
      else if(localName.equals("NABPnumber")) 
      { 
       // System.out.println("nabPnumber"+sb.toString()); 
       this._pharmacydata.setNabPnumber(_sb.toString());    
      } 

      else if(localName.equals("ServiceType")) 
      { 
       // System.out.println("serviceType:"+sb.toString()); 
       this._pharmacydata.setServiceType(_sb.toString());    
      } 

      else if(localName.equals("Mobile")) 
      { 
       // System.out.println("mobile:"+sb.toString()); 
       this._pharmacydata.setMobile(_sb.toString());    
      } 

      else if(localName.equals("Table")) 
      { 
       // System.out.println("end table:"+sb.toString()); 
       _pharmacyDataList.addElement(_pharmacydata); 
      } 
     }catch (Exception e) { 
      System.out.println(""+e.getMessage()); 
     } 
    } 


    public void characters(char ch[], int start, int length) { 
     String theString = new String(ch, start, length); 
     _sb.append(theString); 
    } 


    /** 
    * @return the PharmacyDataList 
    */ 
    public Vector getpharmacydataList() 
    { 
     return _pharmacyDataList; 
    } 

} 
Questions connexes