Nirmal
Nirmal

Reputation: 4829

Call a web service and parse xml response in blackberry

Currently I have a ready design for blackberry application.

Now, I need to call the web service in my app, and that web service will give me some xml response.

So, I need to parse that response from xml to some POJO.

So, for parsing the xml response should I go with the basic DOM praser, or should I use any other J2ME specific prasing concept ?

If anybody have any sample tutorial link for the same then it would be very much useful to me.

Thanks in advance....

Upvotes: 0

Views: 2878

Answers (3)

phoraceus
phoraceus

Reputation: 111

I believe that you have recieved the request object.

I will give the code I used to parse the request object from XML.

_value is the object

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

}

Upvotes: 0

Karthick
Karthick

Reputation: 644

Add your xml file data in to 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));     
            }
        }

 }

Upvotes: 1

ageektrapped
ageektrapped

Reputation: 14562

It depends on what your web service serves.

If it is REST-based, you're likely responsible to parse the XML yourself, with a library. I've only ever used kXml 2, a J2ME library that can be used on BlackBerry devices. To use it, it's best to link to the source (otherwise, you have to preverify the jar and export it and that never seems to work for me). It's a forward-only pull parser, similar to XmlReader in .NET, if you're familiar with that.

If your web service is WS*-based (i.e. it uses SOAP), you can use a stub generator to generate a client class that you can use. BlackBerry supports JSR 172, the web services API for J2ME. The WTK has a stub generator that works well. Just point the generator to your web service's wsdl file. A web search should clarify how to use it.

Upvotes: 2

Related Questions