
no.digipost.api.xml.Marshalling Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sdp-api-commons Show documentation
Show all versions of sdp-api-commons Show documentation
Felles kode for API-relatert funksjonalitet
/**
* Copyright (C) Posten Norge AS
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package no.digipost.api.xml;
import no.difi.begrep.sdp.schema_v10.SDPKvittering;
import org.etsi.uri._01903.v1_3.QualifyingProperties;
import org.etsi.uri._2918.v1_2.XAdESSignatures;
import org.oasis_open.docs.ebxml_bp.ebbp_signals_2.NonRepudiationInformation;
import org.oasis_open.docs.ebxml_msg.ebms.v3_0.ns.core._200704.Messaging;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.ws.WebServiceMessage;
import org.springframework.ws.soap.SoapBody;
import org.springframework.ws.soap.SoapHeader;
import org.springframework.ws.soap.SoapHeaderElement;
import org.springframework.ws.soap.SoapMessage;
import org.unece.cefact.namespaces.standardbusinessdocumentheader.StandardBusinessDocument;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.xmlsoap.schemas.soap.envelope.Envelope;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.util.JAXBSource;
import javax.xml.namespace.QName;
import javax.xml.transform.Result;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import static no.digipost.api.xml.Constants.MESSAGING_QNAME;
public class Marshalling {
private static class FullyInitializedMarshaller {
private static final Jaxb2Marshaller instance = createNewMarshaller();
static {
try {
instance.afterPropertiesSet();
} catch (Exception e) {
throw e instanceof RuntimeException ? (RuntimeException) e : new RuntimeException(e.getMessage(), e);
}
}
}
// Use when not spring managed
public static Jaxb2Marshaller getMarshallerSingleton() {
return FullyInitializedMarshaller.instance;
}
public static Jaxb2Marshaller createNewMarshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setPackagesToScan(
new String[]{
packageName(StandardBusinessDocument.class),
packageName(Envelope.class),
packageName(org.w3.soap.Envelope.class),
packageName(org.w3.xmldsig.Reference.class),
packageName(Messaging.class),
packageName(NonRepudiationInformation.class),
packageName(SDPKvittering.class),
packageName(XAdESSignatures.class),
packageName(QualifyingProperties.class)
}
);
marshaller.setSchemas(Schemas.allSchemaResources());
return marshaller;
}
private static String packageName(final Class> jaxbClass) {
return jaxbClass.getPackage().getName();
}
public static void marshal(final Jaxb2Marshaller jaxb2Marshaller, final SoapHeaderElement header, final QName qName, final Object element) {
marshal(jaxb2Marshaller, wrap(qName, element), header.getResult());
}
public static void marshal(final Jaxb2Marshaller jaxb2Marshaller, final SoapHeaderElement header, final Object element) {
marshal(jaxb2Marshaller, element, header.getResult());
}
public static void marshal(final Jaxb2Marshaller jaxb2Marshaller, final SoapBody body, final Object element) {
marshal(jaxb2Marshaller, element, body.getPayloadResult());
}
public static void marshal(final Jaxb2Marshaller jaxb2Marshaller, final Object element, final Result payloadResult) {
try {
JAXBSource jaxbSource = new JAXBSource(jaxb2Marshaller.getJaxbContext().createMarshaller(), element);
TransformerUtil.transform(jaxbSource, payloadResult);
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}
public static void marshal(final Document doc, final Result payloadResult) {
DOMSource source = new DOMSource(doc);
TransformerUtil.transform(source, payloadResult);
}
public static T unmarshal(final Jaxb2Marshaller jaxb2Marshaller, final Node node, final Class clazz) {
try {
JAXBElement jaxbElement = jaxb2Marshaller.getJaxbContext().createUnmarshaller().unmarshal(node, clazz);
return jaxbElement.getValue();
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}
public static T unmarshal(final Jaxb2Marshaller jaxb2Marshaller, final SoapHeaderElement header, final Class clazz) {
try {
JAXBElement jaxbElement = jaxb2Marshaller.getJaxbContext().createUnmarshaller().unmarshal(header.getSource(), clazz);
return jaxbElement.getValue();
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}
public static T unmarshal(final Jaxb2Marshaller jaxb2Marshaller, final SoapBody body, final Class clazz) {
try {
JAXBElement jaxbElement = jaxb2Marshaller.getJaxbContext().createUnmarshaller().unmarshal(body.getPayloadSource(), clazz);
return jaxbElement.getValue();
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}
public static T unmarshal(final Jaxb2Marshaller jaxb2Marshaller, final InputStream is, final Class clazz) {
try {
JAXBElement jaxbElement = jaxb2Marshaller.getJaxbContext().createUnmarshaller().unmarshal(new StreamSource(is), clazz);
return jaxbElement.getValue();
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
public static JAXBElement wrap(final QName qName, final T object) {
return new JAXBElement(qName, (Class) object.getClass(), object);
}
public static void trimNamespaces(final Document doc) {
NamedNodeMap attributes = doc.getDocumentElement().getAttributes();
List attrsToRemove = new ArrayList();
for (int i = 0; i < attributes.getLength(); i++) {
if (doc.getElementsByTagNameNS(attributes.item(i).getNodeValue(), "*").getLength() == 0) {
attrsToRemove.add((Attr) attributes.item(i));
}
}
for (Attr a : attrsToRemove) {
doc.getDocumentElement().removeAttributeNode(a);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy