Class Protocol
- java.lang.Object
-
- py4j.Protocol
-
public class Protocol extends java.lang.Object
This class defines the protocol used to communicate between two virtual machines (e.g., Python and Java).
Currently, the protocol requires type information (e.g., is this string an integer, an object reference or a boolean?) to be embedded with each command part. The rational is that the source virtual machine is usually better at determining the type of objects it sends.
An input command is usually composed of:
- A command name (e.g., c for call)
- Optionally, a sub command name (e.g., 'a' for concatenate in the list command)
- A list of command parts (e.g., the name of a method, the value of a parameter, etc.)
- The End of Command marker (e)
The various parts of a command are separated by \n characters. These characters are automatically escaped and unescaped in Strings on both sides (Java and Python).
An output command is usually composed of:
- A success or error code (y for yes, x for exception)
- A return value (e.g., n for null, v for void, or any other value like a String)
This class should be used only if the user creates new commands.
- Author:
- Barthelemy Dagenais
-
-
Field Summary
Fields Modifier and Type Field Description static char
ARRAY_TYPE
static java.lang.String
AUTH_COMMAND_NAME
static char
BOOLEAN_TYPE
static char
BYTES_TYPE
static char
CLASS_TYPE
static char
DECIMAL_TYPE
static java.lang.String
DEFAULT_JVM_OBJECT_ID
static char
DOUBLE_TYPE
static char
END
static char
END_OUTPUT
static java.lang.String
ENTRY_POINT_OBJECT_ID
static char
ERROR
static java.lang.String
ERROR_COMMAND
static char
FATAL_ERROR
static java.lang.String
GATEWAY_SERVER_ID
static char
INTEGER_TYPE
static char
ITERATOR_TYPE
static char
LIST_TYPE
static char
LONG_TYPE
static char
MAP_TYPE
static char
METHOD_TYPE
static char
NO_MEMBER
static java.lang.String
NO_SUCH_FIELD
static char
NULL_TYPE
static char
PACKAGE_TYPE
static java.lang.String
PYTHON_INFINITY
static java.lang.String
PYTHON_NAN
static java.lang.String
PYTHON_NEGATIVE_INFINITY
static char
PYTHON_PROXY_TYPE
static char
REFERENCE_TYPE
static char
RETURN_MESSAGE
static char
SET_TYPE
static java.lang.String
STATIC_PREFIX
static char
STRING_TYPE
static char
SUCCESS
static char
VOID
static java.lang.String
VOID_COMMAND
-
Constructor Summary
Constructors Constructor Description Protocol()
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static java.lang.String
encodeBytes(byte[] bytes)
Transform the byte array into Base64 characters.static java.lang.String
getAuthCommand(java.lang.String authToken)
static boolean
getBoolean(java.lang.String commandPart)
Assumes that commandPart is not empty.static byte[]
getBytes(java.lang.String commandPart)
Assumes that commandPart is not empty.static java.math.BigDecimal
getDecimal(java.lang.String commandPart)
Assumes that commandPart is not empty.static double
getDouble(java.lang.String commandPart)
Assumes that commandPart is not empty.static int
getInteger(java.lang.String commandPart)
Assumes that commandPart is not empty.static long
getLong(java.lang.String commandPart)
Assumes that commandPart is not empty.static java.lang.String
getMemberOutputCommand(char memberType)
static java.lang.String
getMemberOutputCommand(char memberType, java.lang.String fqn)
static java.lang.String
getNoSuchFieldOutputCommand()
static java.lang.Object
getNull(java.lang.String commandPart)
Method provided for consistency.static java.lang.Object
getObject(java.lang.String commandPart, Gateway gateway)
static java.lang.String
getOutputCommand(ReturnObject rObject)
static java.lang.String
getOutputErrorCommand()
static java.lang.String
getOutputErrorCommand(java.lang.String errorMessage)
static java.lang.String
getOutputErrorCommand(java.lang.Throwable throwable)
static java.lang.String
getOutputFatalErrorCommand(java.lang.Throwable throwable)
static java.lang.String
getOutputVoidCommand()
static char
getPrimitiveType(java.lang.Object primitiveObject)
static java.lang.Object
getPythonProxy(java.lang.String commandPart, Gateway gateway)
Assumes that commandPart is not empty.static java.lang.Object
getPythonProxyHandler(java.lang.ClassLoader classLoader, java.lang.Class[] interfacesToImplement, java.lang.String objectId, Gateway gateway)
Deprecated.static java.lang.Object
getReference(java.lang.String commandPart, Gateway gateway)
Assumes that commandPart is not empty.static java.lang.Object
getReturnValue(java.lang.String returnMessage, Gateway gateway)
static java.lang.Throwable
getRootThrowable(java.lang.Throwable throwable, boolean skipInvocation)
static java.lang.String
getString(java.lang.String commandPart)
Assumes that commandPart is not empty.static java.lang.String
getThrowableAsString(java.lang.Throwable throwable)
static boolean
isBoolean(java.lang.String commandPart)
Assumes that commandPart is not empty.static boolean
isBytes(java.lang.String commandPart)
Assumes that commandPart is not empty.static boolean
isDecimal(java.lang.String commandPart)
Assumes that commandPart is not empty.static boolean
isDouble(java.lang.String commandPart)
Assumes that commandPart is not empty.static boolean
isEmpty(java.lang.String commandPart)
static boolean
isEnd(java.lang.String commandPart)
Assumes that commandPart is not empty.static boolean
isError(java.lang.String returnMessage)
Assumes that commandPart is not null.static boolean
isInteger(java.lang.String commandPart)
Assumes that commandPart is not empty.static boolean
isLong(java.lang.String commandPart)
Assumes that commandPart is not empty.static boolean
isNull(java.lang.String commandPart)
Assumes that commandPart is not empty.static boolean
isPythonProxy(java.lang.String commandPart)
Assumes that commandPart is not empty.static boolean
isReference(java.lang.String commandPart)
Assumes that commandPart is not empty.static boolean
isReturnMessage(java.lang.String commandPart)
static boolean
isString(java.lang.String commandPart)
Assumes that commandPart is not empty.
-
-
-
Field Detail
-
BYTES_TYPE
public static final char BYTES_TYPE
- See Also:
- Constant Field Values
-
INTEGER_TYPE
public static final char INTEGER_TYPE
- See Also:
- Constant Field Values
-
LONG_TYPE
public static final char LONG_TYPE
- See Also:
- Constant Field Values
-
BOOLEAN_TYPE
public static final char BOOLEAN_TYPE
- See Also:
- Constant Field Values
-
DOUBLE_TYPE
public static final char DOUBLE_TYPE
- See Also:
- Constant Field Values
-
DECIMAL_TYPE
public static final char DECIMAL_TYPE
- See Also:
- Constant Field Values
-
STRING_TYPE
public static final char STRING_TYPE
- See Also:
- Constant Field Values
-
REFERENCE_TYPE
public static final char REFERENCE_TYPE
- See Also:
- Constant Field Values
-
LIST_TYPE
public static final char LIST_TYPE
- See Also:
- Constant Field Values
-
SET_TYPE
public static final char SET_TYPE
- See Also:
- Constant Field Values
-
ARRAY_TYPE
public static final char ARRAY_TYPE
- See Also:
- Constant Field Values
-
MAP_TYPE
public static final char MAP_TYPE
- See Also:
- Constant Field Values
-
ITERATOR_TYPE
public static final char ITERATOR_TYPE
- See Also:
- Constant Field Values
-
NULL_TYPE
public static final char NULL_TYPE
- See Also:
- Constant Field Values
-
PYTHON_PROXY_TYPE
public static final char PYTHON_PROXY_TYPE
- See Also:
- Constant Field Values
-
PACKAGE_TYPE
public static final char PACKAGE_TYPE
- See Also:
- Constant Field Values
-
CLASS_TYPE
public static final char CLASS_TYPE
- See Also:
- Constant Field Values
-
METHOD_TYPE
public static final char METHOD_TYPE
- See Also:
- Constant Field Values
-
NO_MEMBER
public static final char NO_MEMBER
- See Also:
- Constant Field Values
-
VOID
public static final char VOID
- See Also:
- Constant Field Values
-
RETURN_MESSAGE
public static final char RETURN_MESSAGE
- See Also:
- Constant Field Values
-
END
public static final char END
- See Also:
- Constant Field Values
-
END_OUTPUT
public static final char END_OUTPUT
- See Also:
- Constant Field Values
-
ERROR
public static final char ERROR
- See Also:
- Constant Field Values
-
FATAL_ERROR
public static final char FATAL_ERROR
- See Also:
- Constant Field Values
-
SUCCESS
public static final char SUCCESS
- See Also:
- Constant Field Values
-
AUTH_COMMAND_NAME
public static final java.lang.String AUTH_COMMAND_NAME
- See Also:
- Constant Field Values
-
ERROR_COMMAND
public static final java.lang.String ERROR_COMMAND
- See Also:
- Constant Field Values
-
VOID_COMMAND
public static final java.lang.String VOID_COMMAND
- See Also:
- Constant Field Values
-
NO_SUCH_FIELD
public static final java.lang.String NO_SUCH_FIELD
- See Also:
- Constant Field Values
-
ENTRY_POINT_OBJECT_ID
public static final java.lang.String ENTRY_POINT_OBJECT_ID
- See Also:
- Constant Field Values
-
DEFAULT_JVM_OBJECT_ID
public static final java.lang.String DEFAULT_JVM_OBJECT_ID
- See Also:
- Constant Field Values
-
GATEWAY_SERVER_ID
public static final java.lang.String GATEWAY_SERVER_ID
- See Also:
- Constant Field Values
-
STATIC_PREFIX
public static final java.lang.String STATIC_PREFIX
- See Also:
- Constant Field Values
-
PYTHON_NAN
public static final java.lang.String PYTHON_NAN
- See Also:
- Constant Field Values
-
PYTHON_INFINITY
public static final java.lang.String PYTHON_INFINITY
- See Also:
- Constant Field Values
-
PYTHON_NEGATIVE_INFINITY
public static final java.lang.String PYTHON_NEGATIVE_INFINITY
- See Also:
- Constant Field Values
-
-
Method Detail
-
encodeBytes
public static java.lang.String encodeBytes(byte[] bytes)
Transform the byte array into Base64 characters.
- Parameters:
bytes
-- Returns:
-
getBoolean
public static final boolean getBoolean(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- The boolean value corresponding to this command part.
-
getBytes
public static final byte[] getBytes(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- The byte array corresponding to this command part.
-
getDecimal
public static final java.math.BigDecimal getDecimal(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- The decimal value corresponding to this command part.
-
getDouble
public static final double getDouble(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- The double value corresponding to this command part.
-
getInteger
public static final int getInteger(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- The integer value corresponding to this command part.
-
getLong
public static final long getLong(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- The long value corresponding to this command part.
-
getMemberOutputCommand
public static final java.lang.String getMemberOutputCommand(char memberType)
-
getMemberOutputCommand
public static final java.lang.String getMemberOutputCommand(char memberType, java.lang.String fqn)
-
getNoSuchFieldOutputCommand
public static java.lang.String getNoSuchFieldOutputCommand()
-
getNull
public static final java.lang.Object getNull(java.lang.String commandPart)
Method provided for consistency. Just returns null.
- Parameters:
commandPart
-- Returns:
- null.
-
getObject
public static final java.lang.Object getObject(java.lang.String commandPart, Gateway gateway)
-
getOutputCommand
public static final java.lang.String getOutputCommand(ReturnObject rObject)
-
getOutputErrorCommand
public static final java.lang.String getOutputErrorCommand()
-
getOutputErrorCommand
public static final java.lang.String getOutputErrorCommand(java.lang.String errorMessage)
-
getOutputErrorCommand
public static final java.lang.String getOutputErrorCommand(java.lang.Throwable throwable)
-
getOutputFatalErrorCommand
public static final java.lang.String getOutputFatalErrorCommand(java.lang.Throwable throwable)
-
getOutputVoidCommand
public static final java.lang.String getOutputVoidCommand()
-
getAuthCommand
public static final java.lang.String getAuthCommand(java.lang.String authToken)
-
getPrimitiveType
public static char getPrimitiveType(java.lang.Object primitiveObject)
-
getPythonProxy
public static java.lang.Object getPythonProxy(java.lang.String commandPart, Gateway gateway)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- A Python proxy specified in this command part.
-
getPythonProxyHandler
public static java.lang.Object getPythonProxyHandler(java.lang.ClassLoader classLoader, java.lang.Class[] interfacesToImplement, java.lang.String objectId, Gateway gateway)
Deprecated.Legacy method. Please use Gateway.createProxy.
- Parameters:
classLoader
-interfacesToImplement
-objectId
-gateway
-- Returns:
-
getReference
public static final java.lang.Object getReference(java.lang.String commandPart, Gateway gateway)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- The object referenced in this command part.
-
getReturnValue
public static final java.lang.Object getReturnValue(java.lang.String returnMessage, Gateway gateway) throws java.lang.Throwable
- Throws:
java.lang.Throwable
-
getRootThrowable
public static final java.lang.Throwable getRootThrowable(java.lang.Throwable throwable, boolean skipInvocation)
-
getString
public static final java.lang.String getString(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- The reference contained in this command part.
-
getThrowableAsString
public static final java.lang.String getThrowableAsString(java.lang.Throwable throwable)
-
isBoolean
public static final boolean isBoolean(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- True if the command part is a boolean
-
isReturnMessage
public static final boolean isReturnMessage(java.lang.String commandPart)
- Parameters:
commandPart
-- Returns:
- True if the command part is a return message
-
isBytes
public static final boolean isBytes(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- True if the command part is a byte array
-
isDecimal
public static final boolean isDecimal(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- True if the command part is a decimal
-
isDouble
public static final boolean isDouble(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- True if the command part is a double
-
isEmpty
public static final boolean isEmpty(java.lang.String commandPart)
-
isEnd
public static final boolean isEnd(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- True if the command part is the end token
-
isError
public static final boolean isError(java.lang.String returnMessage)
Assumes that commandPart is not null.
- Parameters:
returnMessage
-- Returns:
- True if the return message is an error
-
isInteger
public static final boolean isInteger(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- True if the command part is an integer
-
isLong
public static final boolean isLong(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- True if the command part is a long
-
isNull
public static final boolean isNull(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- True if the command part is null
-
isPythonProxy
public static final boolean isPythonProxy(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- True if the command part is a python proxy
-
isReference
public static final boolean isReference(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- True if the command part is a reference
-
isString
public static final boolean isString(java.lang.String commandPart)
Assumes that commandPart is not empty.
- Parameters:
commandPart
-- Returns:
- True if the command part is a reference
-
-