2010-06-03 5 views
0

В настоящее время у меня есть готовый дизайн для приложения BlackBerry.Позвоните в веб-службу и проанализируйте xml-ответ в blackberry

Теперь мне нужно вызвать веб-службу в своем приложении, и этот веб-сервис даст мне некоторый ответ xml.

Итак, мне нужно разобрать этот ответ от xml на некоторый POJO.

Итак, для синтаксического анализа ответа xml я должен использовать базовый DOM-praser или использовать какую-либо другую концепцию J2ME для прайминга?

Если у кого-нибудь есть какая-либо учебная ссылка для этого же, это было бы очень полезно для меня.

Заранее спасибо ....

ответ

2

Это зависит от того, что служит ваш веб-сервис.

Если он основан на REST, вы, вероятно, ответственны за самостоятельный анализ XML с помощью библиотеки. Я использовал только kXml 2, библиотеку J2ME, которая может быть использована на устройствах BlackBerry. Чтобы использовать его, лучше всего ссылаться на источник (в противном случае вы должны предварительно проверять банку и экспортировать ее, и это никогда не работает для меня). Это прямой синтаксический анализатор, похожий на XmlReader в .NET, если вы знакомы с этим.

Если ваш веб-сервис WS * (например, он использует SOAP), вы можете использовать генератор-заглушку для создания класса клиента, который вы можете использовать. BlackBerry поддерживает JSR 172, API веб-сервисов для J2ME. WTK имеет стабилизатор, который работает хорошо. Просто укажите генератор на wsdl-файл вашего веб-сервиса. Веб-поиск должен прояснить, как его использовать.

+0

Спасибо за ответ ... На самом деле у меня есть случай SOAP в моем веб-службы ... Так что, я буду изучать JSR 172, как вы предлагаете. – Nirmal

1

Добавить данные XML-файл, чтобы 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

Я считаю, что вы получили объект запроса.

Я дам код, который я использовал для анализа объекта запроса из XML.

_value является объектом

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; 
    } 

} 
Смежные вопросы