Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JRuby:使用两个同名的方法扩展Java类_Java_Ruby_Jruby - Fatal编程技术网

JRuby:使用两个同名的方法扩展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;

大家早上好, 我试图用两个同名的方法扩展一个抽象Java类。但只需要超越其中一个

以下是我的Java代码:

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:in
forName0'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>