ResponseCached.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 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.pdd.core.response_caching;
- import java.io.IOException;
- import java.io.Serializable;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import org.openspcoop2.message.AttachmentsProcessingMode;
- import org.openspcoop2.message.OpenSPCoop2Message;
- import org.openspcoop2.message.OpenSPCoop2MessageFactory;
- import org.openspcoop2.message.OpenSPCoop2MessageParseResult;
- import org.openspcoop2.message.constants.MessageRole;
- import org.openspcoop2.message.constants.MessageType;
- import org.openspcoop2.message.context.HeaderParameters;
- import org.openspcoop2.message.context.MessageContext;
- import org.openspcoop2.message.context.StringParameter;
- import org.openspcoop2.message.exception.MessageException;
- import org.openspcoop2.utils.Utilities;
- import org.openspcoop2.utils.UtilsException;
- import org.openspcoop2.utils.date.DateManager;
- import org.openspcoop2.utils.date.DateUtils;
- import org.openspcoop2.utils.io.notifier.NotifierInputStreamParams;
- /**
- * ResponseCached
- *
- * @author Poli Andrea (poli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class ResponseCached implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
-
- private String contentType;
- private byte[] message;
- private long messageLength;
- private byte[] context;
- private Date creazione;
- private Date scadenza;
- private String digest;
- private String uuid;
-
- public Date getCreazione() {
- return this.creazione;
- }
- public long getAgeInSeconds() {
- long now = DateManager.getTimeMillis();
- long creazione = this.creazione.getTime();
- long diff = now - creazione;
- return (diff / 1000l);
- }
- public void setCreazione(Date creazione) {
- this.creazione = creazione;
- }
- public Date getScadenza() {
- return this.scadenza;
- }
- public void setScadenza(Date scadenza) {
- this.scadenza = scadenza;
- }
- public String getContentType() {
- return this.contentType;
- }
- public void setContentType(String contentType) {
- this.contentType = contentType;
- }
- public byte[] getMessage() {
- return this.message;
- }
- public void setMessage(byte[] message) {
- this.message = message;
- }
- public long getMessageLength() {
- return this.messageLength;
- }
- public void setMessageLength(long messageLength) {
- this.messageLength = messageLength;
- }
- public byte[] getContext() {
- return this.context;
- }
- public void setContext(byte[] context) {
- this.context = context;
- }
- public String getUuid() {
- return this.uuid;
- }
- public void setUuid(String uuid) {
- this.uuid = uuid;
- }
- public String getDigest() {
- return this.digest;
- }
- public void setDigest(String digest) {
- this.digest = digest;
- }
-
- public String print() throws UtilsException {
- StringBuilder bf = new StringBuilder();
- bf.append("UUID: ").append(this.uuid).append("\n\n");
- bf.append("Digest: ").append(this.digest).append("\n\n");
- SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMs();
- String creazione = dateformat.format(this.creazione).replace('_','T');
- bf.append("Creazione: ").append(creazione).append("\n\n");
- String scadenza = dateformat.format(this.scadenza).replace('_','T');
- bf.append("Scadenza: ").append(scadenza).append("\n\n");
- bf.append("Età (secondi): ").append(this.getAgeInSeconds()).append("\n\n");
- bf.append("Content-Type: ").append(this.contentType).append("\n\n");
- bf.append("Content-Length: ").append(this.messageLength).append("\n\n");
- bf.append("Context: \n").append(new String(this.context)).append("\n\n");
- // 1024 = 1K
- // Visualizzo al massimo 20K
- int max = 20 * 1024;
- String message = Utilities.convertToPrintableText(this.message,max);
- bf.append("Messaggio: \n").append(message);
- return bf.toString();
- }
-
- public OpenSPCoop2Message toOpenSPCoop2Message(OpenSPCoop2MessageFactory messageFactory, AttachmentsProcessingMode attachmentProcessingMode, String headerCacheKey) throws Exception {
-
- // Lettura Message Context
- org.openspcoop2.message.context.utils.serializer.JaxbDeserializer jaxbDeserializer =
- new org.openspcoop2.message.context.utils.serializer.JaxbDeserializer();
- MessageContext msgContext = jaxbDeserializer.readMessageContext(this.context);
-
- if(msgContext.getMessageType()==null) {
- throw new MessageException("Message Type undefined in context serialized");
- }
- MessageType mt = MessageType.valueOf(msgContext.getMessageType());
- if(mt==null) {
- throw new MessageException("MessageType ["+msgContext.getMessageType()+"] unknown");
- }
-
- if(msgContext.getMessageRole()==null) {
- throw new MessageException("Message Role undefined in context serialized");
- }
- MessageRole mr = MessageRole.valueOf(msgContext.getMessageRole());
- if(mr==null) {
- throw new MessageException("MessageRole ["+msgContext.getMessageRole()+"] unknown");
- }
-
- if(headerCacheKey!=null && msgContext.getTransportResponseContext()!=null) {
- if(msgContext.getTransportResponseContext().getHeaderParameters()==null) {
- msgContext.getTransportResponseContext().setHeaderParameters(new HeaderParameters());
- }
- StringParameter headerParameter = new StringParameter();
- headerParameter.setNome(headerCacheKey);
- headerParameter.setBase(this.uuid);
- msgContext.getTransportResponseContext().getHeaderParameters().addHeaderParameter(headerParameter);
- }
-
- // CostruzioneMessaggio
- NotifierInputStreamParams notifierInputStreamParams = null;
- OpenSPCoop2MessageParseResult pr = null;
- pr = messageFactory.createMessage(mt,mr,this.contentType,
- this.message,notifierInputStreamParams,
- attachmentProcessingMode);
- OpenSPCoop2Message msg = pr.getMessage_throwParseException();
- msg.readResourcesFrom(msgContext);
- return msg;
- }
-
- public static ResponseCached toResponseCached(OpenSPCoop2Message msg, int seconds) throws MessageException, IOException {
- ResponseCached rCached = new ResponseCached();
-
- long now = DateManager.getTimeMillis();
- long ms = (((long)seconds)*1000l);
-
- Date creazione = new Date( now );
- rCached.setCreazione(creazione);
-
- Date scadenza = new Date( now + ms );
- rCached.setScadenza(scadenza);
-
- // Save bytes message
- java.io.ByteArrayOutputStream bout = new java.io.ByteArrayOutputStream();
- msg.writeTo(bout,false);
- bout.flush();
- bout.close();
- rCached.setMessage(bout.toByteArray());
- rCached.setMessageLength(bout.size());
-
- // Save message context
- bout = new java.io.ByteArrayOutputStream();
- msg.serializeResourcesTo(bout);
- bout.flush();
- bout.close();
- rCached.setContext(bout.toByteArray());
-
- rCached.setContentType(msg.getContentType());
-
- return rCached;
- }
- }