如何保护java中从其他语言(javascript)调用的方法签名
我有一个关于java与javascript结合的问题。在我们的应用程序中,我们有javascript中的gui构建和java中的服务器端构建。在javascript中,我们编写了我们想要从java中的classY调用methodX的代码。问题是java对javascript一无所知,所以当我们在java中更改某些内容时,可能会破坏javascript代码。即使eclipse中的普通重构选项也可以在不知情的情况下破坏javascript(更改方法名、删除参数、重命名DTO对象中的setter和getter)。问题是如何对抗它。我曾考虑用java编写一些注释,因此在更改方法签名后,您将出现编译错误(甚至有可能编写这种注释),但如果有某种工具可以为我这样做,我不想重新发明轮子。如果有任何帮助,我将不胜感激 问题是如何对抗它如何保护java中从其他语言(javascript)调用的方法签名,java,javascript,communication,Java,Javascript,Communication,我有一个关于java与javascript结合的问题。在我们的应用程序中,我们有javascript中的gui构建和java中的服务器端构建。在javascript中,我们编写了我们想要从java中的classY调用methodX的代码。问题是java对javascript一无所知,所以当我们在java中更改某些内容时,可能会破坏javascript代码。即使eclipse中的普通重构选项也可以在不知情的情况下破坏javascript(更改方法名、删除参数、重命名DTO对象中的setter和ge
最实际的解决方案可能是开发一组自动化测试(例如单元或系统测试),专门设计用于“练习”所有从Javascript调用Java API的情况(反之亦然)我认为有两种解决方案(变通方法)可以解决您的问题 1) 使用方法映射某些字符串
public class JavascriptCallable {
private static final String jsIdentifierMethod1 = "method1";
private static final String jsIdentifierMethod2 = "method2";
/**
* All requests from JS should be redirected to this method.
*
* @param methodName Name of the method
*/
public void requestFromJavascript (String methodName) throws Exception {
if (methodName.equals(jsIdentifierMethod1)){
method1();
} else if (methodName.equals(jsIdentifierMethod2)){
method2();
} else{
throw new Exception("Method not supported");
}
}
public void method1(){
// Do something
}
public void method2() {
// Do something
}
}
2) 具有适合js调用的单独方法。如果您使用反射来调用这些方法,这将很有帮助
public class JavascriptCallable {
/*----------------Methods to be called by js. Never refractor------------------*/
public void noRefractorMethod1() {
method1();
}
public void noRefractorMethod2() {
method2();
}
/*-------------------------------------------------------------------------------*/
/*---------Methods with business logic. Refractoring these will not mess your js-----------*/
public void method1() {
// Business logic
}
public void method2() {
// Business logic
}
/*-------------------------------------------------------------------------------*/
}
请告诉我这是否有帮助。用JAVA更改签名无法重构JavaScript代码。因为JavaScript只是调用Java方法(作为服务)。您需要手动更改它们。假设Java方法是由第三方创建的,您正试图使用JavaScript使用它们的服务。因此,如果他们更改了签名,您需要修改。或者,如果javascript需要或使用前面的方法,请重载这些方法。我知道更改java不会更改javascript。我希望当有人试图更改java中的方法(类)签名(例如,与注释或其他地方定义的签名相比)时,能够显示编译错误,这样他就会发现有问题。现在我们知道在运行javascript函数时出现了一些问题。在java中,一切都很好。我想如果没有人知道更好的方法,我们可能会使用它。在我们的项目中,第一个解决方法会很耗时,我不喜欢if-else序列。第二个选择也不好。您编写的方法只有通过注释才能防止重构,因此如果有人看不到,他无论如何都会更改它们。目前,我认为自动测试是最好的解决方案。我也不喜欢第二种选择。然而,如果您仔细地注意到,所有符合从javascript调用条件的方法都以noRefractor开头。因此,在进行折射之前,必须先确定方法名称。然而,我对这种解决方案并不感到自豪。我根本不会为解决方案辩护。如果您的意思是执行需要时间,请解释如何执行。我同意if-else序列是一种糟糕的编码方式。我会想出一个替代方案(如果可能的话)来避免其他情况。