src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java
changeset 53998 d870bb08194a
parent 50614 3810c9a2efa1
child 54731 81de17a33575
--- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java	Tue Mar 05 13:41:36 2019 +0100
+++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java	Tue Mar 05 08:24:58 2019 -0500
@@ -52,6 +52,7 @@
 import javax.xml.crypto.URIReferenceException;
 import javax.xml.crypto.XMLCryptoContext;
 import javax.xml.crypto.XMLStructure;
+import javax.xml.crypto.dom.DOMCryptoContext;
 import javax.xml.crypto.dom.DOMURIReference;
 import javax.xml.crypto.dsig.Transform;
 import javax.xml.crypto.dsig.XMLSignature;
@@ -179,50 +180,53 @@
         }
     }
 
-    @Override
     public String getURI() {
         return uri;
     }
 
-    @Override
     public String getType() {
         return type;
     }
 
-    @Override
     public List<Transform> getTransforms() {
         return transforms;
     }
 
     @Override
-    public void marshal(XmlWriter xwriter, String dsPrefix, XMLCryptoContext context)
+    public void marshal(Node parent, String dsPrefix, DOMCryptoContext context)
         throws MarshalException
     {
-        xwriter.writeStartElement(dsPrefix, "RetrievalMethod", XMLSignature.XMLNS);
+        Document ownerDoc = DOMUtils.getOwnerDocument(parent);
+        Element rmElem = DOMUtils.createElement(ownerDoc, "RetrievalMethod",
+                                                XMLSignature.XMLNS, dsPrefix);
 
-        // TODO - see whether it is important to capture the "here" attribute as part of the
-        // marshalling - do any of the tests fail?
         // add URI and Type attributes
-        here = xwriter.writeAttribute("", "", "URI", uri);
-        xwriter.writeAttribute("", "", "Type", type);
+        DOMUtils.setAttribute(rmElem, "URI", uri);
+        DOMUtils.setAttribute(rmElem, "Type", type);
 
         // add Transforms elements
         if (!transforms.isEmpty()) {
-            xwriter.writeStartElement(dsPrefix, "Transforms", XMLSignature.XMLNS);
+            Element transformsElem = DOMUtils.createElement(ownerDoc,
+                                                            "Transforms",
+                                                            XMLSignature.XMLNS,
+                                                            dsPrefix);
+            rmElem.appendChild(transformsElem);
             for (Transform transform : transforms) {
-                ((DOMTransform)transform).marshal(xwriter, dsPrefix, context);
+                ((DOMTransform)transform).marshal(transformsElem,
+                                                   dsPrefix, context);
             }
-            xwriter.writeEndElement(); // "Transforms"
         }
-        xwriter.writeEndElement(); // "RetrievalMethod"
+
+        parent.appendChild(rmElem);
+
+        // save here node
+        here = rmElem.getAttributeNodeNS(null, "URI");
     }
 
-    @Override
     public Node getHere() {
         return here;
     }
 
-    @Override
     public Data dereference(XMLCryptoContext context)
         throws URIReferenceException
     {
@@ -244,7 +248,7 @@
         // pass dereferenced data through Transforms
         try {
             for (Transform transform : transforms) {
-                data = transform.transform(data, context);
+                data = ((DOMTransform)transform).transform(data, context);
             }
         } catch (Exception e) {
             throw new URIReferenceException(e);