JRuby:使用两个同名的方法扩展Java类
大家早上好, 我试图用两个同名的方法扩展一个抽象Java类。但只需要超越其中一个 以下是我的Java代码:JRuby:使用两个同名的方法扩展Java类,java,ruby,jruby,Java,Ruby,Jruby,大家早上好, 我试图用两个同名的方法扩展一个抽象Java类。但只需要超越其中一个 以下是我的Java代码: public abstract class ClientHandler extends Handler implements SOAPHandler<SOAPMessageContext> { protected boolean disable = true; protected X509Certificate signatureCertificate;
public abstract class ClientHandler extends Handler implements SOAPHandler<SOAPMessageContext> {
protected boolean disable = true;
protected X509Certificate signatureCertificate;
protected PrivateKey privateKey;
protected Certificate[] signatureCertificationChain;
//Constructeur
protected ClientHandler(boolean disable) {
this.disable = disable;
}
private boolean handleMessage(VIHF vihf) {
//This is the beginning of the method i am trying to redefine
X509Certificate certificate = this.signatureCertificate
String issuer = certificate.getSubjectDN().toString();
//some code
...
}
public boolean handleMessage(SOAPMessageContext smc) {
//some code
}
}
这是一行“super”调用父类构造函数还是父“handleMessage”方法?
根据父类构造函数在这里调用“super”时是否需要一些参数
如果您能告诉我如何通过只重写JRuby中的一个(或两个)“handleMessage”方法来扩展这个“ClientHandler”类,我将不胜感激。
提前感谢您的帮助。在第一个版本中,尝试将Java类的名称作为字符串传递:
java.lang.Class.for_name('Java::ComSubFolder::VIHF')
更新:实际上,这不起作用,因为这是JRuby名称空间,对吗?您需要类的Java路径
例如:
> java.lang.Class.for_name('java.lang.StringBuffer')
=> #<Java::JavaLang::Class:0x628d2280>
> java.lang.Class.for_name('java.util.ArrayList')
=> #<Java::JavaLang::Class:0x5057f57f>
>java.lang.Class.for_name('java.lang.StringBuffer'))
=> #
>java.lang.Class.for_name('java.util.ArrayList')
=> #
我尝试将我的类名用作字符串,但是我得到了以下错误NativeException(java.lang.ClassNotFoundException:com/sub/folder/VIHF):java/lang/class.java:-2:inforName0'java/lang/class.java:169:in
forName'您的java代码是如何提供给JRuby的?在jar文件中?如果是这样的话,您的类路径上有那个jar吗?
HANDLER_RAISED_RUNTIME_EXCEPTION
org.jruby.exceptions.RaiseException: Native Exception: 'class java.lang.StackOverflowError'; Message: null; StackTrace: java.lang.StackOverflowError
at org.jruby.proxy.com.sub.folder.ClientHandler$Proxy0.__super$handleMessage(Unknown Source)
java.lang.Class.for_name('Java::ComSubFolder::VIHF')
> java.lang.Class.for_name('java.lang.StringBuffer')
=> #<Java::JavaLang::Class:0x628d2280>
> java.lang.Class.for_name('java.util.ArrayList')
=> #<Java::JavaLang::Class:0x5057f57f>