private void transferProperties(Node qualifPropsNode, Node tempNode) { // The QualifyingProperties node already has a child element for the current // type of properties. Element existingProps = DOMHelper.getFirstDescendant( (Element) qualifPropsNode, QualifyingProperty.XADES_XMLNS, propsElemName); // The new properties (Signed or Unsigned) were marshalled into the temp // node. Element newProps = DOMHelper.getFirstChildElement(tempNode); Element newSpecificProps = DOMHelper.getFirstChildElement(newProps); do { Element existingSpecificProps = DOMHelper.getFirstDescendant( existingProps, newSpecificProps.getNamespaceURI(), newSpecificProps.getLocalName()); if (null == existingSpecificProps) // No element for these properties. Append the new element to the existing // properties. existingProps.appendChild(newSpecificProps); else // There are properties. Transfer all the new properties into the existing // element. transferChildren(newSpecificProps, existingSpecificProps); newSpecificProps = DOMHelper.getNextSiblingElement(newSpecificProps); } while (newSpecificProps != null); }
protected void doMarshal( SigAndDataObjsPropertiesData properties, Node qualifyingPropsNode, TXml xmlProps) throws MarshalException { if (properties.isEmpty()) return; Collection<PropertyDataObject> unknownSigProps = null; if (!properties.getSigProps().isEmpty()) { prepareSigProps(xmlProps); unknownSigProps = convert(properties.getSigProps(), xmlProps); } Collection<PropertyDataObject> unknownDataObjProps = null; if (!properties.getDataObjProps().isEmpty()) { prepareDataObjsProps(xmlProps); unknownDataObjProps = convert(properties.getDataObjProps(), xmlProps); } if (propsNotAlreadyPresent(qualifyingPropsNode)) // If the QualifyingProperties node doesn't already have an element // for the current type of properties, do a JAXB marshalling into it. doJAXBMarshalling(qualifyingPropsNode, xmlProps); else { // If it has, marshall into a temp node and transfer the resulting // nodes into the appropriate QualifyingProperties children. Node tempNode = DOMHelper.createElement( qualifyingPropsNode.getOwnerDocument(), "temp", null, QualifyingProperty.XADES_XMLNS); // - A little work around to inherit the namespace node defined in // the document. Its just a matter of style. qualifyingPropsNode.appendChild(tempNode); doJAXBMarshalling(tempNode, xmlProps); qualifyingPropsNode.removeChild(tempNode); transferProperties(qualifyingPropsNode, tempNode); } // The top-most XML element for the current type of properties. Element topMostPropsElem = DOMHelper.getFirstDescendant( (Element) qualifyingPropsNode, QualifyingProperty.XADES_XMLNS, propsElemName); if (!CollectionUtils.nullOrEmpty(unknownSigProps)) marshallUnknownProps(unknownSigProps, DOMHelper.getFirstChildElement(topMostPropsElem)); if (!CollectionUtils.nullOrEmpty(unknownDataObjProps)) marshallUnknownProps(unknownDataObjProps, DOMHelper.getLastChildElement(topMostPropsElem)); }
private boolean propsNotAlreadyPresent(Node qualifyingPropsNode) { return null == DOMHelper.getFirstDescendant( (Element) qualifyingPropsNode, QualifyingProperty.XADES_XMLNS, propsElemName); }