簡體   English   中英

運行時 ClassCastException 的奇怪行為

[英]Strange behaviour with ClassCastException at runtime

我正在使用 Mapstruct 將一個 POJO 映射到另一個 POJO 模型

以下是mapstruct自動生成的方法

        protected Map<String, GenericAttributeData> headerAttributeGenericDataTypeMapToStringGenericAttributeDataMap(Map<HeaderAttribute, GenericDataType> map) {
        if ( map == null ) {
            return null;
        }

        Map<String, GenericAttributeData> map1 = new HashMap<String, GenericAttributeData>( Math.max( (int) ( map.size() / .75f ) + 1, 16 ) );

        for ( java.util.Map.Entry<HeaderAttribute, GenericDataType> entry : map.entrySet() ) {
            String key = entry.getKey().name(); // THIS IS THE LINE WHERE I GET EXCEPTION
            GenericAttributeData value = genericDataTypeToGenericAttributeData( entry.getValue() );
            map1.put( key, value );
        }

        return map1;
    }

    protected GenericAttributeData genericDataTypeToGenericAttributeData(GenericDataType genericDataType) {
        if ( genericDataType == null ) {
            return null;
        }

        GenericAttributeData genericAttributeData = new GenericAttributeData();

        if ( genericDataType.getType() != null ) {
            genericAttributeData.setType( genericDataType.getType().name() );
        }
        genericAttributeData.setValue( genericDataType.getValue() );

        return genericAttributeData;
    }

該方法基本上采用源 POJO 的 Map 並將它們轉換為目標模型的 Map。 構建正在通過。

當我運行代碼時,我在這個方法中得到了 ClassCast 異常: headerAttributeGenericDataTypeMapToStringGenericAttributeDataMap

堆棧跟蹤:


23 Jun 2022 09:34:46,218 ^[[1;31m[ERROR]^[[m dd6af157-4089-4b37-aa9b-225ed4b4394b (Bobcat-0) com.service.myActivity: class java.lang.String cannot be cast to class com.service.dao.dynamodb.entity.header.HeaderAttribute (java.lang.String is in module java.base of loader 'bootstrap'; com.service.dao.dynamodb.entity.header.HeaderAttribute is in unnamed module of loader com.company.cloud9.launcher.BootstrapClassLoader @75bd9247)
java.lang.ClassCastException: class java.lang.String cannot be cast to class com.service.dao.dynamodb.entity.header.HeaderAttribute (java.lang.String is in module java.base of loader 'bootstrap'; com.service.dao.dynamodb.entity.header.HeaderAttribute is in unnamed module of loader com.company.cloud9.launcher.BootstrapClassLoader @75bd9247)
        at com.service.adapters.mapper.InvoiceHeaderDoMapperImpl.headerAttributeGenericDataTypeMapToStringGenericAttributeDataMap(InvoiceHeaderDoMapperImpl.java:187) ~[myService-1.0.jar:?]
        at com.service.adapters.mapper.InvoiceHeaderDoMapperImpl.mapDOToInvoiceHeader(InvoiceHeaderDoMapperImpl.java:46) ~[myService-1.0.jar:?]
        at com.service.adapters.impl.InvoiceHeaderAdapterImpl.adaptDBInvoiceHeaderToCoralModel(InvoiceHeaderAdapterImpl.java:29) ~[myService-1.0.jar:?]
        at com.service.handler.SubmitAdditionalLinesHandler.buildInventoryInvoiceFromStagingDb(SubmitAdditionalLinesHandler.java:129) ~[myService-1.0.jar:?]
        at com.service.handler.SubmitAdditionalLinesHandler.handleAdditionalLineItemsSubmissionRequest(SubmitAdditionalLinesHandler.java:83) ~[myService-1.0.jar:?]
        at com.service.component.SubmitAdditionalLinesComponent.submitAdditionalLines(SubmitAdditionalLinesComponent.java:30) ~[myService-1.0.jar:?]
        at com.service.service.SubmitInvoiceActivity.submitAdditionalLines_aroundBody2(SubmitInvoiceActivity.java:84) ~[myService-1.0.jar:?]
        at com.service.service.SubmitInvoiceActivity$AjcClosure3.run(SubmitInvoiceActivity.java:1) ~[myService-1.0.jar:?]
        at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:167) ~[aspectjweaver-1.9.6.jar:?]
        at com.company.metrics.declarative.aspectj.JoinpointInvocationHandle.proceed(JoinpointInvocationHandle.java:60) ~[DeclarativeCoralMetricsAspectJ-2.2.jar:?]
        at com.company.metrics.declarative.AbstractMethodMetricInterceptor.handleInvocation(AbstractMethodMetricInterceptor.java:283) ~[DeclarativeCoralMetrics-2.2.jar:?]
        at com.company.metrics.declarative.aspectj.MetricMethodAspect$ConfiguredMethodAspect.invoke(MetricMethodAspect.java:108) ~[DeclarativeCoralMetricsAspectJ-2.2.jar:?]
        at com.company.metrics.declarative.aspectj.MetricMethodAspect.captureMethodMetrics(MetricMethodAspect.java:59) ~[DeclarativeCoralMetricsAspectJ-2.2.jar:?]
        at com.service.service.SubmitInvoiceActivity.submitAdditionalLines(SubmitInvoiceActivity.java:82) ~[myService-1.0.jar:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
        at com.company.coral.reflect.invoke.ReflectiveInvokerFactory$1.invoke(ReflectiveInvokerFactory.java:77) ~[CoralReflect-1.1.jar:?]
        at com.company.coralx.exception.ExceptionTranslationInterceptor.intercept(ExceptionTranslationInterceptor.java:213) ~[companyCoralExceptionTranslation-1.1.jar:?]
        at com.company.coral.reflect.invoke.InterceptedInvoker.invoke(InterceptedInvoker.java:74) ~[CoralReflect-1.1.jar:?]
        at com.company.coral.validate.ValidationInterceptor.intercept(ValidationInterceptor.java:106) ~[CoralValidate-1.1.jar:?]
        at com.company.coral.reflect.invoke.InterceptedInvoker.invoke(InterceptedInvoker.java:74) ~[CoralReflect-1.1.jar:?]
        at com.company.coral.service.DefaultActivityInvoker.invoke(DefaultActivityInvoker.java:29) ~[CoralActivity-1.1.jar:?]
        at com.company.coral.service.ContinuationActivityInvokerFactory$1.invoke(ContinuationActivityInvokerFactory.java:89) ~[CoralActivity-1.1.jar:?]
        at com.company.coral.service.ActivityInterceptors.invoke(ActivityInterceptors.java:74) ~[CoralActivity-1.1.jar:?]
        at com.company.coral.service.ActivityHandler.invoke(ActivityHandler.java:186) ~[CoralActivity-1.1.jar:?]
        at com.company.coral.service.ActivityHandler.before(ActivityHandler.java:145) ~[CoralActivity-1.1.jar:?]
        at com.company.coral.service.TransmutingContinuationHandler.before(TransmutingContinuationHandler.java:50) ~[CoralOrchestrator-1.1.jar:?]
        at com.company.coral.service.Chain.componentBefore(Chain.java:94) ~[CoralOrchestrator-1.1.jar:?]
        at com.company.coral.service.Chain.before(Chain.java:72) ~[CoralOrchestrator-1.1.jar:?]
        at com.company.coral.service.helper.ChainHelper.before(ChainHelper.java:94) ~[CoralOrchestrator-1.1.jar:?]
        at com.company.coral.service.AbstractOrchestrator.doWork(AbstractOrchestrator.java:84) ~[CoralOrchestrator-1.1.jar:?]
        at com.company.coral.service.PassiveOrchestrator.enqueue(PassiveOrchestrator.java:93) ~[CoralOrchestrator-1.1.jar:?]
        at com.company.coral.service.GracefulShutdownOrchestrator.enqueue(GracefulShutdownOrchestrator.java:301) ~[CoralOrchestrator-1.1.jar:?]
        at com.company.coral.service.helper.OrchestratorHelper.enqueue(OrchestratorHelper.java:72) ~[CoralOrchestrator-1.1.jar:?]
        at com.company.coral.bobcat.CoralServletRequestHandler.processRequestOrThrow(CoralServletRequestHandler.java:172) ~[Bobcat-3.0.jar:?]
        at com.company.coral.bobcat.CoralServletRequestHandler.processRequest(CoralServletRequestHandler.java:150) ~[Bobcat-3.0.jar:?]
        at com.company.coral.bobcat.CoralServletRequestHandler.service(CoralServletRequestHandler.java:115) ~[Bobcat-3.0.jar:?]

我還嘗試打印此方法的值,它們看起來不錯。 我還嘗試添加調試斷點,這些值似乎還可以。

有人可以在這里幫忙嗎?

它可能與你的相位有關。 也許某些方面替換了地圖中的值,因此它返回了錯誤類型的值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM