views:

1521

answers:

6

Hi . I need to write a simple function that takes a URL and processes the response which is XML or JSON, I have checked the Sun website https://swingx-ws.dev.java.net/servlets/ProjectDocumentList , but the HttpRequest object is to be found nowhere, is it possible to do this in Java? I`m writting a rich client end app.

+1  A: 

Get your response via a regular http-request, using:

The next step is parsing it. Take a look at this article for a choice of parser.

Bozho
Hi thanks for your reply, I did check a few parsers but the problem is that I cannot seem to find a bridge between these parsers and an xml response from a URL, all the parsers talk about files and nobody talks about an inputstream hooked on to a URL
Imran
@Imran they all accept input-streams as well, just look at their API docs
Bozho
+1  A: 

If you specifically want to use SwingX-WS, then have a look at XmlHttpRequest and JSONHttpRequest.

More on those classes in the XMLHttpRequest and Swing blog post.

Pascal Thivent
Hi thanks, well I did try this code out, It looks very simple and easy but I downloaded and included the library and I cannot find the HttpRequest object in the Libraries, that is so strange
Imran
@Imran I think that `HttpRequest` has been removed but I pointed out the classes to use (the blog post is not in sync with the code IMO, I joined it for reference only).
Pascal Thivent
Yes that is why I`m having quite a lot of trouble, I have tried modifying the code but I cant seem to find the right objects
Imran
@Imran Just use the more specialized `XmlHttpRequest` instead of `HttpRequest`.
Pascal Thivent
A: 

///////// / / / / / / / / / /

Imran
delete one of the two answers.
Bozho
A: 

Ok I think I have solves the problem below is a working code

//
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();
        }


    }

}
Imran
now the variable xml is giving some other information apart from the xml response, shall i simple pass this string to a parser or do I need to take care of that ..the xml response is as below------------DONE HTTP 200: OK Content-Type: text/xml Server: Apache-Coyote/1.1 Date: Mon, 22 Feb 2010 12:35:42 GMT Content-Encoding: gzip Transfer-Encoding: chunked<?xml version="1.0" encoding="UTF-8"?><wfs:FeatureCollection xmlns="http://www.opengis.net/wfs" xmlns:wfs="http://www.op............................ and so on
Imran
+1  A: 

For xml parsing of an inputstream you can do:

// 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());

But to communicate over http from server to client I prefer using hessian library or springs http invoker lib

Karussell
thankyou for your reply, Im getting the response into a DOM and I`m getting heapspace error at :final Response res=session.get(url);the xml response is quite large, any idea how to get rid of this?
Imran
yes, DOM reads all the stuff into memory. So either you should use sax api or increase heapspace via -Xmx512m. There are other options as well e.g. with pull parsers.
Karussell
A: 

If you want to print XML directly onto the screen you can use 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 factory = TransformerFactory.newInstance(); Transformer xform = factory.newTransformer();

// that’s the default xform; use a stylesheet to get a real one xform.transform(new DOMSource(doc), new StreamResult(System.out));

thisisananth