すべての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}}
'CanonicalizationMethod/INCLUSIVE'を試しましたか?つまり、括弧はありませんか? –
@Chris - 私は括弧なしで試してみましたが、私はまだ同じエラーが発生します。 –
あなたは間違った数のargsを使って 'newCanonicalizationMethod'を呼び出さなければなりません、あるいは少なくとも1つのargsが間違った型でなければなりません。あなたの質問に 'newCanonicalizationMethod'の署名を提供できますか? –