Browse Source

feat: REPORT-111603【设计器性能】远程设计协议变更

优化异常处理的逻辑,尽量保持与正常的异常展示效果一致。
new-design^2
Harrison 11 months ago
parent
commit
72a45406d5
  1. 31
      designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java

31
designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java

@ -22,6 +22,7 @@ import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.file.ConnectionService;
import com.fr.license.exception.DataBaseNotSupportedException;
import com.fr.log.FineLoggerFactory;
import com.fr.rpc.ExceptionHandler;
import com.fr.rpc.RPCInvokerExceptionInfo;
@ -29,6 +30,8 @@ import com.fr.stable.ArrayUtils;
import com.fr.stable.EncodeConstants;
import com.fr.stable.StringUtils;
import com.fr.workspace.WorkContext;
import com.fr.workspace.rpc.exception.ServerInvokeException;
import org.jetbrains.annotations.NotNull;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
@ -475,7 +478,8 @@ public abstract class DatabaseConnectionPane<E extends com.fr.data.impl.Connecti
uiLabel.setIcon(UIManager.getIcon("OptionPane.errorIcon"));
message.setText(Toolkit.i18nText("Fine-Design_Basic_Connection_Failed"));
Connection database = DatabaseConnectionPane.this.updateBean();
SolutionProcessor select = ExceptionSolutionSelector.get().select(e, database);
Throwable throwable = catchThrowable(e);
SolutionProcessor select = ExceptionSolutionSelector.get().select(throwable, database);
String detail = select.getResultException().getDetailMessage();
String solution = select.getResultException().getSolution();
if (select instanceof ClassNotFoundExceptionSolutionProcessor) {
@ -486,6 +490,31 @@ public abstract class DatabaseConnectionPane<E extends com.fr.data.impl.Connecti
okButton.setEnabled(true);
}
/**
* 兼容一下 json 序列化后的异常逻辑如果发现是 {@link ServerInvokeException}
* 则尝试转化为对应的异常然后传递下去
* 否则还是返回原异常
*
* @param e 异常
* @return 异常
*/
@NotNull
private Throwable catchThrowable(ExecutionException e) {
Throwable rootEx = e;
while (rootEx.getCause() != null) {
rootEx = rootEx.getCause();
}
if (rootEx instanceof ServerInvokeException) {
// 异常兼容处理
String errorCode = ((ServerInvokeException) rootEx).getErrorCode();
if (DataBaseNotSupportedException.DB_UNSUPPORTED_ERROR_CODE.equals(errorCode)) {
return new DataBaseNotSupportedException(rootEx.getMessage());
}
}
return e;
}
private void showClassNotFoundUI(String detailMessage, String solution) {
JPanel gridJpanel = new JPanel();
gridJpanel.setLayout(new GridLayout(5, 1, 0, 5));

Loading…
Cancel
Save