Skip to content

Commit

Permalink
[GovWayCore, ProtocolloSDI]
Browse files Browse the repository at this point in the history
Riportata nuova gestione degli errori anche sul servizio 'out/xml2soap' utilizzato dal profilo di interoperabilità della Fatturazione Elettronica.
  • Loading branch information
andreapoli committed Jun 29, 2020
1 parent 2ccbc60 commit da1913e
Show file tree
Hide file tree
Showing 9 changed files with 115 additions and 43 deletions.
2 changes: 1 addition & 1 deletion ChangeLog
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
2020-06-29 Andrea Poli <[email protected]>
2020-06-30 Andrea Poli <[email protected]>

* Rilasciata versione 3.3.1

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ public interface ConnectorOutMessage {

public void sendResponse(OpenSPCoop2Message message, boolean consume) throws ConnectorException;

public void sendResponse(byte[] message) throws ConnectorException;
public void sendResponse(byte[] message) throws ConnectorException;
public void sendResponseHeaders(OpenSPCoop2Message message) throws ConnectorException;

public void setHeader(String key,String value) throws ConnectorException;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,14 @@ public void sendResponse(byte[] message) throws ConnectorException{
this.messageAsBytes = message;
}

private OpenSPCoop2Message responseHeaderMessage;
public OpenSPCoop2Message getResponseHeaderMessage() {
return this.responseHeaderMessage;
}
@Override
public void sendResponseHeaders(OpenSPCoop2Message message) throws ConnectorException{
this.responseHeaderMessage = message;
}

private Map<String, String> headers = new Hashtable<String, String>();
public String getHeader(String key) throws ConnectorException{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,27 +113,32 @@ public Integer getStatus() {
return this.status;
}

private void _sendHeaders(OpenSPCoop2Message message) throws Exception {
// Eventuali header http propagati
OpenSPCoop2MessageProperties forwardHeader = null;
if(ServiceBinding.REST.equals(message.getServiceBinding())) {
forwardHeader = message.getForwardTransportHeader(this.openspcoopProperties.getRESTServicesHeadersForwardConfig(false));
}
else {
forwardHeader = message.getForwardTransportHeader(this.openspcoopProperties.getSOAPServicesHeadersForwardConfig(false));
}
if(forwardHeader!=null && forwardHeader.size()>0){
Iterator<String> keys = forwardHeader.getKeys();
while (keys.hasNext()) {
String key = (String) keys.next();
String value = forwardHeader.getProperty(key);
this.setHeader(key, value);
}
}
}

@Override
public void sendResponse(OpenSPCoop2Message message, boolean consume)
throws ConnectorException {

try{
// Eventuali header http propagati
OpenSPCoop2MessageProperties forwardHeader = null;
if(ServiceBinding.REST.equals(message.getServiceBinding())) {
forwardHeader = message.getForwardTransportHeader(this.openspcoopProperties.getRESTServicesHeadersForwardConfig(false));
}
else {
forwardHeader = message.getForwardTransportHeader(this.openspcoopProperties.getSOAPServicesHeadersForwardConfig(false));
}
if(forwardHeader!=null && forwardHeader.size()>0){
Iterator<String> keys = forwardHeader.getKeys();
while (keys.hasNext()) {
String key = (String) keys.next();
String value = forwardHeader.getProperty(key);
this.setHeader(key, value);
}
}
// Propago eventuali header http
this._sendHeaders(message);

// Prima lo registro e dopo serializzo
if(this.bout!=null){
Expand Down Expand Up @@ -211,6 +216,16 @@ public void sendResponse(byte[] message) throws ConnectorException {
// wrapped method
this.connectorOutMessage.sendResponse(message);
}

@Override
public void sendResponseHeaders(OpenSPCoop2Message message) throws ConnectorException{
try{
// Propago eventuali header http
this._sendHeaders(message);
}catch(Exception e){
throw new ConnectorException(e.getMessage(),e);
}
}

@Override
public void setHeader(String key, String value) throws ConnectorException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,25 +69,30 @@ public HttpServletConnectorOutMessage(IProtocolFactory<?> protocolFactory, HttpS
}
}

private void _sendHeaders(OpenSPCoop2Message msg) throws Exception {
// Propago eventuali header http
OpenSPCoop2MessageProperties forwardHeader = null;
if(ServiceBinding.REST.equals(msg.getServiceBinding())) {
forwardHeader = msg.getForwardTransportHeader(this.openspcoopProperties.getRESTServicesHeadersForwardConfig(false));
}
else {
forwardHeader = msg.getForwardTransportHeader(this.openspcoopProperties.getSOAPServicesHeadersForwardConfig(false));
}
if(forwardHeader!=null && forwardHeader.size()>0){
Iterator<String> keys = forwardHeader.getKeys();
while (keys.hasNext()) {
String key = (String) keys.next();
String value = forwardHeader.getProperty(key);
this.setHeader(key, value);
}
}
}

@Override
public void sendResponse(OpenSPCoop2Message msg, boolean consume) throws ConnectorException {
try{
// Propago eventuali header http
OpenSPCoop2MessageProperties forwardHeader = null;
if(ServiceBinding.REST.equals(msg.getServiceBinding())) {
forwardHeader = msg.getForwardTransportHeader(this.openspcoopProperties.getRESTServicesHeadersForwardConfig(false));
}
else {
forwardHeader = msg.getForwardTransportHeader(this.openspcoopProperties.getSOAPServicesHeadersForwardConfig(false));
}
if(forwardHeader!=null && forwardHeader.size()>0){
Iterator<String> keys = forwardHeader.getKeys();
while (keys.hasNext()) {
String key = (String) keys.next();
String value = forwardHeader.getProperty(key);
this.setHeader(key, value);
}
}
this._sendHeaders(msg);

// il save e' necessario con i connettori directVM in caso di errori di validazione
if(msg!=null && ServiceBinding.SOAP.equals(msg.getServiceBinding())){
Expand All @@ -111,6 +116,16 @@ public void sendResponse(byte[] message) throws ConnectorException{
}
}

@Override
public void sendResponseHeaders(OpenSPCoop2Message message) throws ConnectorException{
try{
// Propago eventuali header http
this._sendHeaders(message);
}catch(Exception e){
throw new ConnectorException(e.getMessage(),e);
}
}

@Override
public void setHeader(String key,String value) throws ConnectorException{
try{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ public void process(ConnectorInMessage req, ConnectorOutMessage res) throws Conn
if(this.generatoreErrore==null){
this.generatoreErrore =
new RicezioneContenutiApplicativiInternalErrorGenerator(logCore, RicezioneContenutiApplicativiHTTPtoSOAPConnector.ID_MODULO, requestInfo);
this.generatoreErrore.getProprietaErroreAppl().setFaultAsXML(true); // siamo in una richiesta http senza SOAP, un SoapFault non ha senso
}
}catch(Exception e){
String msg = "Inizializzazione Generatore Errore fallita: "+Utilities.readFirstErrorValidMessageFromException(e);
Expand Down Expand Up @@ -826,7 +827,7 @@ else if(req instanceof DumpRawConnectorOutMessage){
}
}
}

// transfer length
if(risposta!=null){
lengthOutResponse = risposta.length;
Expand All @@ -848,6 +849,9 @@ else if(req instanceof DumpRawConnectorOutMessage){
responseMessage, context.getProprietaErroreAppl(),informazioniErrori,
(pddContext!=null ? pddContext.getContext() : null));

// httpHeaders
res.sendResponseHeaders(responseMessage);

// contenuto
if(risposta!=null){
res.sendResponse(risposta);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -870,6 +870,22 @@ else if(o instanceof Boolean) {
// 1) Il Messagge Type XML o JSON DEVE ESSERE CAPITO PRIMA
// 2) In questo momento deve arrivare la configurazione del RFC PROBLEM

// FIX: in caso di XML devo restituire un errore 'XML'

// PROPRIETA ERRORE APPLICATIVO
ProprietaErroreApplicativo proprieta = null;
if(eccezioneIntegrazione!=null){
proprieta = eccezioneIntegrazione.getProprieta();
}else{
proprieta = eccezioneProtocollo.getProprieta();
}

if(proprieta!=null &&
proprieta.isFaultAsXML()){
messageType = MessageType.XML;
returnConfig.setHttpReturnCode(returnConfig.getGovwayReturnCode());
}

switch (messageType) {

case XML:
Expand Down Expand Up @@ -907,15 +923,7 @@ else if(o instanceof Boolean) {
return msg;

default:

// PROPRIETA ERRORE APPLICATIVO
ProprietaErroreApplicativo proprieta = null;
if(eccezioneIntegrazione!=null){
proprieta = eccezioneIntegrazione.getProprieta();
}else{
proprieta = eccezioneProtocollo.getProprieta();
}


// PERSONALIZZAZIONE MESSAGGI
String codiceEccezione = null;
String posizioneEccezione = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,15 @@ public void sendResponse(byte[] message) throws ConnectorException{
this.messageAsBytes = message;
}

private OpenSPCoop2Message responseHeaderMessage;
public OpenSPCoop2Message getResponseHeaderMessage() {
return this.responseHeaderMessage;
}
@Override
public void sendResponseHeaders(OpenSPCoop2Message message) throws ConnectorException{
this.responseHeaderMessage = message;
}


private Map<String, String> headers = new Hashtable<String, String>();
public String getHeader(String key) throws ConnectorException{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,12 @@ else if(SDICostantiServizioRicezioneFatture.RICEZIONE_SERVIZIO_RICEZIONE_FATTURE
throw new ProtocolException("Servizio["+busta.getServizio()+"] con Azione["+busta.getAzione()+"] non gestita dal protocollo durante la fase di richiesta");
}
}
else if(SDICostantiServizioRiceviFile.SDI_SERVIZIO_RICEVI_FILE.equals(busta.getServizio())){
buildInfo = false;
}
else if(SDICostantiServizioRiceviNotifica.SDI_SERVIZIO_RICEVI_NOTIFICA.equals(busta.getServizio())){
buildInfo = false;
}
else{
boolean whiteList = false;
if(busta.getServizio()!=null && this.sdiProperties.getServiziWhiteList().contains(busta.getServizio())){
Expand All @@ -233,6 +239,12 @@ else if(SDICostantiServizioRiceviNotifica.SDI_SERVIZIO_RICEVI_NOTIFICA.equals(bu
&& SDICostantiServizioRiceviNotifica.SDI_SERVIZIO_NOTIFICA_ESITO_AZIONE_NOTIFICA_ESITO.equals(busta.getAzione())){
buildInfo = true;
}
else if(SDICostantiServizioTrasmissioneFatture.TRASMISSIONE_SERVIZIO_TRASMISSIONE_FATTURE.equals(busta.getServizio())){
buildInfo = false;
}
else if(SDICostantiServizioRicezioneFatture.RICEZIONE_SERVIZIO_RICEZIONE_FATTURE.equals(busta.getServizio())){
buildInfo = false;
}
else{
boolean whiteList = false;
if(busta.getServizio()!=null && this.sdiProperties.getServiziWhiteList().contains(busta.getServizio())){
Expand Down

0 comments on commit da1913e

Please sign in to comment.