2010-06-03 67 views
0

目前我已经有了一个适用于黑莓应用程序的现成设计。在黑莓手机上调用Web服务和解析xml响应

现在,我需要在我的应用程序中调用Web服务,并且该Web服务会给我一些XML响应。

所以,我需要解析从xml到某些POJO的响应。

因此,为了解析xml响应,我应该使用基本的DOM praser,还是应该使用其他任何J2ME特定的prasing概念?

如果有人有相同的样本教程链接,那么这对我非常有用。

在此先感谢....

回答

2

这取决于你的网络服务供应什么。

如果它是基于REST的,那么您可能有责任自己用一个库来解析XML。我只用过kXml 2,这是一款可在BlackBerry设备上使用的J2ME库。要使用它,最好链接到源代码(否则,你必须预先验证jar并导出它,并且这对我来说似乎不起作用)。这是一个只向前推的解析器,类似于.NET中的XmlReader,如果你熟悉的话。

如果您的Web服务是基于WS *的(即使用SOAP),则可以使用存根生成器来生成可以使用的客户端类。 BlackBerry支持JSR 172,这是J2ME的Web服务API。 WTK有一个存根发生器,运行良好。只需将生成器指向您的Web服务的wsdl文件即可。网络搜索应该阐明如何使用它。

+0

感谢您的答复......其实我有SOAP的情况下,在我的web服务......所以,我将研究JSR 172你的建议。 – Nirmal 2010-06-04 13:54:02

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

}