use of com.google.gwt.user.server.rpc.SerializationPolicy in project pentaho-platform by pentaho.
the class PluginGwtRpc method loadSerializationPolicy.
@Nullable
@Override
protected SerializationPolicy loadSerializationPolicy(@NonNull String moduleContextPath, @Nullable String strongName) {
/*
* Plugin request path break down example.
*
* - moduleBaseURL = 'http://localhost:8080/pentaho/content/data-access/resources/gwt/'
* - modulePath = '/pentaho/content/data-access/resources/gwt/'
* - appContextPath = '/pentaho'
* - moduleContextPath = '/content/data-access/resources/gwt/'
* - pluginContextPath = '/data-access/resources/gwt/'
* - serializationPolicyFileName = '/data-access/resources/gwt/{strongName}.gwt.rpc'
*/
// Special logic to use a spring defined SerializationPolicy for a plugin.
String pluginId = PluginUtil.getPluginIdFromPath(moduleContextPath);
SerializationPolicy serializationPolicy = PentahoSystem.get(SerializationPolicy.class, PentahoSessionHolder.getSession(), Collections.singletonMap("plugin", pluginId));
if (serializationPolicy != null) {
return serializationPolicy;
}
String serializationPolicyFileName = SerializationPolicyLoader.getSerializationPolicyFileName(strongName);
URL serializationPolicyUrl = getSerializationPolicyUrl(serializationPolicyFileName, moduleContextPath);
return serializationPolicyUrl != null ? loadSerializationPolicyFromInputStream(getInputStreamSupplier(serializationPolicyUrl), serializationPolicyFileName) : null;
}
use of com.google.gwt.user.server.rpc.SerializationPolicy in project pentaho-platform by pentaho.
the class GwtRpcSerializationPolicyCache method getSerializationPolicy.
@NonNull
@Override
public SerializationPolicy getSerializationPolicy(@Nullable String moduleBaseURL, @Nullable String strongName, @NonNull SerializationPolicyProvider sourceProvider) {
String key = moduleBaseURL + strongName;
SerializationPolicy serializationPolicy = serializationPolicyCache.get(key);
if (serializationPolicy != null) {
return serializationPolicy;
}
serializationPolicy = sourceProvider.getSerializationPolicy(moduleBaseURL, strongName);
if (serializationPolicy == null) {
throw new RuntimeException("Serialization Policy Provider returned null for " + moduleBaseURL + " " + strongName + ".");
}
serializationPolicyCache.put(key, serializationPolicy);
return serializationPolicy;
}
use of com.google.gwt.user.server.rpc.SerializationPolicy in project pentaho-platform by pentaho.
the class GwtRpcPluginProxyServlet method doGetSerializationPolicy.
@Override
protected SerializationPolicy doGetSerializationPolicy(HttpServletRequest request, String moduleBaseURL, String strongName) {
/*
* The request path is broken up for processing like so: Ex: given a request for serialization file at
* '/pentaho/content/data-access/resources/gwt/{strongName}' * modulePath = ????
* '/pentaho/content/data-access/resources/gwt/{strongName}' * appContextPath = '/pentaho' * servletContextPath =
* '/content/data-access/resources/gwt/{strongName}' * pluginContextPath = '/data-access/resources/gwt/{strongName}'
*/
SerializationPolicy serializationPolicy = null;
String appContextPath = request.getContextPath();
String modulePath = null;
if (moduleBaseURL != null) {
try {
modulePath = new URL(moduleBaseURL).getPath();
} catch (MalformedURLException ex) {
logger.error(Messages.getInstance().getErrorString("GwtRpcPluginProxyServlet.ERROR_0004_MALFORMED_URL", moduleBaseURL), // $NON-NLS-1$
ex);
// cannot proceed, default serialization policy will apply
return null;
}
}
if (modulePath.contains("WEBAPP_ROOT")) {
modulePath = scrubWebAppRoot(modulePath);
}
String servletContextPath = modulePath.substring(appContextPath.length());
// Special logic to use a spring defined SerializationPolicy for a plugin.
String pluginId = PluginUtil.getPluginIdFromPath(servletContextPath);
serializationPolicy = PentahoSystem.get(SerializationPolicy.class, PentahoSessionHolder.getSession(), Collections.singletonMap("plugin", pluginId));
if (serializationPolicy != null) {
return serializationPolicy;
}
String serializationPolicyFilename = SerializationPolicyLoader.getSerializationPolicyFileName(strongName);
URL serializationPolicyUrl = getSerializationPolicyUrl(serializationPolicyFilename, appContextPath, servletContextPath);
if (serializationPolicyUrl == null) {
// default serialization policy will apply
return null;
}
InputStream rpcFileInputStream = null;
try {
rpcFileInputStream = serializationPolicyUrl.openStream();
if (rpcFileInputStream != null) {
serializationPolicy = SerializationPolicyLoader.loadFromStream(rpcFileInputStream, null);
}
} catch (IOException e) {
logger.error(Messages.getInstance().getErrorString("GwtRpcPluginProxyServlet.ERROR_0007_FAILED_TO_OPEN_FILE", serializationPolicyFilename), // $NON-NLS-1$
e);
} catch (ParseException e) {
logger.error(Messages.getInstance().getErrorString("GwtRpcPluginProxyServlet.ERROR_0008_FAILED_TO_PARSE_FILE", serializationPolicyFilename), // $NON-NLS-1$
e);
} finally {
if (rpcFileInputStream != null) {
try {
rpcFileInputStream.close();
} catch (IOException e) {
// do nothing }
}
}
}
// Note: caching is handled by the parent class
return serializationPolicy;
}
use of com.google.gwt.user.server.rpc.SerializationPolicy in project pentaho-platform by pentaho.
the class AbstractGwtRpcTest method testLoadSerializationPolicyFromInputStreamLogsAndReturnsNullAndClosesStreamIfLoadThrowsIOException.
@Test
public void testLoadSerializationPolicyFromInputStreamLogsAndReturnsNullAndClosesStreamIfLoadThrowsIOException() throws IOException {
String serializationPolicyFileName = "ABCDF12345.gwt.rpc";
InputStream inputStreamMock = mock(InputStream.class);
ThrowingSupplier<InputStream, IOException> inputStreamSupplier = () -> inputStreamMock;
IOException error = new IOException();
try (MockedStatic<SerializationPolicyLoader> serializationPolicyLoader = Mockito.mockStatic(SerializationPolicyLoader.class)) {
serializationPolicyLoader.when(() -> SerializationPolicyLoader.loadFromStream(inputStreamMock, null)).thenThrow(error);
SerializationPolicy result = AbstractGwtRpc.loadSerializationPolicyFromInputStream(inputStreamSupplier, serializationPolicyFileName);
assertNull(result);
verify(loggerMock).error(nullable(String.class), eq(error));
verify(inputStreamMock).close();
}
}
use of com.google.gwt.user.server.rpc.SerializationPolicy in project pentaho-platform by pentaho.
the class AbstractGwtRpcTest method testInvokeServiceClassDoesNotNeedToImplementServiceInterface.
@Test
public void testInvokeServiceClassDoesNotNeedToImplementServiceInterface() throws NoSuchMethodException, SerializationException {
ServiceClassWhichDoesNotImplementInterface target = new ServiceClassWhichDoesNotImplementInterface();
Method targetMethod = target.getClass().getMethod("method", String.class);
ClassLoader targetClassLoader = mock(ClassLoader.class);
Method serviceMethod = ServiceInterface.class.getMethod("method", String.class);
Object[] rpcParameters = new Object[] { "id1" };
SerializationPolicy policy = mock(SerializationPolicy.class);
RPCRequest rpcRequest = new RPCRequest(serviceMethod, rpcParameters, policy, 0);
HttpServletRequest httpRequestMock = mock(HttpServletRequest.class);
String response = "rpc response";
TestGwtRpc gwtRpcSpy = spy(new TestGwtRpc(httpRequestMock));
doReturn(target).when(gwtRpcSpy).getTarget();
doReturn(targetClassLoader).when(gwtRpcSpy).getTargetClassLoader();
doReturn(rpcRequest).when(gwtRpcSpy).getRequest();
// Proven if the correct targetMethod is received at this call.
try (MockedStatic<RPC> rpc = Mockito.mockStatic(RPC.class)) {
rpc.when(() -> RPC.invokeAndEncodeResponse(target, targetMethod, rpcParameters, policy)).thenReturn(response);
String result = gwtRpcSpy.invoke();
assertEquals(response, result);
rpc.verify(() -> RPC.invokeAndEncodeResponse(target, targetMethod, rpcParameters, policy));
RPC.invokeAndEncodeResponse(target, targetMethod, rpcParameters, policy);
}
}
Aggregations