Class XmlSignerProcessor
- java.lang.Object
-
- org.apache.camel.component.xmlsecurity.processor.XmlSignatureProcessor
-
- org.apache.camel.component.xmlsecurity.processor.XmlSignerProcessor
-
- All Implemented Interfaces:
org.apache.camel.Processor
public class XmlSignerProcessor extends XmlSignatureProcessor
Creates from the message body a XML signature element which is returned in the message body of the output message. Enveloped, enveloping XML, and detached signatures are supported.In the enveloped XML signature case, the method
XmlSignerConfiguration.getParentLocalName()must not returnnull. In this case the parent element must be contained in the XML document provided by the message body and the signature element is added as last child element of the parent element. If a KeyInfo instance is provided by theKeyAccessorandXmlSignerConfiguration.getAddKeyInfoReference()istrue, then also a reference to the KeyInfo element is added. The generated XML signature has the following structure:<[parent element]> ... <Signature Id="[signature_id]"> <SignedInfo> <Reference URI=""> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> (<Transform>)* <DigestMethod> <DigestValue> </Reference> (<Reference URI="#[keyinfo_Id]"> <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <DigestMethod> <DigestValue> </Reference>)? <!-- further references possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) --> </SignedInfo> <SignatureValue> (<KeyInfo Id="[keyinfo_id]">)? <!-- Object elements possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) --> </Signature> </[parent element]>In the enveloping XML signature case, the generated XML signature has the following structure:
In the enveloping XML signature case, also message bodies containing plain text are supported. This must be indicated via the header<Signature Id="[signature_id]"> <SignedInfo> <Reference URI="#[object_id]" type="[optional_type_value]"> (<Transform>)* <DigestMethod> <DigestValue> </Reference> (<Reference URI="#[keyinfo_id]"> <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <DigestMethod> <DigestValue> </Reference>)? <!-- further references possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) --> </SignedInfo> <SignatureValue> (<KeyInfo Id="[keyinfo_id]">)? <Object Id="[object_id]"/> <!-- further Object elements possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) --> </Signature>XmlSignatureConstants.HEADER_MESSAGE_IS_PLAIN_TEXTor via the configurationXmlSignerConfiguration.getPlainText().Detached signatures where the signature element is a sibling element to the signed element are supported. Those elements can be signed which have ID attributes. The elements to be signed must be specified via xpath expressions (see
XmlSignerConfiguration.setXpathsToIdAttributes(List)) and the XML schema must be provided via the schema resource URI (see methodXmlSignatureConfiguration.setSchemaResourceUri(String). Elements with deeper hierarchy level are signed first. This procedure can result in nested signatures.In all cases, the digest algorithm is either read from the configuration method
XmlSignerConfiguration.getDigestAlgorithm()or calculated from the signature algorithm (XmlSignerConfiguration.getSignatureAlgorithm(). The optional transforms are read fromXmlSignerConfiguration.getTransformMethods().In all cases, you can add additional references and objects which contain properties for the XML signature, see
XmlSignerConfiguration.setProperties(XmlSignatureProperties).
-
-
Field Summary
-
Fields inherited from class org.apache.camel.component.xmlsecurity.processor.XmlSignatureProcessor
context
-
-
Constructor Summary
Constructors Constructor Description XmlSignerProcessor(org.apache.camel.CamelContext context, XmlSignerConfiguration config)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected ReferencecreateKeyInfoReference(XMLSignatureFactory fac, String keyInfoId, String digestAlgorithm)protected ReferencecreateReference(XMLSignatureFactory fac, String uri, String type, SignatureType sigType, String id, org.apache.camel.Message message)protected SignedInfocreateSignedInfo(XMLSignatureFactory fac, List<? extends Reference> refs)protected XMLObjectcreateXMLObject(XMLSignatureFactory fac, Node node, String id)XmlSignerConfigurationgetConfiguration()protected StringgetContentReferenceType(org.apache.camel.Message message)protected List<String>getContentReferenceUris(org.apache.camel.Message message, SignatureType signatureType, Node messageBodyNode)protected StringgetDigestAlgorithmUri()protected NodegetMessageBodyNode(org.apache.camel.Message message)protected StringgetMessageEncoding(org.apache.camel.Message inMessage)protected List<? extends XMLObject>getObjects(XmlSignatureProperties.Input input, XmlSignatureProperties.Output properties)protected ElementgetParentForEnvelopedCase(Document doc, org.apache.camel.Message inMessage)protected ElementgetParentOfSignature(org.apache.camel.Message inMessage, Node messageBodyNode, String contentReferenceURI, SignatureType sigType)protected List<? extends Reference>getReferences(XmlSignatureProperties.Input input, XmlSignatureProperties.Output properties, String keyInfoId)protected SchemagetSchemaForSigner(org.apache.camel.Message message, org.apache.camel.support.processor.validation.ValidatorErrorHandler errorHandler)protected XmlSignatureProperties.OutputgetSignatureProperties(XmlSignatureProperties.Input input)protected List<XPathFilterParameterSpec>getXpathToIdAttributes(org.apache.camel.Message message)protected BooleanisPlainText(org.apache.camel.Message message)protected BooleanomitXmlDeclaration(org.apache.camel.Message message)protected DocumentparseInput(InputStream is, Boolean disallowDoctypeDecl, Schema schema, ErrorHandler errorHandler)voidprocess(org.apache.camel.Exchange exchange)protected voidsetOutputEncodingToMessageHeader(org.apache.camel.Message message)protected Documentsign(org.apache.camel.Message out)-
Methods inherited from class org.apache.camel.component.xmlsecurity.processor.XmlSignatureProcessor
clearMessageHeaders, getCamelContext, getSchema, getSchemaResourceUri, setCryptoContextProperties
-
-
-
-
Constructor Detail
-
XmlSignerProcessor
public XmlSignerProcessor(org.apache.camel.CamelContext context, XmlSignerConfiguration config)
-
-
Method Detail
-
getConfiguration
public XmlSignerConfiguration getConfiguration()
- Specified by:
getConfigurationin classXmlSignatureProcessor
-
getXpathToIdAttributes
protected List<XPathFilterParameterSpec> getXpathToIdAttributes(org.apache.camel.Message message)
-
getSignatureProperties
protected XmlSignatureProperties.Output getSignatureProperties(XmlSignatureProperties.Input input) throws Exception
- Throws:
Exception
-
omitXmlDeclaration
protected Boolean omitXmlDeclaration(org.apache.camel.Message message)
-
createSignedInfo
protected SignedInfo createSignedInfo(XMLSignatureFactory fac, List<? extends Reference> refs) throws Exception
- Throws:
Exception
-
getMessageBodyNode
protected Node getMessageBodyNode(org.apache.camel.Message message) throws Exception
- Throws:
Exception
-
getSchemaForSigner
protected Schema getSchemaForSigner(org.apache.camel.Message message, org.apache.camel.support.processor.validation.ValidatorErrorHandler errorHandler) throws XmlSignatureException, SAXException, IOException
-
isPlainText
protected Boolean isPlainText(org.apache.camel.Message message)
-
getParentOfSignature
protected Element getParentOfSignature(org.apache.camel.Message inMessage, Node messageBodyNode, String contentReferenceURI, SignatureType sigType) throws Exception
- Throws:
Exception
-
getParentForEnvelopedCase
protected Element getParentForEnvelopedCase(Document doc, org.apache.camel.Message inMessage) throws Exception
- Throws:
Exception
-
getReferences
protected List<? extends Reference> getReferences(XmlSignatureProperties.Input input, XmlSignatureProperties.Output properties, String keyInfoId) throws Exception
- Throws:
Exception
-
getObjects
protected List<? extends XMLObject> getObjects(XmlSignatureProperties.Input input, XmlSignatureProperties.Output properties)
-
getMessageEncoding
protected String getMessageEncoding(org.apache.camel.Message inMessage)
-
parseInput
protected Document parseInput(InputStream is, Boolean disallowDoctypeDecl, Schema schema, ErrorHandler errorHandler) throws ParserConfigurationException, IOException, XmlSignatureFormatException
-
createReference
protected Reference createReference(XMLSignatureFactory fac, String uri, String type, SignatureType sigType, String id, org.apache.camel.Message message) throws InvalidAlgorithmParameterException, XmlSignatureException
-
getContentReferenceType
protected String getContentReferenceType(org.apache.camel.Message message)
-
getContentReferenceUris
protected List<String> getContentReferenceUris(org.apache.camel.Message message, SignatureType signatureType, Node messageBodyNode) throws XmlSignatureException, XPathExpressionException
-
createXMLObject
protected XMLObject createXMLObject(XMLSignatureFactory fac, Node node, String id)
-
getDigestAlgorithmUri
protected String getDigestAlgorithmUri() throws XmlSignatureException
- Throws:
XmlSignatureException
-
createKeyInfoReference
protected Reference createKeyInfoReference(XMLSignatureFactory fac, String keyInfoId, String digestAlgorithm) throws Exception
- Throws:
Exception
-
setOutputEncodingToMessageHeader
protected void setOutputEncodingToMessageHeader(org.apache.camel.Message message)
-
-