js4j 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +684 -0
- package/examples/01-basic.js +75 -0
- package/examples/02-collections.js +108 -0
- package/examples/03-objects.js +99 -0
- package/examples/04-callbacks.js +97 -0
- package/examples/05-stdlib.js +123 -0
- package/examples/_gateway.js +78 -0
- package/index.d.ts +455 -0
- package/index.js +78 -0
- package/java/TestEntryPoint.java +262 -0
- package/java/py4j.jar +0 -0
- package/package.json +29 -0
- package/src/callbackServer.js +269 -0
- package/src/clientServer.js +81 -0
- package/src/collections.js +325 -0
- package/src/connection.js +253 -0
- package/src/exceptions.js +68 -0
- package/src/gateway.js +222 -0
- package/src/javaObject.js +267 -0
- package/src/jvmView.js +224 -0
- package/src/launcher.js +150 -0
- package/src/protocol.js +413 -0
- package/tests/comparison/run_comparison.js +279 -0
- package/tests/comparison/test_js4j.js +187 -0
- package/tests/comparison/test_py4j.py +171 -0
- package/tests/integration/gateway.integration.test.js +384 -0
- package/tests/unit/collections.test.js +313 -0
- package/tests/unit/exceptions.test.js +104 -0
- package/tests/unit/gateway.test.js +178 -0
- package/tests/unit/jvmView.test.js +126 -0
- package/tests/unit/launcher.test.js +27 -0
- package/tests/unit/protocol.test.js +280 -0
package/index.d.ts
ADDED
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
// Type definitions for js4j
|
|
2
|
+
// A Node.js implementation of py4j — bridge between JavaScript and Java
|
|
3
|
+
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Opaque Java object types
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A reference to a Java object instance living in the JVM.
|
|
10
|
+
* Property access returns async functions that invoke Java methods.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const sb = await gateway.jvm.java.lang.StringBuilder('hello');
|
|
14
|
+
* await sb.append(' world');
|
|
15
|
+
* const str = await sb.toString(); // 'hello world'
|
|
16
|
+
*/
|
|
17
|
+
export interface JavaObject {
|
|
18
|
+
readonly _targetId: string;
|
|
19
|
+
readonly _gatewayClient: GatewayClient;
|
|
20
|
+
/** Call any Java method by name. */
|
|
21
|
+
[key: string]: any;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A reference to a Java class (for static access and constructors).
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* const Math = gateway.jvm.java.lang.Math;
|
|
29
|
+
* const pi = await gateway.getField(Math, 'PI');
|
|
30
|
+
* const abs = await Math.abs(-42);
|
|
31
|
+
*/
|
|
32
|
+
export interface JavaClass {
|
|
33
|
+
readonly _fqn: string;
|
|
34
|
+
readonly _targetId: string;
|
|
35
|
+
readonly _isJavaClass: true;
|
|
36
|
+
/** Invoke the constructor. */
|
|
37
|
+
(...args: any[]): Promise<JavaObject>;
|
|
38
|
+
/** Access static methods. */
|
|
39
|
+
[key: string]: any;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* A Java package namespace. Traverse to a class via property access.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* const pkg = gateway.jvm.java.util; // JavaPackage
|
|
47
|
+
* const cls = gateway.jvm.java.util.ArrayList; // JavaClass
|
|
48
|
+
*/
|
|
49
|
+
export interface JavaPackage {
|
|
50
|
+
readonly _fqn: string;
|
|
51
|
+
readonly _isJavaPackage: true;
|
|
52
|
+
[name: string]: any;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** A wrapped java.util.List. */
|
|
56
|
+
export interface JavaList extends JavaObject {
|
|
57
|
+
readonly _isJavaList: true;
|
|
58
|
+
size(): Promise<number>;
|
|
59
|
+
get(index: number): Promise<any>;
|
|
60
|
+
add(element: any): Promise<boolean>;
|
|
61
|
+
addAt(index: number, element: any): Promise<void>;
|
|
62
|
+
remove(indexOrValue: number | any): Promise<any>;
|
|
63
|
+
set(index: number, element: any): Promise<any>;
|
|
64
|
+
clear(): Promise<void>;
|
|
65
|
+
contains(value: any): Promise<boolean>;
|
|
66
|
+
indexOf(value: any): Promise<number>;
|
|
67
|
+
subList(fromIndex: number, toIndex: number): Promise<JavaList>;
|
|
68
|
+
sort(): Promise<void>;
|
|
69
|
+
reverse(): Promise<void>;
|
|
70
|
+
count(value: any): Promise<number>;
|
|
71
|
+
toArray(): Promise<any[]>;
|
|
72
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<any>;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** A wrapped java.util.Set. */
|
|
76
|
+
export interface JavaSet extends JavaObject {
|
|
77
|
+
readonly _isJavaSet: true;
|
|
78
|
+
size(): Promise<number>;
|
|
79
|
+
add(element: any): Promise<boolean>;
|
|
80
|
+
remove(element: any): Promise<boolean>;
|
|
81
|
+
contains(element: any): Promise<boolean>;
|
|
82
|
+
clear(): Promise<void>;
|
|
83
|
+
toArray(): Promise<any[]>;
|
|
84
|
+
toSet(): Promise<Set<any>>;
|
|
85
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<any>;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** A wrapped java.util.Map. */
|
|
89
|
+
export interface JavaMap extends JavaObject {
|
|
90
|
+
readonly _isJavaMap: true;
|
|
91
|
+
size(): Promise<number>;
|
|
92
|
+
get(key: any): Promise<any>;
|
|
93
|
+
put(key: any, value: any): Promise<any>;
|
|
94
|
+
remove(key: any): Promise<any>;
|
|
95
|
+
containsKey(key: any): Promise<boolean>;
|
|
96
|
+
containsValue(value: any): Promise<boolean>;
|
|
97
|
+
clear(): Promise<void>;
|
|
98
|
+
keySet(): Promise<JavaSet>;
|
|
99
|
+
values(): Promise<JavaObject>;
|
|
100
|
+
entrySet(): Promise<JavaSet>;
|
|
101
|
+
toMap(): Promise<Map<any, any>>;
|
|
102
|
+
toObject(): Promise<Record<string, any>>;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** A wrapped Java array. */
|
|
106
|
+
export interface JavaArray extends JavaObject {
|
|
107
|
+
readonly _isJavaArray: true;
|
|
108
|
+
get(index: number): Promise<any>;
|
|
109
|
+
set(index: number, value: any): Promise<void>;
|
|
110
|
+
length(): Promise<number>;
|
|
111
|
+
slice(fromIndex: number, toIndex: number): Promise<JavaArray>;
|
|
112
|
+
toArray(): Promise<any[]>;
|
|
113
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<any>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** A wrapped java.util.Iterator. */
|
|
117
|
+
export interface JavaIterator extends JavaObject {
|
|
118
|
+
readonly _isJavaIterator: true;
|
|
119
|
+
hasNext(): Promise<boolean>;
|
|
120
|
+
next(): Promise<any>;
|
|
121
|
+
remove(): Promise<void>;
|
|
122
|
+
toArray(): Promise<any[]>;
|
|
123
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<any>;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// JVMView
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* The root of the `gateway.jvm` namespace. Provides access to Java classes
|
|
132
|
+
* via package traversal and manages shortcut imports.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* const jvm = gateway.jvm;
|
|
136
|
+
* const sb = await jvm.java.lang.StringBuilder('hello');
|
|
137
|
+
* await gateway.javaImport('java.util.LinkedList');
|
|
138
|
+
* const ll = await jvm.LinkedList();
|
|
139
|
+
*/
|
|
140
|
+
export declare class JVMView {
|
|
141
|
+
constructor(gatewayClient: GatewayClient, id?: string);
|
|
142
|
+
/** Import a class FQN as a shortcut (e.g. 'java.util.ArrayList'). */
|
|
143
|
+
javaImport(fqn: string): Promise<void>;
|
|
144
|
+
/** Remove a previously imported shortcut. */
|
|
145
|
+
removeImport(fqn: string): Promise<void>;
|
|
146
|
+
/** Get a JavaClass by FQN without traversal. */
|
|
147
|
+
getClass(classFqn: string): JavaClass;
|
|
148
|
+
/** Get help text for a Java class. */
|
|
149
|
+
help(classFqn: string): Promise<string>;
|
|
150
|
+
/** Package / class traversal. */
|
|
151
|
+
[name: string]: any;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
// Gateway configuration
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
157
|
+
|
|
158
|
+
export interface GatewayParametersOptions {
|
|
159
|
+
host?: string;
|
|
160
|
+
port?: number;
|
|
161
|
+
authToken?: string | null;
|
|
162
|
+
autoField?: boolean;
|
|
163
|
+
autoConvert?: boolean;
|
|
164
|
+
enableMemoryManagement?: boolean;
|
|
165
|
+
poolSize?: number;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export declare class GatewayParameters {
|
|
169
|
+
host: string;
|
|
170
|
+
port: number;
|
|
171
|
+
authToken: string | null;
|
|
172
|
+
autoField: boolean;
|
|
173
|
+
autoConvert: boolean;
|
|
174
|
+
enableMemoryManagement: boolean;
|
|
175
|
+
poolSize: number;
|
|
176
|
+
constructor(options?: GatewayParametersOptions);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export interface CallbackServerParametersOptions {
|
|
180
|
+
host?: string;
|
|
181
|
+
port?: number;
|
|
182
|
+
daemonize?: boolean;
|
|
183
|
+
propagateException?: boolean;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export declare class CallbackServerParameters {
|
|
187
|
+
host: string;
|
|
188
|
+
port: number;
|
|
189
|
+
daemonize: boolean;
|
|
190
|
+
propagateException: boolean;
|
|
191
|
+
constructor(options?: CallbackServerParametersOptions);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// ---------------------------------------------------------------------------
|
|
195
|
+
// GatewayClient (low-level)
|
|
196
|
+
// ---------------------------------------------------------------------------
|
|
197
|
+
|
|
198
|
+
export declare class GatewayClient {
|
|
199
|
+
constructor(gatewayParameters: GatewayParameters, proxyPool?: ProxyPool);
|
|
200
|
+
callMethod(targetId: string, methodName: string, args: any[]): Promise<any>;
|
|
201
|
+
callConstructor(classFqn: string, args: any[]): Promise<JavaObject>;
|
|
202
|
+
getField(targetOrId: JavaObject | JavaClass | string, fieldName: string): Promise<any>;
|
|
203
|
+
setField(targetOrId: JavaObject | JavaClass | string, fieldName: string, value: any): Promise<void>;
|
|
204
|
+
releaseObject(targetId: string): Promise<void>;
|
|
205
|
+
getMethods(targetOrId: JavaObject | string): Promise<string[]>;
|
|
206
|
+
getFields(targetOrId: JavaObject | string): Promise<string[]>;
|
|
207
|
+
getStaticMembers(classOrId: JavaClass | string): Promise<string[]>;
|
|
208
|
+
help(targetOrId: JavaObject | string, pattern?: string): Promise<string>;
|
|
209
|
+
_sendCommand(command: string): Promise<string>;
|
|
210
|
+
_wrapObject(targetId: string, typeHint: string): JavaObject | JavaList | JavaSet | JavaMap | JavaArray | JavaIterator;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// ---------------------------------------------------------------------------
|
|
214
|
+
// JavaGateway — main entry point
|
|
215
|
+
// ---------------------------------------------------------------------------
|
|
216
|
+
|
|
217
|
+
export declare class JavaGateway {
|
|
218
|
+
/** The jvm namespace — access Java classes as gateway.jvm.java.lang.String */
|
|
219
|
+
jvm: JVMView;
|
|
220
|
+
/** The entry point object set on the Java GatewayServer. */
|
|
221
|
+
entry_point: JavaObject;
|
|
222
|
+
|
|
223
|
+
constructor(
|
|
224
|
+
gatewayParameters?: GatewayParameters | GatewayParametersOptions,
|
|
225
|
+
callbackServerParameters?: CallbackServerParameters | CallbackServerParametersOptions
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
/** Connect to the Java GatewayServer. Must be called before any operations. */
|
|
229
|
+
connect(): Promise<this>;
|
|
230
|
+
|
|
231
|
+
/** Start the callback server so Java can invoke methods on JS proxy objects. */
|
|
232
|
+
startCallbackServer(): Promise<CallbackServer>;
|
|
233
|
+
|
|
234
|
+
/** Stop the callback server. */
|
|
235
|
+
shutdownCallbackServer(): Promise<void>;
|
|
236
|
+
|
|
237
|
+
/** Close all connections to the Java gateway. */
|
|
238
|
+
close(): Promise<void>;
|
|
239
|
+
|
|
240
|
+
/** Send a shutdown command to the remote GatewayServer, then close. */
|
|
241
|
+
shutdown(): Promise<void>;
|
|
242
|
+
|
|
243
|
+
/** Get the value of a field on a Java object or class. */
|
|
244
|
+
getField(javaObject: JavaObject | JavaClass | string, fieldName: string): Promise<any>;
|
|
245
|
+
|
|
246
|
+
/** Set the value of a field on a Java object. */
|
|
247
|
+
setField(javaObject: JavaObject | string, fieldName: string, value: any): Promise<void>;
|
|
248
|
+
|
|
249
|
+
/** Create a new Java array. */
|
|
250
|
+
newArray(javaClass: JavaClass | string, ...dimensions: number[]): Promise<JavaArray>;
|
|
251
|
+
|
|
252
|
+
/** Create a new named JVMView with its own import namespace. */
|
|
253
|
+
newJvmView(name?: string): Promise<JVMView>;
|
|
254
|
+
|
|
255
|
+
/** List the public methods available on a Java object. */
|
|
256
|
+
getMethods(javaObject: JavaObject | string): Promise<string[]>;
|
|
257
|
+
|
|
258
|
+
/** List the public fields available on a Java object. */
|
|
259
|
+
getFields(javaObject: JavaObject | string): Promise<string[]>;
|
|
260
|
+
|
|
261
|
+
/** List the public static members of a Java class. */
|
|
262
|
+
getStaticMembers(javaClass: JavaClass | string): Promise<string[]>;
|
|
263
|
+
|
|
264
|
+
/** Import a Java class into the jvm namespace as a shortcut. */
|
|
265
|
+
javaImport(classFqn: string): Promise<void>;
|
|
266
|
+
|
|
267
|
+
/** Get help text for a Java object or class. */
|
|
268
|
+
help(target: JavaObject | JavaClass | string): Promise<string>;
|
|
269
|
+
|
|
270
|
+
/** Release a Java object reference (garbage collection notification). */
|
|
271
|
+
releaseObject(javaObject: JavaObject | string): Promise<void>;
|
|
272
|
+
|
|
273
|
+
/** Alias for releaseObject(). */
|
|
274
|
+
detach(javaObject: JavaObject | string): Promise<void>;
|
|
275
|
+
|
|
276
|
+
readonly connected: boolean;
|
|
277
|
+
readonly gatewayParameters: GatewayParameters;
|
|
278
|
+
readonly callbackServerParameters: CallbackServerParameters;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// ---------------------------------------------------------------------------
|
|
282
|
+
// ClientServer
|
|
283
|
+
// ---------------------------------------------------------------------------
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Bidirectional communication wrapper combining JavaGateway + CallbackServer.
|
|
287
|
+
* Mirrors py4j's ClientServer.
|
|
288
|
+
*
|
|
289
|
+
* @example
|
|
290
|
+
* const cs = new ClientServer({ port: 25333 }, { port: 25334 });
|
|
291
|
+
* await cs.connect();
|
|
292
|
+
* const result = await cs.jvm.java.lang.Math.abs(-5);
|
|
293
|
+
* await cs.shutdown();
|
|
294
|
+
*/
|
|
295
|
+
export declare class ClientServer {
|
|
296
|
+
constructor(
|
|
297
|
+
javaParameters?: GatewayParameters | GatewayParametersOptions,
|
|
298
|
+
pythonParameters?: CallbackServerParameters | CallbackServerParametersOptions
|
|
299
|
+
);
|
|
300
|
+
connect(): Promise<this>;
|
|
301
|
+
shutdown(): Promise<void>;
|
|
302
|
+
readonly jvm: JVMView;
|
|
303
|
+
readonly entry_point: JavaObject;
|
|
304
|
+
readonly gateway: JavaGateway;
|
|
305
|
+
readonly callbackServer: CallbackServer | null;
|
|
306
|
+
getField(obj: JavaObject | JavaClass | string, name: string): Promise<any>;
|
|
307
|
+
setField(obj: JavaObject | string, name: string, val: any): Promise<void>;
|
|
308
|
+
newArray(cls: JavaClass | string, ...dims: number[]): Promise<JavaArray>;
|
|
309
|
+
newJvmView(name?: string): Promise<JVMView>;
|
|
310
|
+
getMethods(obj: JavaObject | string): Promise<string[]>;
|
|
311
|
+
getFields(obj: JavaObject | string): Promise<string[]>;
|
|
312
|
+
getStaticMembers(cls: JavaClass | string): Promise<string[]>;
|
|
313
|
+
javaImport(fqn: string): Promise<void>;
|
|
314
|
+
help(target: JavaObject | JavaClass | string): Promise<string>;
|
|
315
|
+
releaseObject(obj: JavaObject | string): Promise<void>;
|
|
316
|
+
detach(obj: JavaObject | string): Promise<void>;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// ---------------------------------------------------------------------------
|
|
320
|
+
// Callback / proxy support
|
|
321
|
+
// ---------------------------------------------------------------------------
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* A pool of JS objects exposed to Java as callback proxies.
|
|
325
|
+
*/
|
|
326
|
+
export declare class ProxyPool {
|
|
327
|
+
register(obj: object): string;
|
|
328
|
+
get(id: string): object | null;
|
|
329
|
+
remove(id: string): void;
|
|
330
|
+
has(id: string): boolean;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* A JS object tagged for use as a Java interface implementation.
|
|
335
|
+
*/
|
|
336
|
+
export interface JavaProxy {
|
|
337
|
+
readonly _js4jProxy: true;
|
|
338
|
+
readonly _interfaces: string[];
|
|
339
|
+
[method: string]: any;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Create a JS object that can be passed to Java as a callback proxy.
|
|
344
|
+
*
|
|
345
|
+
* @param interfaces - Java interface FQNs this object implements
|
|
346
|
+
* @param impl - Object with method implementations
|
|
347
|
+
*
|
|
348
|
+
* @example
|
|
349
|
+
* const runnable = createJavaProxy(['java.lang.Runnable'], {
|
|
350
|
+
* run() { console.log('Java called run!'); return null; }
|
|
351
|
+
* });
|
|
352
|
+
* const thread = await gateway.jvm.java.lang.Thread(runnable);
|
|
353
|
+
* await thread.start();
|
|
354
|
+
*/
|
|
355
|
+
export declare function createJavaProxy(
|
|
356
|
+
interfaces: string[],
|
|
357
|
+
impl: Record<string, (...args: any[]) => any>
|
|
358
|
+
): JavaProxy;
|
|
359
|
+
|
|
360
|
+
export declare class CallbackServer {
|
|
361
|
+
host: string;
|
|
362
|
+
port: number;
|
|
363
|
+
listening: boolean;
|
|
364
|
+
constructor(options?: {
|
|
365
|
+
host?: string;
|
|
366
|
+
port?: number;
|
|
367
|
+
proxyPool?: ProxyPool;
|
|
368
|
+
gatewayClient?: GatewayClient;
|
|
369
|
+
});
|
|
370
|
+
start(): Promise<this>;
|
|
371
|
+
stop(): Promise<void>;
|
|
372
|
+
readonly proxyPool: ProxyPool;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// ---------------------------------------------------------------------------
|
|
376
|
+
// Factory functions
|
|
377
|
+
// ---------------------------------------------------------------------------
|
|
378
|
+
|
|
379
|
+
export declare function createJavaClass(fqn: string, gatewayClient: GatewayClient): JavaClass;
|
|
380
|
+
export declare function createJavaPackage(fqn: string, gatewayClient: GatewayClient): JavaPackage;
|
|
381
|
+
export declare function createJavaObject(targetId: string, gatewayClient: GatewayClient): JavaObject;
|
|
382
|
+
export declare function createJavaList(targetId: string, gatewayClient: GatewayClient): JavaList;
|
|
383
|
+
export declare function createJavaSet(targetId: string, gatewayClient: GatewayClient): JavaSet;
|
|
384
|
+
export declare function createJavaMap(targetId: string, gatewayClient: GatewayClient): JavaMap;
|
|
385
|
+
export declare function createJavaArray(targetId: string, gatewayClient: GatewayClient): JavaArray;
|
|
386
|
+
export declare function createJavaIterator(targetId: string, gatewayClient: GatewayClient): JavaIterator;
|
|
387
|
+
|
|
388
|
+
// ---------------------------------------------------------------------------
|
|
389
|
+
// Errors
|
|
390
|
+
// ---------------------------------------------------------------------------
|
|
391
|
+
|
|
392
|
+
export declare class Js4JError extends Error {
|
|
393
|
+
constructor(message: string);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
export declare class Js4JJavaError extends Js4JError {
|
|
397
|
+
/** Raw protocol error payload (e.g. "ro0"). */
|
|
398
|
+
javaExceptionMessage: string;
|
|
399
|
+
/** Decoded Java Throwable as a JavaObject (call getMessage(), etc.). */
|
|
400
|
+
javaException: JavaObject | null;
|
|
401
|
+
constructor(message: string, javaExceptionMessage: string, javaException?: JavaObject | null);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
export declare class Js4JNetworkError extends Js4JError {
|
|
405
|
+
constructor(message: string);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
export declare class Js4JAuthenticationError extends Js4JError {
|
|
409
|
+
constructor(message?: string);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// ---------------------------------------------------------------------------
|
|
413
|
+
// Protocol (low-level, for advanced use)
|
|
414
|
+
// ---------------------------------------------------------------------------
|
|
415
|
+
|
|
416
|
+
export declare namespace protocol {
|
|
417
|
+
const CALL_COMMAND_NAME: string;
|
|
418
|
+
const CONSTRUCTOR_COMMAND_NAME: string;
|
|
419
|
+
const FIELD_COMMAND_NAME: string;
|
|
420
|
+
const JVMVIEW_COMMAND_NAME: string;
|
|
421
|
+
const REFLECTION_COMMAND_NAME: string;
|
|
422
|
+
const MEMORY_COMMAND_NAME: string;
|
|
423
|
+
const ARRAY_COMMAND_NAME: string;
|
|
424
|
+
const DIR_COMMAND_NAME: string;
|
|
425
|
+
const HELP_COMMAND_NAME: string;
|
|
426
|
+
const SHUTDOWN_GATEWAY_COMMAND_NAME: string;
|
|
427
|
+
|
|
428
|
+
const REFERENCE_TYPE: string;
|
|
429
|
+
const INTEGER_TYPE: string;
|
|
430
|
+
const LONG_TYPE: string;
|
|
431
|
+
const DOUBLE_TYPE: string;
|
|
432
|
+
const BOOLEAN_TYPE: string;
|
|
433
|
+
const STRING_TYPE: string;
|
|
434
|
+
const NULL_TYPE: string;
|
|
435
|
+
const VOID_TYPE: string;
|
|
436
|
+
const LIST_TYPE: string;
|
|
437
|
+
const SET_TYPE: string;
|
|
438
|
+
const MAP_TYPE: string;
|
|
439
|
+
const ARRAY_TYPE: string;
|
|
440
|
+
const ITERATOR_TYPE: string;
|
|
441
|
+
|
|
442
|
+
const SUCCESS: string;
|
|
443
|
+
const ERROR: string;
|
|
444
|
+
const RETURN_MESSAGE: string;
|
|
445
|
+
const END: string;
|
|
446
|
+
const END_COMMAND_PART: string;
|
|
447
|
+
const ENTRY_POINT_OBJECT_ID: string;
|
|
448
|
+
const STATIC_PREFIX: string;
|
|
449
|
+
const DEFAULT_JVM_ID: string;
|
|
450
|
+
|
|
451
|
+
function encodeCommandPart(value: any, proxyPool?: ProxyPool): string;
|
|
452
|
+
function decodeReturnValue(answer: string, gatewayClient: GatewayClient): any;
|
|
453
|
+
function escapeNewLines(s: string): string;
|
|
454
|
+
function unescapeNewLines(s: string): string;
|
|
455
|
+
}
|
package/index.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* js4j — A Node.js implementation of py4j.
|
|
5
|
+
*
|
|
6
|
+
* Provides bidirectional JavaScript ↔ Java communication using the py4j
|
|
7
|
+
* gateway protocol, so js4j clients are fully compatible with py4j's Java
|
|
8
|
+
* GatewayServer.
|
|
9
|
+
*
|
|
10
|
+
* Quick start:
|
|
11
|
+
*
|
|
12
|
+
* const { JavaGateway } = require('js4j');
|
|
13
|
+
*
|
|
14
|
+
* const gateway = new JavaGateway({ port: 25333 });
|
|
15
|
+
* await gateway.connect();
|
|
16
|
+
*
|
|
17
|
+
* const sb = await gateway.jvm.java.lang.StringBuilder('Hello');
|
|
18
|
+
* await sb.append(', World!');
|
|
19
|
+
* console.log(await sb.toString()); // "Hello, World!"
|
|
20
|
+
*
|
|
21
|
+
* await gateway.close();
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
const { JavaGateway, GatewayParameters, CallbackServerParameters, GatewayClient } = require('./src/gateway');
|
|
25
|
+
const { ClientServer } = require('./src/clientServer');
|
|
26
|
+
const { CallbackServer, ProxyPool, createJavaProxy } = require('./src/callbackServer');
|
|
27
|
+
const { JVMView, createJavaClass, createJavaPackage } = require('./src/jvmView');
|
|
28
|
+
const { createJavaObject } = require('./src/javaObject');
|
|
29
|
+
const {
|
|
30
|
+
createJavaList,
|
|
31
|
+
createJavaSet,
|
|
32
|
+
createJavaMap,
|
|
33
|
+
createJavaArray,
|
|
34
|
+
createJavaIterator,
|
|
35
|
+
} = require('./src/collections');
|
|
36
|
+
const {
|
|
37
|
+
Js4JError,
|
|
38
|
+
Js4JJavaError,
|
|
39
|
+
Js4JNetworkError,
|
|
40
|
+
Js4JAuthenticationError,
|
|
41
|
+
} = require('./src/exceptions');
|
|
42
|
+
const protocol = require('./src/protocol');
|
|
43
|
+
|
|
44
|
+
module.exports = {
|
|
45
|
+
// Main gateway classes
|
|
46
|
+
JavaGateway,
|
|
47
|
+
GatewayParameters,
|
|
48
|
+
CallbackServerParameters,
|
|
49
|
+
ClientServer,
|
|
50
|
+
GatewayClient,
|
|
51
|
+
|
|
52
|
+
// Callback / proxy support
|
|
53
|
+
CallbackServer,
|
|
54
|
+
ProxyPool,
|
|
55
|
+
createJavaProxy,
|
|
56
|
+
|
|
57
|
+
// JVM navigation
|
|
58
|
+
JVMView,
|
|
59
|
+
createJavaClass,
|
|
60
|
+
createJavaPackage,
|
|
61
|
+
|
|
62
|
+
// Java object wrappers
|
|
63
|
+
createJavaObject,
|
|
64
|
+
createJavaList,
|
|
65
|
+
createJavaSet,
|
|
66
|
+
createJavaMap,
|
|
67
|
+
createJavaArray,
|
|
68
|
+
createJavaIterator,
|
|
69
|
+
|
|
70
|
+
// Exceptions
|
|
71
|
+
Js4JError,
|
|
72
|
+
Js4JJavaError,
|
|
73
|
+
Js4JNetworkError,
|
|
74
|
+
Js4JAuthenticationError,
|
|
75
|
+
|
|
76
|
+
// Low-level protocol (for advanced use)
|
|
77
|
+
protocol,
|
|
78
|
+
};
|