SPCoopTracciaSerializer.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.protocol.spcoop.tracciamento;
import java.io.ByteArrayOutputStream;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPHeaderElement;
import org.openspcoop2.message.OpenSPCoop2MessageFactory;
import org.openspcoop2.message.constants.MessageType;
import org.openspcoop2.message.soap.SoapUtils;
import org.openspcoop2.protocol.basic.tracciamento.TracciaSerializer;
import org.openspcoop2.protocol.sdk.Busta;
import org.openspcoop2.protocol.sdk.BustaRawContent;
import org.openspcoop2.protocol.sdk.IProtocolFactory;
import org.openspcoop2.protocol.sdk.ProtocolException;
import org.openspcoop2.protocol.sdk.constants.TipoSerializzazione;
import org.openspcoop2.protocol.sdk.tracciamento.ITracciaSerializer;
import org.openspcoop2.protocol.sdk.tracciamento.Traccia;
import org.openspcoop2.protocol.spcoop.SPCoopBustaRawContent;
import org.openspcoop2.protocol.spcoop.builder.SPCoopImbustamento;
/**
* Classe che implementa, in base al protocollo SPCoop, l'interfaccia {@link org.openspcoop2.protocol.sdk.tracciamento.ITracciaSerializer}
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class SPCoopTracciaSerializer extends TracciaSerializer implements ITracciaSerializer {
private SPCoopImbustamento imbustamento = null;
public SPCoopTracciaSerializer(IProtocolFactory<SOAPHeaderElement> factory) throws ProtocolException{
super(factory);
this.imbustamento = new SPCoopImbustamento(factory,null);
}
@Override
public SOAPElement toElement(Traccia tracciaObject)
throws ProtocolException {
try{
SOAPFactory sf = SoapUtils.getSoapFactory(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), MessageType.SOAP_11);
SOAPElement traccia = sf.createElement("traccia","eGov_IT_Trac","http://www.cnipa.it/schemas/2003/eGovIT/Tracciamento1_0/");
SOAPElement GDO = traccia.addChildElement("GDO","eGov_IT_Trac","http://www.cnipa.it/schemas/2003/eGovIT/Tracciamento1_0/");
if(tracciaObject.getGdo()==null){
GDO.setValue(this.protocolFactory.createTraduttore().getDate_protocolFormat());
}else{
GDO.setValue(this.protocolFactory.createTraduttore().getDate_protocolFormat(tracciaObject.getGdo()));
}
SOAPElement IdentificativoPorta = traccia.addChildElement("IdentificativoPorta","eGov_IT_Trac","http://www.cnipa.it/schemas/2003/eGovIT/Tracciamento1_0/");
IdentificativoPorta.setValue(tracciaObject.getIdSoggetto().getCodicePorta());
SOAPElement TipoMessaggio = traccia.addChildElement("TipoMessaggio","eGov_IT_Trac","http://www.cnipa.it/schemas/2003/eGovIT/Tracciamento1_0/");
TipoMessaggio.setValue(tracciaObject.getTipoMessaggio().toString());
SOAPElement hdrEGov = null;
Busta busta = tracciaObject.getBusta();
BustaRawContent<?> bustaInDom = tracciaObject.getBustaAsRawContent();
String bustaAsString = tracciaObject.getBustaAsString();
byte[] bustaInByte = tracciaObject.getBustaAsByteArray();
if(bustaInDom!=null){
// Tracciamento dall'oggetto dom
hdrEGov = ((SPCoopBustaRawContent) bustaInDom).getElement();
}else if(bustaAsString != null) {
// Tracciamento dai byte di una Busta
hdrEGov = OpenSPCoop2MessageFactory.createSOAPElement(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),MessageType.SOAP_11,bustaAsString.getBytes());
}else if(bustaInByte != null) {
// Tracciamento dai byte di una Busta
hdrEGov = OpenSPCoop2MessageFactory.createSOAPElement(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),MessageType.SOAP_11,bustaInByte);
}else if(busta!=null){
// Tracciamento dall'oggetto Busta
hdrEGov = this.imbustamento.build_eGovHeader(null, busta, false, true);
}
else{
throw new NullPointerException("Busta non fornita in alcun modo");
}
if(hdrEGov == null){
throw new ProtocolException("XMLBuilder.buildElement_Tracciamento fallito");
}
traccia.addChildElement(hdrEGov);
return traccia;
} catch(Exception e) {
this.log.error("TracciaSerializer.toElement error: "+e.getMessage(),e);
throw new ProtocolException("TracciaSerializer.toElement error: "+e.getMessage(),e);
}
}
@Override
protected ByteArrayOutputStream toByteArrayOutputStream(Traccia traccia, TipoSerializzazione tipoSerializzazione) throws ProtocolException {
try{
switch (tipoSerializzazione) {
case XML:
case DEFAULT:
ByteArrayOutputStream bout = new ByteArrayOutputStream();
bout.write(org.openspcoop2.message.xml.MessageXMLUtils.DEFAULT.toByteArray(this.toElement(traccia)));
bout.flush();
bout.close();
return bout;
default:
throw new Exception("Tipo Serializzazione ["+tipoSerializzazione+"] Non gestito");
}
} catch(Exception e) {
this.log.error("DiagnosticSerializer.toString error: "+e.getMessage(),e);
throw new ProtocolException("DiagnosticSerializer.toString error: "+e.getMessage(),e);
}
}
}