おはようございます 同じ名前を持つ2つのメソッドを持つ抽象Javaクラスを拡張しようとしています。しかし、それらのうちの1つだけを検証する必要があります。ここでJRuby:同じ名前の2つのメソッドを持つJavaクラスを拡張します
は私のJavaコードは次のとおりです。私は「JAVA_METHOD」を使用しようとすると、ここで
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
}
}
は私のJRubyのコードが
ある#To make parent attributes accessible from subclasses
class ClientHandler
field_accessor :disable, :signatureCertificate, :privateKey, :signatureCertificationChain
end
#first version referring to that post: <http://stackoverflow.com/questions/6238734/jruby-calls- the-wrong-method>
module RubyClientHandler
class RClientHandler < ClientHandler
handleMessage = ClientHandler.java_method :handleMessage, java.lang.Class.for_name(Java::ComSubFolder::VIHF)]
def handleMessage(vihf)
super(self.disableSignature) #is this line ok or note?
certificate = self.signatureCertificate #do i need to use the "self" or the "@" ?
issuer = certificate.getSubjectDN().toString()
...
end
end
end
私の最初のバージョンでは、私は次のエラーを取得しています: "Java :: JavaLang :: Classの引数(org.jruby.RubyModule)のメソッド 'forName'がありません
次に、この2番目のRClientHandlerクラスを試しました
第二版:その記事を参照:http://www.ruby-forum.com/topic/216636
module RubyClientHandler
class RClientHandler < ClientHandler
def handleMessage(vihf)
super #line causing the error
klass = vihf.class
if(klass.eql?(Java::ComSubFolder::VIHF))
self.java_send :handleMessage,[VIHF], vihf
certificate = self.signatureCertificate
issuer = certificate.getSubjectDN().toString()
...
end
end
end
end
私は「のhandleMessage」の最初の行を指している、次の例外を取得していますこの第二のバージョンで
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)
は、これは、親クラスのコンストラクタまたは親の "handleMessage"メソッドを呼び出す "super"の行? 親クラスのコンストラクタに従ってここで "super"を呼び出すときに何らかの引数が必要ですか?
JRubyで "handleMessage"メソッドを1つ(または2つ)だけオーバーライドすることで、この "ClientHandler"クラスを拡張する方法を教えてください。 ご協力いただきありがとうございます。最初のバージョンで
私は文字列として私のクラスの名前を使用しようとしましたが、私は次のエラーを取得しています NativeException(にjava.lang.ClassNotFoundException:COM /サブ/フォルダ/ VIHF) : java/lang/Class.java:-2:forName0にあります。 java/lang/Class.java:169:forNameにあります。 – user1310635
JavaコードはJRubyにどのように提供されていますか? jarファイルですか?もしそうなら、クラス通路にその瓶がありますか? –