import javax.xml.crypto.dsig.*;
// Create XML document
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.newDocument();
// Create XML Signature
XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM");
Reference ref = factory.newReference("", DigestMethod.SHA256);
Transforms transforms = factory.newTransforms(Collections.singletonList(factory.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null)));
ref.setTransforms(transforms);
SignedInfo si = factory.newSignedInfo(factory.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE, (C14NMethodParameterSpec) null), factory.newSignatureMethod(SignatureMethod.RSA_SHA256, null), Collections.singletonList(ref));
KeyInfo ki = factory.newKeyInfo(Collections.singletonList(factory.newKeyName("John Doe")));
XMLSignature signature = factory.newXMLSignature(si, ki);
// Sign XML document
Key privateKey = ...; // Obtain private key
XMLSignatureSigner signer = factory.newXMLSignatureSigner(privateKey, null);
DOMSignContext context = new DOMSignContext(privateKey, document.getDocumentElement());
signer.sign(signature, context);