2017-08-09 9 views
1

XSLT変換を含むXMLファイルのデジタル署名を検証しようとしています。私はこのメッセージを検証するときしかし、私は次のエラーが表示されますXSLT変換を使用するとXMLデジタル署名の検証に失敗する

javax.xml.crypto.MarshalException: java.security.InvalidAlgorithmParameterException: XSLT Transform does not support specified parameter element: xsl:transform

ファイルの署名はそれは次のようになります変換含まれています

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
    <xsl:output encoding="UTF-8" indent="no" method="xml" 
     omit-xml-declaration="yes" standalone="yes" version="1.0" /> 
    <xsl:template match="@*|*"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|*" /> 
      <xsl:apply-templates select="text()" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="text()"> 
     <xsl:choose> 
      <xsl:when test="../@codering = 'base64'"> 
       <xsl:value-of select="translate(normalize-space(.), ' ', '')" /> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="normalize-space(.)" /> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
</xsl:transform> 

xmlファイルを検証するために使用されるコード次のようになります。

DocumentBuilderFactory documentBuilderFactory = documentBuilderFactory.newInstance(); 
documentBuilderFactory.setNamespaceAware(true); 
Document xmlDocument = documentBuilderFactory.newDocumentBuilder().parse(new ByteArrayInputStream(document.getBytes())); 
NodeList nodeList = xmlDocument.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature"); 
DOMValidateContext domValidateContext = new DOMValidateContext(new RsaSha256KeySelector(), nodeList.item(0)); 
XMLSignatureFactory xmlSignatureFactory = XMLSignatureFactory.getInstance("DOM"); 
XMLSignature signature = xmlSignatureFactory.unmarshalXMLSignature(domValidateContext); 
signatureIsValid = signature.validate(domValidateContext); 

誰もが私がここで間違ってやっている何のアイデアを持っていますか?

ありがとうございます。

+0

変換自体、つまり定義する前に、 'xsl:'を使っているようです。最初の 'xsl:'を削除してみるか、フルネームを使用できますか? –

答えて

0

自己解決策が見つかりました。どうやらJavaのXSLT変換は、xsl:transformsのみをサポートし、xsl:transformはサポートしません。 Althou W3C XSLTの仕様では、これを同義語と定義しています。

関連する問題