public class XmlSignerProcessor extends XmlSignatureProcessor
In the enveloped XML signature case, the method
XmlSignerConfiguration.getParentLocalName() must not return
null. 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 the KeyAccessor and
XmlSignerConfiguration.getAddKeyInfoReference() is true,
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:
<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>
In the enveloping XML signature case, also message bodies containing plain
text are supported. This must be indicated via the header
XmlSignatureConstants.HEADER_MESSAGE_IS_PLAIN_TEXT or via the
configuration XmlSignerConfiguration.getPlainText().
In both 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 from XmlSignerConfiguration.getTransformMethods()
.
In both cases, you can add additional references and objects which contain
properties for the XML signature, see
XmlSignerConfiguration.setProperties(XmlSignatureProperties).
| Constructor and Description |
|---|
XmlSignerProcessor(XmlSignerConfiguration config) |
| Modifier and Type | Method and Description |
|---|---|
protected Reference |
createKeyInfoReference(XMLSignatureFactory fac,
String keyInfoId,
String digestAlgorithm) |
protected Reference |
createReference(XMLSignatureFactory fac,
String uri,
String type) |
protected SignedInfo |
createSignedInfo(XMLSignatureFactory fac,
List<? extends Reference> refs) |
protected XMLObject |
createXMLObject(XMLSignatureFactory fac,
Node node,
String id) |
XmlSignerConfiguration |
getConfiguration() |
protected String |
getContentReferenceType(org.apache.camel.Message message) |
protected String |
getContentReferenceUri(org.apache.camel.Message message) |
protected String |
getDigestAlgorithmUri() |
protected Node |
getMessageBodyNode(org.apache.camel.Message message) |
protected String |
getMessageEncoding(org.apache.camel.Message inMessage) |
protected List<? extends XMLObject> |
getObjects(XmlSignatureProperties.Input input,
XmlSignatureProperties.Output properties) |
protected Element |
getParentOfSignature(org.apache.camel.Message inMessage,
Node messageBodyNode) |
protected List<? extends Reference> |
getReferences(XmlSignatureProperties.Input input,
XmlSignatureProperties.Output properties,
String keyInfoId) |
protected XmlSignatureProperties.Output |
getSignatureProperties(XmlSignatureProperties.Input input) |
protected boolean |
isEnveloped() |
protected Boolean |
isPlainText(org.apache.camel.Message message) |
protected Boolean |
omitXmlDeclaration(org.apache.camel.Message message) |
protected Document |
parseInput(InputStream is,
Boolean disallowDoctypeDecl) |
void |
process(org.apache.camel.Exchange exchange) |
protected Document |
sign(org.apache.camel.Message out) |
clearMessageHeaders, setCryptoContextPropertiespublic XmlSignerProcessor(XmlSignerConfiguration config)
public XmlSignerConfiguration getConfiguration()
getConfiguration in class XmlSignatureProcessorprotected XmlSignatureProperties.Output getSignatureProperties(XmlSignatureProperties.Input input) throws Exception
Exceptionprotected Boolean omitXmlDeclaration(org.apache.camel.Message message)
protected SignedInfo createSignedInfo(XMLSignatureFactory fac, List<? extends Reference> refs) throws Exception
Exceptionprotected Node getMessageBodyNode(org.apache.camel.Message message) throws Exception
Exceptionprotected Boolean isPlainText(org.apache.camel.Message message)
protected Element getParentOfSignature(org.apache.camel.Message inMessage, Node messageBodyNode) throws Exception
Exceptionprotected List<? extends Reference> getReferences(XmlSignatureProperties.Input input, XmlSignatureProperties.Output properties, String keyInfoId) throws Exception
Exceptionprotected List<? extends XMLObject> getObjects(XmlSignatureProperties.Input input, XmlSignatureProperties.Output properties) throws Exception
Exceptionprotected String getMessageEncoding(org.apache.camel.Message inMessage)
protected Document parseInput(InputStream is, Boolean disallowDoctypeDecl) throws XmlSignatureFormatException, ParserConfigurationException, IOException
protected Reference createReference(XMLSignatureFactory fac, String uri, String type) throws InvalidAlgorithmParameterException, XmlSignatureException
protected String getContentReferenceType(org.apache.camel.Message message)
protected String getContentReferenceUri(org.apache.camel.Message message)
protected XMLObject createXMLObject(XMLSignatureFactory fac, Node node, String id)
protected boolean isEnveloped()
protected String getDigestAlgorithmUri() throws XmlSignatureException
XmlSignatureExceptionApache Camel