我正在使用需要對所有SOAP調用進行簽名的API。我已經從Java的文檔中瞭解如何使用Java XML數字簽名API進行編程來簽署SOAP調用。使用Clojure登錄肥皂
我一直遇到以下錯誤java.lang.IllegalArgumentException:沒有找到匹配的方法:newCanonicalizationMethod for class org.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory。
我知道問題在於將參數發送到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' - 即沒有parens? –
@Chris - 我確實嘗試了沒有parens,我仍然得到相同的錯誤。 –
您必須使用錯誤的參數數目調用'newCanonicalizationMethod',或者至少有一個參數的類型錯誤。你可以在你的問題中提供'newCanonicalizationMethod'的簽名嗎? –