Come leggere la risposta XML da un URL in java?

Ho bisogno di scrivere una semplice funzione che accetta un URL ed elabora la risposta che è XML o JSON, ho controllato il sito Web di Sun https://swingx-ws.dev.java.net/servlets/ProjectDocumentList , ma l’object HttpRequest è da non trovare da nessuna parte, è ansible farlo in Java? Sto scrivendo un’app per i clienti ricchi.

Per l’analisi xml di un inputstream puoi fare:

// the SAX way: XMLReader myReader = XMLReaderFactory.createXMLReader(); myReader.setContentHandler(handler); myReader.parse(new InputSource(new URL(url).openStream())); // or if you prefer DOM: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new URL(url).openStream()); 

Ma per comunicare su http da server a client preferisco usare la libreria di hessian o le molle http invoker lib

Se vuoi stampare XML direttamente sullo schermo puoi usare TransformsrFactory

 URL url = new URL(urlString); URLConnection conn = url.openConnection(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(conn.getInputStream()); TransformsrFactory transformsrFactory= TransformsrFactory.newInstance(); Transformsr xform = transformsrFactory.newTransformsr(); // that's the default xform; use a stylesheet to get a real one xform.transform(new DOMSource(doc), new StreamResult(System.out)); 

Ottieni la tua risposta tramite una normale richiesta http, usando:

  • Apache HttpComponents
  • il built-in URLConnection con = new URL("http://example.com").openConnection() ;

Il prossimo passo è analizzarlo. Dai un’occhiata a questo articolo per una scelta di parser.

Se si desidera utilizzare in modo specifico SwingX-WS , consultare XmlHttpRequest e JSONHttpRequest .

Altro su quelle classi nel post del blog XMLHttpRequest e Swing .

Ok penso di aver risolto il problema di seguito è un codice funzionante

 // package xmlhttp; import org.jdesktop.http.Response; import org.jdesktop.http.Session; import org.jdesktop.http.State; public class GetXmlHttp{ public static void main(String[] args) { getResponse(); } public static void getResponse() { final Session session = new Session(); try { String url="http://192.172.2.23:8080/geoserver/wfs?request=GetFeature&version=1.1.0&outputFormat=GML2&typeName=topp:networkcoverage,topp:tehsil&bbox=73.07846689124875,33.67929015631999,73.07946689124876,33.68029015632,EPSG:4326"; final Response res=session.get(url); boolean notDone=true; do { System.out.print(session.getState().toString()); if(session.getState()==State.DONE) { String xml=res.toString(); System.out.println(xml); notDone=false; } }while(notDone); } catch (Exception e1) { e1.printStackTrace(); } } } 

Ho trovato che la risposta di cui sopra mi ha causato un’eccezione quando ho provato a istanziare il parser. Ho trovato il seguente codice che ha risolto questo problema su http://docstore.mik.ua/orelly/xml/sax2/ch03_02.htm .

 import org.xml.sax.*; import javax.xml.parsers.*; XMLReader parser; try { SAXParserFactory factory; factory = SAXParserFactory.newInstance (); factory.setNamespaceAware (true); parser = factory.newSAXParser ().getXMLReader (); // success! } catch (FactoryConfigurationError err) { System.err.println ("can't create JAXP SAXParserFactory, " + err.getMessage ()); } catch (ParserConfigurationException err) { System.err.println ("can't create XMLReader with namespaces, " + err.getMessage ()); } catch (SAXException err) { System.err.println ("Hmm, SAXException, " + err.getMessage ()); } 

Questo codice è in grado di analizzare l’XML avvolge la risposta JSON e viene visualizzato nel front-end utilizzando ajax.

 Required JavaScript code.