ALF-4842 (Transfer Service):

- Fixed issue in rehydrating exception received from target repo. Added appropriate test case.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@22618 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Brian Remmington
2010-09-17 15:31:30 +00:00
parent 0aabf71118
commit 73025bf7e5
2 changed files with 43 additions and 14 deletions

View File

@@ -60,7 +60,6 @@ import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
import org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory; import org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
@@ -171,24 +170,26 @@ public class HttpClientTransmitterImpl implements TransferTransmitter
{ {
if (response != 200) if (response != 200)
{ {
String errorId = null; Throwable error = null;
String[] errorParams = null; try
try { {
log.error("Received \"unsuccessful\" response code from target server: " + response); log.error("Received \"unsuccessful\" response code from target server: " + response);
String errorPayload = method.getResponseBodyAsString(); String errorPayload = method.getResponseBodyAsString();
JSONObject errorObj = new JSONObject(errorPayload); JSONObject errorObj = new JSONObject(errorPayload);
errorId = errorObj.getString("alfrescoErrorId"); error = rehydrateError(errorObj);
JSONArray errorParamArray = errorObj.getJSONArray("alfrescoErrorParams"); }
int length = errorParamArray.length(); catch (Exception ex)
errorParams = new String[length]; {
for (int i = 0; i < length; ++i)
{
errorParams[i] = errorParamArray.getString(i);
}
} catch (Exception ex) {
throw new TransferException(MSG_UNSUCCESSFUL_RESPONSE, new Object[] {methodName, response}); throw new TransferException(MSG_UNSUCCESSFUL_RESPONSE, new Object[] {methodName, response});
} }
throw new TransferException(errorId, errorParams); if ((error != null) && TransferException.class.isAssignableFrom(error.getClass()))
{
throw (TransferException)error;
}
else
{
throw new TransferException(MSG_UNSUCCESSFUL_RESPONSE, error);
}
} }
} }

View File

@@ -238,6 +238,34 @@ public class HttpClientTransmitterImplTest extends TestCase
assertTrue(Arrays.deepEquals(expectedException.getMsgParams(), receivedException.getMsgParams())); assertTrue(Arrays.deepEquals(expectedException.getMsgParams(), receivedException.getMsgParams()));
} }
public void testBeginFailure() throws Exception
{
final ExceptionJsonSerializer errorSerializer = new ExceptionJsonSerializer();
final TransferException expectedException = new TransferException("my message id", new Object[] {"param1", "param2"});
when(mockedHttpClient.executeMethod(any(HostConfiguration.class), any(HttpMethod.class),
any(HttpState.class))).thenReturn(500);
doAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable
{
JSONObject errorObject = errorSerializer.serialize(expectedException);
return errorObject.toString();
}
}).when(mockedHttpMethodFactory.latestPostMethod).getResponseBodyAsString();
try
{
transmitter.begin(target);
fail();
}
catch(TransferException ex)
{
assertEquals(expectedException.getClass(), ex.getClass());
assertEquals(expectedException.getMsgId(), ex.getMsgId());
assertTrue(Arrays.deepEquals(expectedException.getMsgParams(), ex.getMsgParams()));
}
}
private static class CustomSocketFactory implements SecureProtocolSocketFactory private static class CustomSocketFactory implements SecureProtocolSocketFactory
{ {