Package org.acplt.oncrpc.apps.jrpcgen
Class jrpcgen
java.lang.Object
org.acplt.oncrpc.apps.jrpcgen.jrpcgen
The class
jrpcgen implements a Java-based rpcgen RPC protocol
compiler. jrpcgen is a Java-based tool that generates source code of Java
classes to implement an RPC protocol. The input to jrpcgen is a language
similiar to C (but more probably much more similiar to FORTRAN) known as
the RPC language (Remote Procedure Call Language).- Version:
- $Revision: 1.6 $ $Date: 2007/05/29 19:38:30 $ $State: Exp $ $Locker: $
- Author:
- Harald Albrecht
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic StringName of class containing global constants.private static String[]Java base data types for which are XDR encoding and decoding helper methods available.static booleanClamp version and program number in client method stubs to the version and program number specified in the x-file.static StringName of class containing the ONC/RPC client stubs.static StringFull name of the current source code file.static WriterCurrent FileWriter object receiving generated source code.static PrintWriterCurrent PrintWriter object sitting on top of thecurrentFileWriterobject receiving generated source code.static booleanEnable diagnostic messages when parsing the x-file.static FileDestination directory where to place the generated files.static HashtableContains all global identifiers for type, structure and union specifiers as well as for constants and enumeration members.static booleanEnable automatic initialization of String with empty Strings instead of null reference.static booleanEnable generation of accessors in order to use XDR classes as beans.static booleanEnable tagging of XDR classes as being Serializablestatic booleanDisable automatic backup of old source code files, iftrue.static booleanDo not generate source code for the client proxy stub iftrue.static booleanDo not generate source code for the server proxy stub iftrue.static StringSpecifies package name for generated source code, if notnull.static final intA remote procedure expects more than one parameter and thus needs an XDR wrapping class.static final intA remote procedure expects only a single parameter, which is a complex type (class).static final intA remote procedure expects only a single parameter, which is of a base type, like integer, boolean, string, et cetera.static final intA remote procedure has no parameters and thus needs to use the XDR void wrapper class as a dummy.static booleanParse x-file only but do not create source code files if set totrue.static VectorHolds information about the remote program defined in the jrpcgen x-file.static StringName of class containing the ONC/RPC server stubs.static final StringString containing date/time when a jrpcgen run was started.static booleanVerbosity flag.static final StringCurrent version of jrpcgen.static booleanSupply (additional) call information to server method stubs.static FileThe x-file to parse (not: the X Files, the latter ones are something completely different). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic JrpcgenEnDecodingInfoReturn the en-/decoding syllable XXX appropriate for a base data type including arrays of base data types.static StringcheckForEnumValue(String value) Checks whether a given value references an identifier and then returns the qualified identifier (interface where the value is defined in) or simply the value in case of an integer literal.static StringcheckForSpecials(String dataType) Checks whether a given data type identifier refers to an enumeration type and then returns Java's int data type instead.static voidCloses the source code file previously opened withcreateJavaSourceFile.static StringcodingMethod(JrpcgenDeclaration decl, boolean encode) Return en- or decoding method appropriate for a struct or union member.static StringcodingMethod(JrpcgenDeclaration decl, boolean encode, String oref) Return en- or decoding method appropriate for a struct or union member.static PrintWritercreateJavaSourceFile(String classname) Creates a new source code file for a Java class based on its class name.static PrintWritercreateJavaSourceFile(String classname, boolean emitImports) Creates a new source code file for a Java class based on its class name.static JrpcgenSHACreate a new hash function object and initialize it using a class and package name.static voiddoParse()The real parsing and code generation part.static voidGenerate source code files for all structures, unions and enumerations as well as constants.static voiddumpClient(JrpcgenProgramInfo programInfo) Generate source code for the client stub proxy object.static voiddumpClientStubMethods(PrintWriter out, JrpcgenVersionInfo versionInfo) Generate source code for client-side stub methods for a particular remote program version.static voidDump the value of a constant and optionally first dump all constants it depends on.static voidGenerate source code file containing all constants defined in the x-file as well as all implicitely defined constants, like program, version and procedure numbers, etc.static voidGenerate a source code file containing all elements of an enumeration defined in a x-file.static voidCreate the source code files based on the parsed information from the x-file.static voiddumpServer(JrpcgenProgramInfo programInfo) static voidstatic voiddumpServerStubMethods(PrintWriter out, JrpcgenVersionInfo versionInfo) Generate public abstract method signatures for all remote procedure calls.static voidGenerate a source code file containing all elements of a struct defined in a x-file.static voidGenerate a source code file containing a wrapper class for a typedef defined in a x-file.static voidGenerate a source code file containing all elements of a union defined in a x-file.static voidThe main part of jrpcgen where all things start.static voidPrint the help message describing the available command line options.static StringxdrBaseType(String type) Given a name of a data type return the name of the equivalent Java data type (if it exists), otherwise returnnull.
-
Field Details
-
VERSION
Current version of jrpcgen.- See Also:
-
PARAMS_VOID
public static final int PARAMS_VOIDA remote procedure has no parameters and thus needs to use the XDR void wrapper class as a dummy.- See Also:
-
PARAMS_SINGLE
public static final int PARAMS_SINGLEA remote procedure expects only a single parameter, which is a complex type (class).- See Also:
-
PARAMS_SINGLE_BASETYPE
public static final int PARAMS_SINGLE_BASETYPEA remote procedure expects only a single parameter, which is of a base type, like integer, boolean, string, et cetera.- See Also:
-
PARAMS_MORE
public static final int PARAMS_MOREA remote procedure expects more than one parameter and thus needs an XDR wrapping class.- See Also:
-
startDate
String containing date/time when a jrpcgen run was started. This string is used in the headers of the generated source code files. -
globalIdentifiers
Contains all global identifiers for type, structure and union specifiers as well as for constants and enumeration members. This static attribute is directly manipulated by the parser. -
noBackups
public static boolean noBackupsDisable automatic backup of old source code files, iftrue. -
programInfos
Holds information about the remote program defined in the jrpcgen x-file. -
clampProgAndVers
public static boolean clampProgAndVersClamp version and program number in client method stubs to the version and program number specified in the x-file. -
withCallInfo
public static boolean withCallInfoSupply (additional) call information to server method stubs. -
debug
public static boolean debugEnable diagnostic messages when parsing the x-file. -
verbose
public static boolean verboseVerbosity flag. Iftrue, then jrpcgen will report about the steps it is taking when generating all the source code files. -
parseOnly
public static boolean parseOnlyParse x-file only but do not create source code files if set totrue. -
xFile
The x-file to parse (not: the X Files, the latter ones are something completely different). -
destinationDir
Destination directory where to place the generated files. -
currentFileWriter
Current FileWriter object receiving generated source code. -
currentPrintWriter
Current PrintWriter object sitting on top of thecurrentFileWriterobject receiving generated source code. -
currentFilename
Full name of the current source code file. -
packageName
Specifies package name for generated source code, if notnull. Ifnull, then no package statement is emitted. -
baseClassname
Name of class containing global constants. It is derived from the filename with the extension (".x") and path removed. -
noClient
public static boolean noClientDo not generate source code for the client proxy stub iftrue. -
noServer
public static boolean noServerDo not generate source code for the server proxy stub iftrue. -
serverClass
Name of class containing the ONC/RPC server stubs. -
clientClass
Name of class containing the ONC/RPC client stubs. -
makeSerializable
public static boolean makeSerializableEnable tagging of XDR classes as being Serializable -
makeBean
public static boolean makeBeanEnable generation of accessors in order to use XDR classes as beans. -
initStrings
public static boolean initStringsEnable automatic initialization of String with empty Strings instead of null reference. -
baseTypes
Java base data types for which are XDR encoding and decoding helper methods available.
-
-
Constructor Details
-
jrpcgen
public jrpcgen()
-
-
Method Details
-
printHelp
public static void printHelp()Print the help message describing the available command line options. -
createJavaSourceFile
Creates a new source code file for a Java class based on its class name. Same ascreateJavaSourceFile(String, boolean)with theemitImportparameter set totrue.- Parameters:
classname- Name of Java class to generate. Must not contain a file extension -- especially ".java" is invalid. When the source code file is created, ".java" is appended automatically.- Returns:
- PrintWriter to send source code to.
-
createJavaSourceFile
Creates a new source code file for a Java class based on its class name. If an old version of the source file exists, it is renamed first. The backup will have the same name as the original file with "~" appended.- Parameters:
classname- Name of Java class to generate. Must not contain a file extension -- especially ".java" is invalid. When the source code file is created, ".java" is appended automatically.emitImports- iftrue, then import statements for the remotetea ONC/RPC package and IOExceptions.- Returns:
- PrintWriter to send source code to.
-
createSHA
Create a new hash function object and initialize it using a class and package name.- Parameters:
classname- Name of class.- Returns:
- hash function object.
-
closeJavaSourceFile
public static void closeJavaSourceFile()Closes the source code file previously opened withcreateJavaSourceFile. This method writes a trailer before closing the file. -
dumpConstantAndDependency
Dump the value of a constant and optionally first dump all constants it depends on. -
dumpConstants
public static void dumpConstants()Generate source code file containing all constants defined in the x-file as well as all implicitely defined constants, like program, version and procedure numbers, etc. This method creates a public interface with the constants as public static final integers. -
dumpEnum
Generate a source code file containing all elements of an enumeration defined in a x-file.- Parameters:
e-Descriptionof XDR enumeration.
-
xdrBaseType
Given a name of a data type return the name of the equivalent Java data type (if it exists), otherwise returnnull. NOTE: "opaque" is considered like "byte" to be a base type... FIXME: char/byte?- Returns:
- Name of Java base data type or
nullif the given data type is not equivalent to one of Java's base data types.
-
baseEnDecodingSyllable
Return the en-/decoding syllable XXX appropriate for a base data type including arrays of base data types.- Parameters:
decl- declaration of a member of RPC struct or union.- Returns:
null, if the declaration does not specify a base data type. Otherwise a three-element String array, with [0] containing the type syllable for base type (including arrays), [1] containing parameter options when encoding (like maximum sizes, etc), and [2] containing options for decoding.
-
codingMethod
Return en- or decoding method appropriate for a struct or union member. -
codingMethod
Return en- or decoding method appropriate for a struct or union member.- Parameters:
decl- declaration for which the en-/decoding Java source code be returned.encode-trueif encoding method should be returned,falseif decoding method is to be returned.oref- name of object reference ornullif "this" should be used instead.
-
checkForSpecials
Checks whether a given data type identifier refers to an enumeration type and then returns Java's int data type instead. In case of the pseudo-type "opaque" return Java's byte data type. For all other data types, the data type identifier is returned unaltered.- Parameters:
dataType- data type identifier to check.- Returns:
- data type identifier.
-
checkForEnumValue
Checks whether a given value references an identifier and then returns the qualified identifier (interface where the value is defined in) or simply the value in case of an integer literal.- Parameters:
value- Either an identifier to resolve or an integer literal.- Returns:
- Integer literal or qualified identifier.
-
dumpStruct
Generate a source code file containing all elements of a struct defined in a x-file.- Parameters:
s-Descriptionof XDR struct.
-
dumpUnion
Generate a source code file containing all elements of a union defined in a x-file.- Parameters:
u-Descriptionof XDR union.
-
dumpTypedef
Generate a source code file containing a wrapper class for a typedef defined in a x-file.- Parameters:
d-Descriptionof XDR typedef.
-
dumpClasses
public static void dumpClasses()Generate source code files for all structures, unions and enumerations as well as constants. All constants, which do not belong to enumerations, are emitted to a single interface. -
dumpClientStubMethods
Generate source code for client-side stub methods for a particular remote program version. The client-side stub methods take the parameter(s) from the caller, encode them and throw them over to the server. After receiving a reply, they will unpack and return it as the outcome of the method call.- Parameters:
out- Printer writer to send source code to.versionInfo- Information about the remote program version for which source code is to be generated.
-
dumpClient
Generate source code for the client stub proxy object. This client stub proxy object is then used by client applications to make remote procedure (aka method) calls to an ONC/RPC server. -
dumpServerStubMethodCall
-
dumpServerStubMethods
Generate public abstract method signatures for all remote procedure calls. This ensures that they have to be implemented before any derived server class gets usefull. -
dumpServer
-
dumpFiles
public static void dumpFiles()Create the source code files based on the parsed information from the x-file. -
main
The main part of jrpcgen where all things start. -
doParse
The real parsing and code generation part. This has been factored out of main() in order to make it available as an Ant task.- Throws:
FileNotFoundExceptionException
-