Mercurial > dive4elements > http-client
view src/main/java/de/intevation/artifacts/httpclient/http/HttpClientImpl.java @ 1:c9ac6642973c
Renamed GNVClient and GNVClientImpl to HttpClient and HttpClientImpl.
http-client/trunk@1324 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 17 Feb 2011 10:51:37 +0000 |
parents | |
children | 2fdfa20cfa63 |
line wrap: on
line source
/* * Copyright (c) 2010 by Intevation GmbH * * This program is free software under the LGPL (>=v2.1) * Read the file LGPL.txt coming with the software for details * or visit http://www.gnu.org/licenses/ if it does not exist. */ package de.intevation.artifacts.httpclient.http; import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; import org.apache.log4j.Logger; import org.restlet.Client; import org.restlet.Request; import org.restlet.Response; import org.restlet.data.MediaType; import org.restlet.data.Method; import org.restlet.data.Protocol; import org.restlet.data.Status; import org.restlet.ext.xml.DomRepresentation; import org.restlet.representation.Representation; import org.w3c.dom.Document; import de.intevation.artifacts.httpclient.exceptions.ConnectionException; import de.intevation.artifacts.httpclient.http.response.DocumentResponseHandler; import de.intevation.artifacts.httpclient.http.response.ResponseHandler; import de.intevation.artifacts.httpclient.http.response.StreamResponseHandler; import de.intevation.artifacts.httpclient.objects.Artifact; import de.intevation.artifacts.httpclient.objects.ArtifactFactory; import de.intevation.artifacts.httpclient.utils.ArtifactProtocolUtils; import de.intevation.artifacts.httpclient.utils.XMLUtils; /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class HttpClientImpl implements HttpClient { private static final Logger logger = Logger.getLogger(HttpClient.class); private String serverUrl; public HttpClientImpl(String serverUrl) { this.serverUrl = serverUrl; } @Override public ArtifactFactory[] getArtifactFactories() throws ConnectionException { ResponseHandler handler = new DocumentResponseHandler(); try { String url = serverUrl + "/factories"; Document result = (Document) handler.handle(doGet(url)); return ArtifactProtocolUtils.extractArtifactFactories(result); } catch (IOException ioe) { throw new ConnectionException( "Connection to server failed. No Factories recieved."); } } @Override public Artifact create(Document doc) throws ConnectionException { ResponseHandler handler = new DocumentResponseHandler(); try { String url = serverUrl + "/create"; Document result = (Document) handler.handle(doPost(url, doc)); return ArtifactProtocolUtils.extractArtifact(result); } catch (IOException ioe) { throw new ConnectionException( "Connection to server failed. No Artifact created."); } } @Override public Object describe( Artifact artifact, Document doc, ResponseHandler handler) throws ConnectionException { try { String url = serverUrl + "/artifact/" + artifact.getUuid(); return handler.handle(doPost(url, doc)); } catch (IOException ioe) { throw new ConnectionException( "Connection to server failed: " + ioe.getMessage()); } } @Override public Object feed(Artifact artifact, Document doc, ResponseHandler handler) throws ConnectionException { try { String url = serverUrl + "/artifact/" + artifact.getUuid(); Document result = (Document) handler.handle(doPost(url, doc)); return result; } catch (IOException ioe) { throw new ConnectionException( "Connection to server failed: " + ioe.getMessage()); } } @Override public Object advance(Artifact artifact, Document doc, ResponseHandler handler) throws ConnectionException { try { String url = serverUrl + "/artifact/" + artifact.getUuid(); Document result = (Document) handler.handle(doPost(url, doc)); return result; } catch (IOException ioe) { throw new ConnectionException( "Connection to server failed: " + ioe.getMessage()); } } @Override public void out( Artifact artifact, Document doc, String target, OutputStream out) throws ConnectionException { try { String url = serverUrl + "/artifact/" + artifact.getUuid() + "/" + target; ResponseHandler handler = new StreamResponseHandler(); InputStream stream = (InputStream) handler.handle(doPost(url, doc)); byte[] b = new byte[4096]; int i = -1; while ((i = stream.read(b)) > 0) { out.write(b, 0, i); } } catch (IOException ioe) { throw new ConnectionException( "Connection to server failed: " + ioe.getMessage()); } } private Response doPost(String url, Document body) throws IOException { logger.info("Start HTTP-POST request to: "+ url); Client client = new Client(Protocol.HTTP); Request request = new Request(Method.POST, url); Representation representation = new DomRepresentation( MediaType.APPLICATION_XML, body); request.setEntity(representation); Response response = client.handle(request); Status status = response.getStatus(); if (status.getCode() != 200) { logger.error("Response status: " + status.getCode()); throw new IOException(status.getDescription()); } return response; } private Response doGet(String url) throws IOException { logger.info("Start HTTP-POST request to: "+ url); Client client = new Client(Protocol.HTTP); Request request = new Request(Method.GET, url); Response response = client.handle(request); Status status = response.getStatus(); if (status.getCode() != 200) { logger.error("Response status: " + status.getCode()); throw new IOException(status.getDescription()); } return response; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: