Search in sources :

Example 16 with SerializationPolicy

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;
}
Also used : SerializationPolicy(com.google.gwt.user.server.rpc.SerializationPolicy) URL(java.net.URL) Nullable(edu.umd.cs.findbugs.annotations.Nullable)

Example 17 with SerializationPolicy

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;
}
Also used : SerializationPolicy(com.google.gwt.user.server.rpc.SerializationPolicy) NonNull(edu.umd.cs.findbugs.annotations.NonNull)

Example 18 with 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;
}
Also used : SerializationPolicy(com.google.gwt.user.server.rpc.SerializationPolicy) MalformedURLException(java.net.MalformedURLException) InputStream(java.io.InputStream) IOException(java.io.IOException) ParseException(java.text.ParseException) URL(java.net.URL)

Example 19 with 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();
    }
}
Also used : SerializationPolicy(com.google.gwt.user.server.rpc.SerializationPolicy) InputStream(java.io.InputStream) SerializationPolicyLoader(com.google.gwt.user.server.rpc.SerializationPolicyLoader) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) IOException(java.io.IOException)

Example 20 with SerializationPolicy

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);
    }
}
Also used : SerializationPolicy(com.google.gwt.user.server.rpc.SerializationPolicy) HttpServletRequest(javax.servlet.http.HttpServletRequest) RPC(com.google.gwt.user.server.rpc.RPC) RPCRequest(com.google.gwt.user.server.rpc.RPCRequest) Method(java.lang.reflect.Method) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString)

Aggregations

SerializationPolicy (com.google.gwt.user.server.rpc.SerializationPolicy)34 HttpServletRequest (javax.servlet.http.HttpServletRequest)18 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)16 IOException (java.io.IOException)11 InputStream (java.io.InputStream)11 Test (org.junit.Test)9 RPC (com.google.gwt.user.server.rpc.RPC)5 RPCRequest (com.google.gwt.user.server.rpc.RPCRequest)5 SerializationPolicyLoader (com.google.gwt.user.server.rpc.SerializationPolicyLoader)5 Method (java.lang.reflect.Method)5 URL (java.net.URL)5 PentahoSystem (org.pentaho.platform.engine.core.system.PentahoSystem)5 PluginUtil (org.pentaho.platform.plugin.services.pluginmgr.PluginUtil)5 MalformedURLException (java.net.MalformedURLException)4 GwtRpcProxyException (org.pentaho.platform.web.servlet.GwtRpcProxyException)4 NonNull (edu.umd.cs.findbugs.annotations.NonNull)3 ParseException (java.text.ParseException)3 IPluginResourceLoader (org.pentaho.platform.api.engine.IPluginResourceLoader)3 SerializationException (com.google.gwt.user.client.rpc.SerializationException)2 SerializationPolicyProvider (com.google.gwt.user.server.rpc.SerializationPolicyProvider)2