Example usage for com.google.gwt.user.server.rpc SerializationPolicyLoader CLIENT_FIELDS_KEYWORD

List of usage examples for com.google.gwt.user.server.rpc SerializationPolicyLoader CLIENT_FIELDS_KEYWORD

Introduction

In this page you can find the example usage for com.google.gwt.user.server.rpc SerializationPolicyLoader CLIENT_FIELDS_KEYWORD.

Prototype

String CLIENT_FIELDS_KEYWORD

To view the source code for com.google.gwt.user.server.rpc SerializationPolicyLoader CLIENT_FIELDS_KEYWORD.

Click Source Link

Document

Keyword for listing the serializable fields of an enchanced class that are visible to client code.

Usage

From source file:de.csenk.gwt.ws.rebind.filter.serialization.GWTSerializerGenerator.java

License:Open Source License

/**
 * @param serializerLogger/*from  www  .j  ava2  s .c o  m*/
 * @param context
 * @param typesSentFromBrowser
 * @param typesSentToBrowser
 * @param typeStrings
 * @return
 */
private String writeSerializationPolicyFile(TreeLogger logger, GeneratorContext ctx,
        SerializableTypeOracle serializationSto, SerializableTypeOracle deserializationSto,
        Map<JType, String> typeStrings, JClassType serializerInterface) throws UnableToCompleteException {
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        OutputStreamWriter osw = new OutputStreamWriter(baos,
                SerializationPolicyLoader.SERIALIZATION_POLICY_FILE_ENCODING);
        TypeOracle oracle = ctx.getTypeOracle();
        PrintWriter pw = new PrintWriter(osw);

        JType[] serializableTypes = unionOfTypeArrays(serializationSto.getSerializableTypes(),
                deserializationSto.getSerializableTypes(), new JType[] { serializerInterface });

        for (int i = 0; i < serializableTypes.length; ++i) {
            JType type = serializableTypes[i];
            String binaryTypeName = TypeOracleMediator.computeBinaryClassName(type);
            pw.print(binaryTypeName);
            pw.print(", " + Boolean.toString(deserializationSto.isSerializable(type)));
            pw.print(", " + Boolean.toString(deserializationSto.maybeInstantiated(type)));
            pw.print(", " + Boolean.toString(serializationSto.isSerializable(type)));
            pw.print(", " + Boolean.toString(serializationSto.maybeInstantiated(type)));
            pw.print(", " + typeStrings.get(type));

            /*
             * Include the serialization signature to bump the RPC file name
             * if obfuscated identifiers are used.
             */
            pw.print(", " + SerializationUtils.getSerializationSignature(oracle, type));
            pw.print('\n');

            /*
             * Emit client-side field information for classes that may be
             * enhanced on the server. Each line consists of a
             * comma-separated list containing the keyword '@ClientFields',
             * the class name, and a list of all potentially serializable
             * client-visible fields.
             */
            if ((type instanceof JClassType) && ((JClassType) type).isEnhanced()) {
                JField[] fields = ((JClassType) type).getFields();
                JField[] rpcFields = new JField[fields.length];
                int numRpcFields = 0;
                for (JField f : fields) {
                    if (f.isTransient() || f.isStatic() || f.isFinal()) {
                        continue;
                    }
                    rpcFields[numRpcFields++] = f;
                }

                pw.print(SerializationPolicyLoader.CLIENT_FIELDS_KEYWORD);
                pw.print(',');
                pw.print(binaryTypeName);
                for (int idx = 0; idx < numRpcFields; idx++) {
                    pw.print(',');
                    pw.print(rpcFields[idx].getName());
                }
                pw.print('\n');
            }
        }

        // Closes the wrapped streams.
        pw.close();

        byte[] serializationPolicyFileContents = baos.toByteArray();
        String serializationPolicyName = Util.computeStrongName(serializationPolicyFileContents);

        String serializationPolicyFileName = SerializationPolicyLoader
                .getSerializationPolicyFileName(serializationPolicyName);
        OutputStream os = ctx.tryCreateResource(logger, serializationPolicyFileName);
        if (os != null) {
            os.write(serializationPolicyFileContents);
            GeneratedResource resource = ctx.commitResource(logger, os);

            /*
             * Record which proxy class created the resource. A manifest
             * will be emitted by the RpcPolicyManifestLinker.
             */
            ctx.commitArtifact(logger,
                    new RpcPolicyFileArtifact(serializerInterface.getQualifiedSourceName(), resource));
        } else {
            logger.log(TreeLogger.TRACE, "SerializationPolicy file for RemoteService '"
                    + serializerInterface.getQualifiedSourceName() + "' already exists; no need to rewrite it.",
                    null);
        }

        return serializationPolicyName;
    } catch (UnsupportedEncodingException e) {
        logger.log(TreeLogger.ERROR,
                SerializationPolicyLoader.SERIALIZATION_POLICY_FILE_ENCODING + " is not supported", e);
        throw new UnableToCompleteException();
    } catch (IOException e) {
        logger.log(TreeLogger.ERROR, null, e);
        throw new UnableToCompleteException();
    }
}