ParseExceptionUtils.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.message.exception;
- import org.openspcoop2.message.constants.MessageRole;
- import org.openspcoop2.utils.LimitExceededIOException;
- import org.openspcoop2.utils.LimitedInputStream;
- import org.openspcoop2.utils.TimeoutIOException;
- import org.openspcoop2.utils.TimeoutInputStream;
- import org.openspcoop2.utils.Utilities;
- import com.ctc.wstx.exc.WstxException;
- /**
- * ParseExceptionUtils
- *
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class ParseExceptionUtils {
-
- // Parse-Exception
-
- public static ParseException buildParseException(Throwable e, MessageRole messageRole){
-
- ParseException pe = new ParseException();
- pe.setSourceException(e, messageRole);
-
- if(e==null){
- pe.setParseException(new Exception("Occurs Parsing Error"), messageRole);
- pe.setSourceException(new Exception("Occurs Parsing Error"), messageRole);
- return pe;
- }
-
- if(TimeoutIOException.isTimeoutIOException(e) || Utilities.existsInnerMessageException(e, TimeoutInputStream.ERROR_MSG, true)) {
-
- Throwable timeoutException = null;
- if(e instanceof TimeoutIOException) {
- timeoutException = e;
- }
- else {
- timeoutException = Utilities.getInnerInstanceException(e, TimeoutIOException.class, false);
- }
- if(timeoutException==null && Utilities.existsInnerMessageException(e, TimeoutInputStream.ERROR_MSG, true)) {
- Throwable exceptionMessageTimeout = Utilities.getInnerMessageException(e, TimeoutInputStream.ERROR_MSG, true);
- if(exceptionMessageTimeout!=null) {
- timeoutException = new TimeoutIOException(exceptionMessageTimeout.getMessage(), exceptionMessageTimeout);
- }
- }
- if(timeoutException!=null) {
- pe.setParseException(timeoutException, messageRole);
- pe.setSourceException(timeoutException, messageRole);
- return pe;
- }
- }
-
- if(LimitExceededIOException.isLimitExceededIOException(e) ||
- Utilities.existsInnerMessageException(e, LimitedInputStream.ERROR_PAYLOAD_TOO_LARGE_MSG, true) ||
- Utilities.existsInnerMessageException(e, LimitedInputStream.ERROR_CONTENT_LENGTH_EXCEEDED_MSG, true)) {
-
- Throwable limitedException = null;
- if(e instanceof LimitExceededIOException) {
- limitedException = e;
- }
- else {
- limitedException = Utilities.getInnerInstanceException(e, LimitExceededIOException.class, false);
- }
- if(limitedException==null && Utilities.existsInnerMessageException(e, LimitedInputStream.ERROR_PAYLOAD_TOO_LARGE_MSG, true)) {
- Throwable exceptionMessageLimitExceeded = Utilities.getInnerMessageException(e, LimitedInputStream.ERROR_PAYLOAD_TOO_LARGE_MSG, true);
- if(exceptionMessageLimitExceeded!=null) {
- limitedException = new LimitExceededIOException(exceptionMessageLimitExceeded.getMessage(), exceptionMessageLimitExceeded);
- }
- }
- if(limitedException==null && Utilities.existsInnerMessageException(e, LimitedInputStream.ERROR_CONTENT_LENGTH_EXCEEDED_MSG, true)) {
- Throwable exceptionMessageLimitExceeded = Utilities.getInnerMessageException(e, LimitedInputStream.ERROR_CONTENT_LENGTH_EXCEEDED_MSG, true);
- if(exceptionMessageLimitExceeded!=null) {
- limitedException = new LimitExceededIOException(exceptionMessageLimitExceeded.getMessage(), exceptionMessageLimitExceeded);
- }
- }
- if(limitedException!=null) {
- pe.setParseException(limitedException, messageRole);
- pe.setSourceException(limitedException, messageRole);
- return pe;
- }
- }
-
- Throwable tmp = ParseExceptionUtils.getParseException(e);
- if(tmp!=null){
- pe.setParseException(tmp, messageRole);
- return pe;
- }
-
- pe.setParseException(getInnerNotEmptyMessageException(e), messageRole);
- return pe;
- }
-
- public static Throwable getParseException(Throwable e){
-
- // Prima verifico presenza di eccezioni che sicuramente non evidenziano problemi di parsing
- if(e instanceof java.net.SocketException){
- return null;
- }
- else if(Utilities.existsInnerException(e, java.net.SocketException.class)){
- return null;
- }
-
-
- // Cerco eccezione di parsing
-
- boolean found = false;
-
- Throwable tmp = null;
-
- if(tmp==null){
- if(Utilities.isExceptionInstanceOf("org.apache.axiom.om.OMException", e)){
- tmp = e;
- }
- else if(Utilities.existsInnerException(e, "org.apache.axiom.om.OMException")){
- tmp = Utilities.getInnerException(e, "org.apache.axiom.om.OMException");
- }
- if(tmp!=null){
- if( ! (tmp.getMessage()!=null && !"".equals(tmp.getMessage()) && !"null".equalsIgnoreCase(tmp.getMessage())) ){
- // cerco prossima eccezione, in questa c'è null come message
- tmp = null;
- found = true;
- }
- }
- }
-
- if(tmp==null){
- if(e instanceof WstxException){
- tmp = e;
- }
- else if(Utilities.existsInnerException(e, WstxException.class)){
- tmp = Utilities.getInnerException(e, WstxException.class);
- }
- if(tmp!=null){
- if( ! (tmp.getMessage()!=null && !"".equals(tmp.getMessage()) && !"null".equalsIgnoreCase(tmp.getMessage())) ){
- // cerco prossima eccezione, in questa c'è null come message
- tmp = null;
- found = true;
- }
- }
- }
-
- if(tmp==null){
- if(Utilities.isExceptionInstanceOf("com.ctc.wstx.exc.WstxIOException", e)){
- tmp = e;
- }
- else if(Utilities.existsInnerException(e, "com.ctc.wstx.exc.WstxIOException")){
- tmp = Utilities.getInnerException(e, "com.ctc.wstx.exc.WstxIOException");
- }
- if(tmp!=null){
- if( ! (tmp.getMessage()!=null && !"".equals(tmp.getMessage()) && !"null".equalsIgnoreCase(tmp.getMessage())) ){
- // cerco prossima eccezione, in questa c'è null come message
- tmp = null;
- found = true;
- }
- }
- }
-
- if(tmp==null){
- if(Utilities.isExceptionInstanceOf("com.ctc.wstx.exc.WstxParsingException", e)){
- tmp = e;
- }
- else if(Utilities.existsInnerException(e, "com.ctc.wstx.exc.WstxParsingException")){
- tmp = Utilities.getInnerException(e, "com.ctc.wstx.exc.WstxParsingException");
- }
- if(tmp!=null){
- if( ! (tmp.getMessage()!=null && !"".equals(tmp.getMessage()) && !"null".equalsIgnoreCase(tmp.getMessage())) ){
- // cerco prossima eccezione, in questa c'è null come message
- tmp = null;
- found = true;
- }
- }
- }
-
- if(tmp==null){
- if(Utilities.isExceptionInstanceOf("com.ctc.wstx.exc.WstxUnexpectedCharException", e)){
- tmp = e;
- }
- else if(Utilities.existsInnerException(e, "com.ctc.wstx.exc.WstxUnexpectedCharException")){
- tmp = Utilities.getInnerException(e, "com.ctc.wstx.exc.WstxUnexpectedCharException");
- }
- if(tmp!=null){
- if( ! (tmp.getMessage()!=null && !"".equals(tmp.getMessage()) && !"null".equalsIgnoreCase(tmp.getMessage())) ){
- // cerco prossima eccezione, in questa c'è null come message
- tmp = null;
- found = true;
- }
- }
- }
-
- if(tmp==null){
- if(Utilities.isExceptionInstanceOf("org.xml.sax.SAXParseException", e)){
- tmp = e;
- }
- else if(Utilities.existsInnerException(e, "org.xml.sax.SAXParseException")){
- tmp = Utilities.getInnerException(e, "org.xml.sax.SAXParseException");
- }
- if(tmp!=null){
- if( ! (tmp.getMessage()!=null && !"".equals(tmp.getMessage()) && !"null".equalsIgnoreCase(tmp.getMessage())) ){
- // cerco prossima eccezione, in questa c'è null come message
- tmp = null;
- found = true;
- }
- }
- }
-
- if(tmp==null){
- if(Utilities.isExceptionInstanceOf("javax.xml.stream.XMLStreamException", e)){
- tmp = e;
- }
- else if(Utilities.existsInnerException(e, "javax.xml.stream.XMLStreamException")){
- tmp = Utilities.getInnerException(e, "javax.xml.stream.XMLStreamException");
- }
- if(tmp!=null){
- if( ! (tmp.getMessage()!=null && !"".equals(tmp.getMessage()) && !"null".equalsIgnoreCase(tmp.getMessage())) ){
- // cerco prossima eccezione, in questa c'è null come message
- tmp = null;
- found = true;
- }
- }
- }
-
- if(tmp!=null){
- return tmp;
- }
- if(found){
- return getInnerNotEmptyMessageException(e);
- }
- return null;
-
- }
-
- public static boolean isEmpytMessageException(Throwable e){
- if(e.getMessage()==null ||
- "".equals(e.getMessage()) ||
- "null".equalsIgnoreCase(e.getMessage()) ||
- "com.ctc.wstx.exc.WstxIOException: null".equalsIgnoreCase(e.getMessage())){
- return true;
- }
- else{
- return false;
- }
- }
-
- public static Throwable getInnerNotEmptyMessageException(Throwable e){
- if(!isEmpytMessageException(e)){
- return e;
- }
-
- if(e.getCause()!=null){
- //System.out.println("INNER ["+e.getClass().getName()+"]...");
- return getInnerNotEmptyMessageException(e.getCause());
- }
- else{
- return e; // sono nella foglia, ritorno comunque questa eccezione
- }
- }
- }