Как читать XML-ответ от URL-адреса в java?
Мне нужно написать простую функцию, которая принимает URL-адрес и обрабатывает ответ, который представляет собой XML или JSON, я проверил веб-сайт Sun https://swingx-ws.dev.java.net/servlets/ProjectDocumentList , но объект HttpRequest нигде, можно ли это сделать на Java? Я напишу богатое клиентское приложение.
- Java XML Parser для огромных файлов
- Как сохранить вывод верхней команды в формате XML?
- Как вы настраиваете, как JAXB генерирует множественные имена методов?
- Где я могу найти подробное сравнение фреймворков Java XML?
- Сериализация списков classов для XML
- XML для CSV с использованием XSLT
- Как читать XML в .NET?
- Лучший XML-парсер для Java
Для анализа xml входного streamа вы можете:
// 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());
Но для связи через http от сервера к клиенту я предпочитаю использовать hessian library или springs http invoker lib
Если вы хотите распечатать XML непосредственно на экране, вы можете использовать TransformerFactory
URL url = new URL(urlString); URLConnection conn = url.openConnection(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(conn.getInputStream()); TransformerFactory transformerFactory= TransformerFactory.newInstance(); Transformer xform = transformerFactory.newTransformer(); // that's the default xform; use a stylesheet to get a real one xform.transform(new DOMSource(doc), new StreamResult(System.out));
Получите ответ через обычный http-запрос, используя:
- Apache HttpComponents
- встроенный
URLConnection con = new URL("http://example.com").openConnection()
;
Следующий шаг – parsing. Взгляните на эту статью для выбора парсера.
Если вы специально хотите использовать SwingX-WS , посмотрите на XmlHttpRequest и JSONHttpRequest .
Подробнее об этих classах в блоге XMLHttpRequest и Swing .
Хорошо, я думаю, что решает проблему ниже, это рабочий код
// 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(); } } }
в// 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(); } } }
Я обнаружил, что вышеупомянутый ответ вызвал у меня исключение, когда я попытался создать экземпляр парсера. Я нашел следующий код, который разрешил это на 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 ()); }
Этот код предназначен для анализа XML-обертывания JSON Response и отображения в интерфейсе с помощью ajax.
Required JavaScript code.