Good functionality, flexible API; just a couple of suggestions, related to
my experiences using the library to implement a subset of OASIS-WSSE:
1) expose fully specified encryptData method (required for customised
embedding of encrypted elements with control of content mode).
2) make key/data refs work for fragment URIs (my patch is a bit of a hack
for this, removing the validation, but at least applications can then use
these refs) A more elaborate fix may be possible, but I don't really want
to dig that deeply into the URI code.
diff attached
C
Index: XMLCipher.java
===================================================================
RCS file:
/home/cvspublic/xml-security/src/org/apache/xml/security/encryption/XMLCipher.java,v
retrieving revision 1.34
diff -r1.34 XMLCipher.java
909c909,923
< private EncryptedData encryptData(Document context, Element element,
boolean contentMode) throws
---
>
> /**
> * Returns an <code>EncryptedData</code> interface. Use this operation if
> * you want to have full control over the contents of the
> * <code>EncryptedData</code> structure.
> *
> * This does not change the source document in any way.
> *
> *
> * @param context the context <code>Document</code>.
> * @param element the <code>Element</code> that will be encrypted.
> * @param contentMode true if element content only is to be encrypted
> * @throws XMLEncryptionException.
> */
> public EncryptedData encryptData(Document context, Element element,
> boolean contentMode) throws // cbrettin changed to public
2556,2564c2570,2575
< list = element.getElementsByTagNameNS(
< EncryptionConstants.EncryptionSpecNS,
< EncryptionConstants._TAG_DATAREFERENCE);
< for (int i = 0; i < list.getLength() ; i++) {
< String uri = null;
< try {
< uri = new URI(
< ((Element)
list.item(0)).getNodeValue()).toString();
< } catch (URI.MalformedURIException mfue) {
---
> list = element.getElementsByTagNameNS(
> EncryptionConstants.EncryptionSpecNS,
> EncryptionConstants._TAG_DATAREFERENCE);
> for (int i = 0; i < list.getLength() ; i++) {
> String uri = ((Element)
> list.item(i)).getAttribute("URI");
> result.add(result.newDataReference(uri));
2566,2567c2577
< result.add(result.newDataReference(uri));
< }
---
> break;
2569,2577c2579,2584
< list = element.getElementsByTagNameNS(
< EncryptionConstants.EncryptionSpecNS,
< EncryptionConstants._TAG_KEYREFERENCE);
< for (int i = 0; i < list.getLength() ; i++) {
< String uri = null;
< try {
< uri = new URI(
< ((Element)
list.item(0)).getNodeValue()).toString();
< } catch (URI.MalformedURIException mfue) {
---
> list = element.getElementsByTagNameNS(
> EncryptionConstants.EncryptionSpecNS,
> EncryptionConstants._TAG_KEYREFERENCE);
> for (int i = 0; i < list.getLength() ; i++) {
> String uri = ((Element)
> list.item(i)).getAttribute("URI");
> result.add(result.newKeyReference(uri));
2579,2580d2585
< result.add(result.newKeyReference(uri));
< }