Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2013-03-04 04:56:11 +0000
committerslewis2013-03-04 04:56:11 +0000
commit28b9df08b0f707211b2d1f84d20135c87b5fdc86 (patch)
tree9676366c12ebe4b2f7bf9a8af2c23507e11d8f6c
parent999e5b313126720e179b02d534ecfcb34a21b493 (diff)
downloadorg.eclipse.ecf-28b9df08b0f707211b2d1f84d20135c87b5fdc86.tar.gz
org.eclipse.ecf-28b9df08b0f707211b2d1f84d20135c87b5fdc86.tar.xz
org.eclipse.ecf-28b9df08b0f707211b2d1f84d20135c87b5fdc86.zip
Fix for bug 320175. This changes the API onR-Release_HEAD-sdk_feature-91_2013-03-07_04-12-17
IRemoteResponseDeserializer so that the final argument is a byte[] rather than String, allowing rest services to have arbitrary response types.
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice.rest.synd/META-INF/MANIFEST.MF2
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice.rest.synd/src/org/eclipse/ecf/remoteservice/rest/synd/SyndFeedResponseDeserializer.java4
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/RestException.java6
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/client/RestClientService.java26
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/client/XMLRemoteResponseDeserializer.java4
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice/.settings/.api_filters19
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice/META-INF/MANIFEST.MF4
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice/build.properties1
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/AbstractClientContainer.java5
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/AbstractClientService.java5
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/IRemoteResponseDeserializer.java3
-rw-r--r--tests/bundles/org.eclipse.ecf.tests.remoteservice.rest/src/org/eclipse/ecf/tests/remoteservice/rest/RestPutServiceTest.java2
-rw-r--r--tests/bundles/org.eclipse.ecf.tests.remoteservice.rest/src/org/eclipse/ecf/tests/remoteservice/rest/twitter/TwitterRemoteServiceTest.java4
13 files changed, 28 insertions, 57 deletions
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice.rest.synd/META-INF/MANIFEST.MF b/framework/bundles/org.eclipse.ecf.remoteservice.rest.synd/META-INF/MANIFEST.MF
index da57273c0..426e3137d 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice.rest.synd/META-INF/MANIFEST.MF
+++ b/framework/bundles/org.eclipse.ecf.remoteservice.rest.synd/META-INF/MANIFEST.MF
@@ -17,5 +17,5 @@ Import-Package: com.sun.syndication.feed;version="0.9.0",
Bundle-ActivationPolicy: lazy
Require-Bundle: org.jdom;bundle-version="1.0.0",
org.eclipse.equinox.common;bundle-version="3.6.0"
-Export-Package: org.eclipse.ecf.remoteservice.rest.synd;version="1.0.0"
+Export-Package: org.eclipse.ecf.remoteservice.rest.synd;version="1.1.0"
Bundle-Localization: plugin
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice.rest.synd/src/org/eclipse/ecf/remoteservice/rest/synd/SyndFeedResponseDeserializer.java b/framework/bundles/org.eclipse.ecf.remoteservice.rest.synd/src/org/eclipse/ecf/remoteservice/rest/synd/SyndFeedResponseDeserializer.java
index 8983dae1f..e4d9d4712 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice.rest.synd/src/org/eclipse/ecf/remoteservice/rest/synd/SyndFeedResponseDeserializer.java
+++ b/framework/bundles/org.eclipse.ecf.remoteservice.rest.synd/src/org/eclipse/ecf/remoteservice/rest/synd/SyndFeedResponseDeserializer.java
@@ -23,9 +23,9 @@ import org.eclipse.ecf.remoteservice.client.IRemoteResponseDeserializer;
public class SyndFeedResponseDeserializer implements IRemoteResponseDeserializer {
public Object deserializeResponse(String endpoint, IRemoteCall call, IRemoteCallable callable, Map responseHeaders,
- String responseBody) throws NotSerializableException {
+ byte[] responseBody) throws NotSerializableException {
try {
- return new SyndFeedInput().build(new StringReader(responseBody));
+ return new SyndFeedInput().build(new StringReader(new String(responseBody)));
} catch (IllegalArgumentException e) {
Activator.getDefault().log(new Status(IStatus.WARNING, Activator.PLUGIN_ID, e.getMessage()));
throw new NotSerializableException(e.getMessage());
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/RestException.java b/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/RestException.java
index a90471a21..e508433b2 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/RestException.java
+++ b/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/RestException.java
@@ -16,7 +16,7 @@ public class RestException extends ECFException {
private static final long serialVersionUID = -6565657473114300609L;
private int errorCode = -1;
- private String response = null;
+ private byte[] response = null;
public RestException(IStatus status) {
super(status);
@@ -58,7 +58,7 @@ public class RestException extends ECFException {
this.errorCode = errorCode;
}
- public RestException(String message, Throwable cause, int errorCode, String response) {
+ public RestException(String message, Throwable cause, int errorCode, byte[] response) {
super(message, cause);
this.errorCode = errorCode;
this.response = response;
@@ -68,7 +68,7 @@ public class RestException extends ECFException {
return errorCode;
}
- public String getResponseBody() {
+ public byte[] getResponseBody() {
return response;
}
}
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/client/RestClientService.java b/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/client/RestClientService.java
index 118ec23c7..970aeb806 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/client/RestClientService.java
+++ b/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/client/RestClientService.java
@@ -17,7 +17,6 @@ import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpMethodParams;
-import org.apache.commons.httpclient.util.EncodingUtil;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.ecf.core.security.*;
@@ -68,17 +67,17 @@ public class RestClientService extends AbstractClientService {
String uri = prepareEndpointAddress(call, callable);
HttpMethod httpMethod = createAndPrepareHttpMethod(uri, call, callable);
// execute method
- String responseBody = null;
+ byte[] responseBody = null;
int responseCode = -1;
try {
responseCode = httpClient.executeMethod(httpMethod);
if (isResponseOk(responseCode)) {
// Get responseBody as String
- responseBody = getResponseAsString(httpMethod);
+ responseBody = getResponseAsBytes(httpMethod);
} else {
// If this method returns true, we should retrieve the response body
if (retrieveErrorResponseBody(responseCode)) {
- responseBody = getResponseAsString(httpMethod);
+ responseBody = getResponseAsBytes(httpMethod);
}
// Now pass to the exception handler
handleException("Http response not OK. URL=" + uri + " responseCode=" + new Integer(responseCode), null, responseCode, responseBody); //$NON-NLS-1$ //$NON-NLS-2$
@@ -102,24 +101,11 @@ public class RestClientService extends AbstractClientService {
return false;
}
- protected String getResponseAsString(HttpMethod httpMethod) throws IOException {
- // Get response bytes
- byte[] responseBytes = httpMethod.getResponseBody();
- String responseCharSet = null;
- if (httpMethod instanceof HttpMethodBase) {
- HttpMethodBase methodBase = (HttpMethodBase) httpMethod;
- responseCharSet = methodBase.getRequestCharSet();
- }
- return getResponseAsString(responseBytes, responseCharSet);
- }
-
- protected String getResponseAsString(byte[] bytes, String responseCharSet) {
- if (bytes == null)
- return null;
- return EncodingUtil.getString(bytes, responseCharSet);
+ protected byte[] getResponseAsBytes(HttpMethod httpMethod) throws IOException {
+ return httpMethod.getResponseBody();
}
- protected void handleException(String message, Throwable e, int responseCode, String responseBody) throws RestException {
+ protected void handleException(String message, Throwable e, int responseCode, byte[] responseBody) throws RestException {
logException(message, e);
throw new RestException(message, e, responseCode, responseBody);
}
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/client/XMLRemoteResponseDeserializer.java b/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/client/XMLRemoteResponseDeserializer.java
index 9d666c913..72608602d 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/client/XMLRemoteResponseDeserializer.java
+++ b/framework/bundles/org.eclipse.ecf.remoteservice.rest/src/org/eclipse/ecf/remoteservice/rest/client/XMLRemoteResponseDeserializer.java
@@ -28,12 +28,12 @@ import org.xml.sax.InputSource;
*/
public class XMLRemoteResponseDeserializer implements IRemoteResponseDeserializer {
- public Object deserializeResponse(String uri, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, String responseBody) throws NotSerializableException {
+ public Object deserializeResponse(String uri, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, byte[] responseBody) throws NotSerializableException {
DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
String errorMsg = "XML response can't be parsed: "; //$NON-NLS-1$
try {
DocumentBuilder builder = documentFactory.newDocumentBuilder();
- InputSource src = new InputSource(new StringReader(responseBody));
+ InputSource src = new InputSource(new StringReader(new String(responseBody)));
Document dom = builder.parse(src);
return dom;
} catch (Exception e) {
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice/.settings/.api_filters b/framework/bundles/org.eclipse.ecf.remoteservice/.settings/.api_filters
index 03642f13e..950b0b2b5 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice/.settings/.api_filters
+++ b/framework/bundles/org.eclipse.ecf.remoteservice/.settings/.api_filters
@@ -1,24 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<component id="org.eclipse.ecf.remoteservice" version="2">
- <resource path="src/org/eclipse/ecf/remoteservice/Constants.java" type="org.eclipse.ecf.remoteservice.Constants">
- <filter comment="Added SERVICE_ASYNC_RSPROXY_CLASS constant" id="403767336">
- <message_arguments>
- <message_argument value="org.eclipse.ecf.remoteservice.Constants"/>
- <message_argument value="SERVICE_ASYNC_RSPROXY_CLASS_"/>
- </message_arguments>
- </filter>
- <filter id="405864542">
- <message_arguments>
- <message_argument value="org.eclipse.ecf.remoteservice.Constants"/>
- <message_argument value="SERVICE_ASYNC_PROXY"/>
- </message_arguments>
- </filter>
- <filter id="1211105284">
- <message_arguments>
- <message_argument value="SERVICE_ASYNC_RSPROXY_CLASS_"/>
- </message_arguments>
- </filter>
- </resource>
<resource path="src/org/eclipse/ecf/remoteservice/util/RemoteFilterImpl.java" type="org.eclipse.ecf.remoteservice.util.RemoteFilterImpl">
<filter comment="remote service filter can implement osgi Filter" id="574660632">
<message_arguments>
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice/META-INF/MANIFEST.MF b/framework/bundles/org.eclipse.ecf.remoteservice/META-INF/MANIFEST.MF
index 9c285918e..e267eb02c 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice/META-INF/MANIFEST.MF
+++ b/framework/bundles/org.eclipse.ecf.remoteservice/META-INF/MANIFEST.MF
@@ -13,9 +13,7 @@ Export-Package: org.eclipse.ecf.internal.remoteservice;x-internal:=true,
org.eclipse.ecf.remoteservice.events;version="6.0.0",
org.eclipse.ecf.remoteservice.util;version="6.0.0",
org.eclipse.ecf.remoteservice.util.tracker;version="6.0.0"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- J2SE-1.4,
- CDC-1.0/Foundation-1.0
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
Require-Bundle: org.eclipse.equinox.common,
org.eclipse.ecf
Import-Package: org.eclipse.equinox.concurrent.future;version="1.0.0",
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice/build.properties b/framework/bundles/org.eclipse.ecf.remoteservice/build.properties
index 73944146d..83c17b6d4 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice/build.properties
+++ b/framework/bundles/org.eclipse.ecf.remoteservice/build.properties
@@ -6,4 +6,3 @@ bin.includes = .,\
src.includes = about.html
jars.compile.order = .
source.. = src/
-javacTarget=jsr14
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/AbstractClientContainer.java b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/AbstractClientContainer.java
index 50580f150..1c4977a8c 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/AbstractClientContainer.java
+++ b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/AbstractClientContainer.java
@@ -429,7 +429,10 @@ public abstract class AbstractClientContainer extends AbstractContainer implemen
return val;
}
- protected Object processResponse(String uri, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, String responseBody) throws NotSerializableException {
+ /**
+ * @since 7.0
+ */
+ protected Object processResponse(String uri, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, byte[] responseBody) throws NotSerializableException {
IRemoteResponseDeserializer deserializer = getResponseDeserializer();
return (deserializer == null) ? null : deserializer.deserializeResponse(uri, call, callable, responseHeaders, responseBody);
}
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/AbstractClientService.java b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/AbstractClientService.java
index aa5c5f3c1..11172adf2 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/AbstractClientService.java
+++ b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/AbstractClientService.java
@@ -202,7 +202,10 @@ public abstract class AbstractClientService extends AbstractRemoteService {
return getClientContainer().prepareParameters(uri, call, callable);
}
- protected Object processResponse(String uri, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, String responseBody) throws NotSerializableException {
+ /**
+ * @since 7.0
+ */
+ protected Object processResponse(String uri, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, byte[] responseBody) throws NotSerializableException {
return getClientContainer().processResponse(uri, call, callable, responseHeaders, responseBody);
}
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/IRemoteResponseDeserializer.java b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/IRemoteResponseDeserializer.java
index 74dce0067..d9356123a 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/IRemoteResponseDeserializer.java
+++ b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/client/IRemoteResponseDeserializer.java
@@ -30,7 +30,8 @@ public interface IRemoteResponseDeserializer {
* @param responseBody the actual response body to deserialize. May be <code>null</code>.
* @return Object the deserialized response. May be <code>null</code>.
* @throws NotSerializableException thrown if the responseBody cannot be deserialized.
+ * @since 7.0
*/
- public Object deserializeResponse(String endpoint, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, String responseBody) throws NotSerializableException;
+ public Object deserializeResponse(String endpoint, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, byte[] responseBody) throws NotSerializableException;
}
diff --git a/tests/bundles/org.eclipse.ecf.tests.remoteservice.rest/src/org/eclipse/ecf/tests/remoteservice/rest/RestPutServiceTest.java b/tests/bundles/org.eclipse.ecf.tests.remoteservice.rest/src/org/eclipse/ecf/tests/remoteservice/rest/RestPutServiceTest.java
index d4504a936..fe13cebd1 100644
--- a/tests/bundles/org.eclipse.ecf.tests.remoteservice.rest/src/org/eclipse/ecf/tests/remoteservice/rest/RestPutServiceTest.java
+++ b/tests/bundles/org.eclipse.ecf.tests.remoteservice.rest/src/org/eclipse/ecf/tests/remoteservice/rest/RestPutServiceTest.java
@@ -43,7 +43,7 @@ public class RestPutServiceTest extends AbstractRestTestCase {
adapter.setResponseDeserializer(new IRemoteResponseDeserializer() {
public Object deserializeResponse(String endpoint,
IRemoteCall call, IRemoteCallable callable,
- Map responseHeaders, String responseBody)
+ Map responseHeaders, byte[] responseBody)
throws NotSerializableException {
return null;
}});
diff --git a/tests/bundles/org.eclipse.ecf.tests.remoteservice.rest/src/org/eclipse/ecf/tests/remoteservice/rest/twitter/TwitterRemoteServiceTest.java b/tests/bundles/org.eclipse.ecf.tests.remoteservice.rest/src/org/eclipse/ecf/tests/remoteservice/rest/twitter/TwitterRemoteServiceTest.java
index c6311761c..7f7dae35e 100644
--- a/tests/bundles/org.eclipse.ecf.tests.remoteservice.rest/src/org/eclipse/ecf/tests/remoteservice/rest/twitter/TwitterRemoteServiceTest.java
+++ b/tests/bundles/org.eclipse.ecf.tests.remoteservice.rest/src/org/eclipse/ecf/tests/remoteservice/rest/twitter/TwitterRemoteServiceTest.java
@@ -88,10 +88,10 @@ public abstract class TwitterRemoteServiceTest extends AbstractRestTestCase {
private IRemoteResponseDeserializer createRestResource() {
return new IRemoteResponseDeserializer() {
- public Object deserializeResponse(String uri, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, String responseBody)
+ public Object deserializeResponse(String uri, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, byte[] responseBody)
throws NotSerializableException {
try {
- JSONArray timeline = new JSONArray(responseBody);
+ JSONArray timeline = new JSONArray(new String(responseBody));
List statuses = new ArrayList();
for (int i = 0; i < timeline.length(); i++) {
try {

Back to the top