Creating an instance of the Java Scripting Engine class

Currently, I am facing a challenge while trying to integrate a scripting endpoint into our application. The issue at hand is as follows: Is it viable to create an object that is an instance of an abstract class with implemented methods? In the context of Java, the scenario would resemble the following:

SimpleObject obj = new SimpleObject("constructor arg0") {    
   public void doCustomAction() {
     System.out.println("Action");
   }
}

In this case, SimpleObject is an abstract class containing an abstract method called doCustomAction. How can one achieve such behavior using a Java Scripting Engine? My attempt involves the following approach:

obj1 = new SimpleObject("value1") {
    doCustomAction : function() {
       //Perform actions.
    }
}

Unfortunately, an exception is thrown by the engine:

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException:
   error instantiating (JavaAdapter: first arg should be interface Class (<Unknown source>#1)): 
  class SimpleObject is interface or abstract (<Unknown source>#1) in <Unknown source> at line number 1

Answer №1

To enhance your abstract class in Java, you can create a similar setup to how MouseAdapter utilizes interfaces. Then, in JavaScript, you can utilize this "adapter" concept in the following way:

In Java:

public abstract class CustomObject {
   abstract void performCustomAction();
}
public class CustomObjectAdapter extends CustomObject {
   void performCustomAction(){}
}

In JavaScript:

obj1 = new JavaAdapter(CustomObjectAdapter,{
    performCustomAction : function() {
       //Implement custom action.
    }
});

Alternatively, without using the "adapter", you can simply do:

obj1 = new JavaAdapter(Packages.CustomObject, {
   performCustomAction: function(){
      //Implement custom action.
   }
});

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

How can data on the server be fetched using an AJAX request in Express.JS and displayed on the client side?

I have been given the task of displaying this code on the client side. I've successfully loaded data/content on the page but it lacks a certain level of elegance. var express = require('express'); router = express.Router(), ...

I noticed that my Angular routes are prefixed with a '#%2F' before the specified URL in my app.js file

My Angular routes are set up in the app.js file like this: .config(function ($routeProvider) { $routeProvider .when('/', { templateUrl: 'views/main.html', controller: 'MainCtrl', controllerAs ...

AngularJS handles intricate JSON responses effortlessly

I have been learning angularjs on my own, mostly from w3schools and other websites. I have been trying to download and parse some JSON data. I was successful with a simple JSON url (http://ip.jsontest.com), but I am struggling with a more complex response. ...

Organizing an array of items based on their attributes

I am currently facing a challenge with sorting an array of objects by their values. In order to achieve this, I am using the following code: function compare(a,b){return dict[a]-dict[b]} Object.keys(dict).sort(compare) This implementation works perfectl ...

Ways to disable .animate() specifically for a particular element

I have implemented a countdown using which smoothly animates the numbers down and fades to opacity 0. Update. I have also created a demo on jsFiddle here: http://jsfiddle.net/Mw4j2/ // The .static class is added when the animation // complet ...

How can data be transferred from child component inputs to a parent form in Angular's template-driven approach?

It seems like this should be a straightforward task, but I'm encountering conflicting instructions on how to achieve it. I have three child components, each with their own set of input controls that are supposed to feed into a parent component. Howeve ...

Exploring the Scope of LocalStorage in Javascript

I've recently begun working with local storage and encountered some scope issues. Whenever I try to console.log(test), the second if statement returns undefined. What am I missing here? This is my current code; $("document").ready(function(){ ...

Tips for resolving the error message "What to do when reportWebVitals can't be located

Having some trouble with importing reportWebVitals for my React 18 application that is based on WebPack 5. Below is a snippet of my index.tsx file: import React from 'react'; import ReactDOM from 'react-dom/client'; import './style ...

Instead of displaying a preview of the file, the file upload with jQuery will now showcase the file link in a new window

I am currently working on a Jquery file upload project and I have decided not to use any plugins. My goal is to achieve this using Pure Jquery / JavaScript. Instead of previewing the file, I want to display a link (View) once the image or PDF is uploaded. ...

How can I dynamically update the URL parameter based on the selected option in a dropdown list?

There is a single select option box with three options. When a user selects an option, the corresponding value should be appended to the URL (e.g., value=needbyDate). If another option is selected later, the previous value in the URL should be replaced w ...

Tips for implementing a countdown timer with JavaScript

I have created a program using HTML that functions like a website but works offline. I am looking to incorporate a 35-minute countdown timer that will automatically log out the user once the time is up. However, my current JavaScript code only counts down ...

What is the formula for determining the percentage of transparent area on a canvas?

In my Ionic 4 drawing app, I have incorporated an image of the number 1 on the canvas using drawImage and made the background transparent. If users (typically kids) draw outside the number 1 image, the accuracy percentage will decrease. While searching for ...

Submitting content to numerous webpages

I'm looking to submit form data on multiple pages, while keeping the main action as "". After clicking, I want the page to refresh but also send the POST data to another .php file. This is necessary because the other .php file generates a graph that ...

Transforming the setting into redux using setTimeout

I am currently working with the following context: interface AlertContextProps { show: (message: string, duration: number) => void; } export const AlertContext = createContext<AlertContextProps>({ show: (message: string, duration: number) =&g ...

Hey there, I'm looking to automatically delete new users from my mongoDB atlas database if they haven't verified their phone number within 2 minutes. I believe using the TTL feature would be

Database Schema In my User schema, the field isVerified is initially saved as false. The user enters their phone number, receives a verification token via SMS, and both the token and number are saved in the database. Once the user enters the verification ...

(Node)Error [ERR_HTTP_HEADERS_SENT]: It is not possible to update headers once they have been sent to the client

I've been diving into NodeJS and mongoDB through YouTube tutorials, but unfortunately, I've hit a roadblock with this problem. Here's my code file – any help is greatly appreciated! db.js const { MongoClient } = require("mongodb" ...

Using iFrames to switch sources repeatedly

I have created an iFrame and I am looking to dynamically change its source to one of 10 different URLs each time it loads: Here is the desired behavior: iFrame loads => change to example.com => iFrame loads => change to example1.com => iFrame ...

Encountering issues with running `npm start` following the creation of a fresh React project using create

Encountering an issue with react-scripts after setting up a new react project. I initiated the project using npx create-react-app dashboard. Upon entering the dashboard directory and executing npm start (without any prior actions), the following error is d ...

How to include the novalidate attribute in an easyUI validatebox

I am attempting to apply the novalidate property to the easyUI validatebox within Jquery's (document).ready() method using the following code: $('#fieldId').attr('novalidate',true); Unfortunately, the code is not executing as exp ...

Creating an interactive dropdown menu with simple_form

I am new to JS/Ajax and unsure how to render dynamic options based on previously inserted data in the same form. Background: The bike shop chain application allows the renting of bikes with names like "bike 1" or "yellow bike" ('bikes'), by sele ...