/* * Copyright 2011 by Graz University of Technology, Austria * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint * initiative of the Federal Chancellery Austria and Graz University of Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ package at.gv.egiz.bku.slcommands.impl; import javax.xml.bind.JAXBElement; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.transform.Result; import javax.xml.transform.Templates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.DocumentFragment; import org.w3c.dom.Element; import org.w3c.dom.Node; import at.buergerkarte.namespaces.securitylayer._1_2_3.CreateXMLSignatureResponseType; import at.buergerkarte.namespaces.securitylayer._1_2_3.ObjectFactory; import at.gv.egiz.bku.slcommands.CreateXMLSignatureResult; import at.gv.egiz.bku.slcommands.SLMarshallerFactory; import at.gv.egiz.bku.slexceptions.SLRuntimeException; /** * This calls implements the result of the security layer command CreateXMLSignature. * * @author mcentner */ public class CreateXMLSignatureResultImpl extends SLResultImpl implements CreateXMLSignatureResult { /** * Logging facility. */ private final Logger log = LoggerFactory.getLogger(CreateXMLSignatureResultImpl.class); /** * The document containing the XMLSignature. */ protected Document doc; /** * The content of the CreateXMLSignatureResponse. */ protected Element content; /** * Creates a new instance of this CreateXMLSignatureResultImpl with the given * signature document. * * @param document the signature document * * @throws NullPointerException if document is null */ public CreateXMLSignatureResultImpl(Document document) { super(); if (document == null) { throw new NullPointerException("Argument 'document' must not be null."); } this.doc = document; this.content = document.getDocumentElement(); marshallCreateXMLSignatureResponse(); } /** * Marshalls the CreateXMLSignatureResponse. */ private void marshallCreateXMLSignatureResponse() { ObjectFactory factory = new ObjectFactory(); at.gv.egiz.slbinding.impl.CreateXMLSignatureResponseType createCreateXMLSignatureResponseType = factory.createCreateXMLSignatureResponseType(); JAXBElement createCreateXMLSignatureResponse = factory.createCreateXMLSignatureResponse(createCreateXMLSignatureResponseType); DocumentFragment fragment = doc.createDocumentFragment(); Marshaller marshaller = SLMarshallerFactory.getInstance().createMarshaller(false); try { marshaller.marshal(createCreateXMLSignatureResponse, fragment); } catch (JAXBException e) { log.error("Failed to marshall 'CreateXMLSignatureResponse'.", e); throw new SLRuntimeException(e); } Node child = fragment.getFirstChild(); if (child instanceof Element) { child.appendChild(doc.replaceChild(child, content)); } } @Override public void writeTo(Result result, Templates templates, boolean fragment) { writeTo(doc, result, templates, fragment); } @Override public Element getContent() { return content; } }