diff options
author | slewis | 2013-03-04 04:56:11 +0000 |
---|---|---|
committer | slewis | 2013-03-04 04:56:11 +0000 |
commit | 28b9df08b0f707211b2d1f84d20135c87b5fdc86 (patch) | |
tree | 9676366c12ebe4b2f7bf9a8af2c23507e11d8f6c | |
parent | 999e5b313126720e179b02d534ecfcb34a21b493 (diff) | |
download | org.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.
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 { |