2017-07-28 14 views
0

すべてのSOAP呼び出しに署名する必要があるAPIを使用しています。 Java XML Digital Signature APIでプログラミングを使用してSOAP呼び出しに署名する方法については、Javaのドキュメントを参照しています。ClojureのSOAP署名

私は一貫して次のエラーが発生しています。java.lang.IllegalArgumentException:一致するメソッドが見つかりませんでした:クラスorg.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactoryのnewCanonicalizationMethod。

問題は、newCanonocalizationMethodにパラメータを送信していることがわかりました。私はJavaごとの流れに従っていますが、私はまだこの問題に取り組んでいます。

ここに私のコードです。ここで

(let [fac (XMLSignatureFactory/getInstance "DOM") 
     dm (doto (.. fac (newDigestMethod (DigestMethod/SHA1) nil))) 
     bk "" 
     ref (.. fac (newReference bk dm)) 
     cm (CanonicalizationMethod/INCLUSIVE) 
     c14 C14NMethodParameterSpec 
     in (.. fac (newCanonicalizationMethod cm c14))]) 

は、完全な機能コードです:私はちょうどこのサイトあたりの署名セクションを作成するプロセスを開始しました:http://www.oracle.com/technetwork/articles/javase/dig-signature-api-140772.html

(defn create-signature 
    [] 
    (let [fac (XMLSignatureFactory/getInstance "DOM") 
     dm (doto (.. fac (newDigestMethod (DigestMethod/SHA1) nil))) 
     bk "" 
     ref (.. fac (newReference bk dm)) 
     cm CanonicalizationMethod/INCLUSIVE 
     c14 C14NMethodParameterSpec 
     si (.. 
      fac 
      (newSignedInfo 
       (.. 
       fac 
       (newCanonicalizationMethod 
        cm 
        C14NMethodParameterSpec)) 
       (.. 
       fac 
       (newSignatureMethod 
        (SignatureMethod/RSA_SHA1) nil)) 
       (.. java.util.Collections (singletonList ref)))) 
     ] 
     )) 

あなたは工場出荷時に反映させる実行する場合は、あなたがこれを取得します応答:

{:name newCanonicalizationMethod, 
:return-type javax.xml.crypto.dsig.CanonicalizationMethod, 
:declaring-class 
org.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory, 
:parameter-types 
[java.lang.String 
    javax.xml.crypto.dsig.spec.C14NMethodParameterSpec], 
:exception-types 
[java.security.NoSuchAlgorithmException 
    java.security.InvalidAlgorithmParameterException], 
:flags #{:public}} 
+0

'CanonicalizationMethod/INCLUSIVE'を試しましたか?つまり、括弧はありませんか? –

+0

@Chris - 私は括弧なしで試してみましたが、私はまだ同じエラーが発生します。 –

+0

あなたは間違った数のargsを使って 'newCanonicalizationMethod'を呼び出さなければなりません、あるいは少なくとも1つのargsが間違った型でなければなりません。あなたの質問に 'newCanonicalizationMethod'の署名を提供できますか? –

答えて

0

この問題の解決策は、カスタムJavaクラスのすべてのJavaメソッドを生成することでした。問題は、Javaメソッドが特定のタイプのパラメータを探していたことです。このコードは、Clojureでコンパイルされない(Java型)nullを使用して生成するように指示しています。

私はこのウェブサイトを使ってXML署名linkを生成していました。

カスタムクラスを作成した後、私はコンパイルしてClojureプロジェクトにインポートしました。

教訓:特定のJavaクラスで作業する場合は、Java Interopではなく純粋なJavaを使用することをお勧めします。

関連する問題