Позвоните в веб-сервис и проанализируйте ответ xml в blackberry - PullRequest
0 голосов
/ 03 июня 2010

В настоящее время у меня есть готовый дизайн для приложения Blackberry.

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

Итак, мне нужно проанализировать ответ от xml до некоторого POJO.

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

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

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

Ответы [ 3 ]

2 голосов
/ 04 июня 2010

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

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

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

1 голос
/ 04 июня 2010

Добавьте данные вашего 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 голосов
/ 21 января 2011

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

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

_значение объекта

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

}
...