My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
* Copyright (c) 2009 Jens Scheffler (appenginefan.com)
*
* Licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the
* License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in
* writing, software distributed under the License is
* distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See
* the License for the specific language governing
* permissions and limitations under the License.
*/
package com.appenginefan.toolkit.common;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;

/**
* Environment for http-based communication that uses an apache http client
*
* @author Jens Scheffler
*
*/
public class HttpClientEnvironment implements WebConnectionClient.Environment {

private static final Logger LOG = Logger.getLogger(HttpClientEnvironment.class.getName());

private final HttpClient client = new HttpClient();
private final String url;

public HttpClientEnvironment(String url) {
this.url = url;
}

@Override
public long currentTimeMillis() {
return System.currentTimeMillis();
}

@Override
public void execute(final WebConnectionClient client) {
new Thread(new Runnable(){
@Override
public void run() {
try {
client.run();
} catch (InterruptedException e) {
e.printStackTrace();
}
}}).start();
}

@Override
public void sleep(long millis)
throws InterruptedException {
if (millis > 0) {
Thread.sleep(millis);
}
}

@Override
public String fetch(String data) {
LOG.fine("sending " + data);
PostMethod method = new PostMethod(url);
method.setRequestBody(data);
try {
int returnCode = client.executeMethod(method);
if(returnCode == HttpStatus.SC_OK) {
String response = method.getResponseBodyAsString();
LOG.fine("receiving " + response);
return response;
} else {
LOG.log(Level.WARNING, "Communication failed, status code " + returnCode);
}
} catch (HttpException e) {
LOG.log(Level.WARNING, "Communication failed ", e);
} catch (IOException e) {
LOG.log(Level.WARNING, "Communication failed ", e);
}
finally {
method.releaseConnection();
}
return null;
}

}

Change log

r15 by schefflerjens on Jul 4, 2009   Diff
New utility class: ClientSocketSubstitute

Go to: 
Project members, sign in to write a code review

Older revisions

r14 by schefflerjens on Jun 30, 2009   Diff
Initial revision for (experimental)
WebConnectionServer/Client. Needs
better documentation (sample app plus
a blog post)

...
All revisions of this file

File info

Size: 2706 bytes, 97 lines
Powered by Google Project Hosting