Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-30366

[8.1.0.GA] - [GSS](8.0.z) Json processing failed with error java.lang.UnsupportedOperationException at java.sql/java.sql.Date.toInstant

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: Major Major
    • None
    • 8.0 Update 7
    • REST
    • None
    • False
    • Hide

      None

      Show
      None
    • False

      The json processing fails serializing an entity running on JBoss eap 8 but the same code works fine on JBoss eap 7.4.

      Here is an example of the stack trace:

      Caused by: jakarta.json.bind.JsonbException: Unable to serialize property 'codeIngotToken' from org.jboss.as.quickstarts.kitchensink.model.ValIngot
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.ObjectSerializer.lambda$serialize$0(ObjectSerializer.java:43)
      at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.ObjectSerializer.serialize(ObjectSerializer.java:38)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.RecursionChecker.serialize(RecursionChecker.java:38)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.KeyWriter.serialize(KeyWriter.java:41)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.NullVisibilitySwitcher.serialize(NullVisibilitySwitcher.java:40)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.NullSerializer.serialize(NullSerializer.java:67)
      at org.eclipse.yasson//org.eclipse.yasson.internal.SerializationContextImpl.serializeObject(SerializationContextImpl.java:197)
      at org.eclipse.yasson//org.eclipse.yasson.internal.SerializationContextImpl.marshall(SerializationContextImpl.java:133)
      at org.eclipse.yasson//org.eclipse.yasson.internal.SerializationContextImpl.marshall(SerializationContextImpl.java:159)
      at org.eclipse.yasson//org.eclipse.yasson.internal.JsonBinding.toJson(JsonBinding.java:131)
      at deployment.kitchensink.war//org.jboss.as.quickstarts.kitchensink.service.SesnEJB.generateIngotNoRelationshipJson(SesnEJB.java:60)
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.base/java.lang.reflect.Method.invoke(Method.java:566)
      at org.jboss.as.ee@8.0.9.GA-redhat-00004//org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
      at org.jboss.as.weld.common@8.0.9.GA-redhat-00004//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.delegateInterception(Jsr299BindingsInterceptor.java:79)
      at org.jboss.as.weld.common@8.0.9.GA-redhat-00004//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:89)
      at org.jboss.as.weld.common@8.0.9.GA-redhat-00004//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:102)
      at org.jboss.as.ee@8.0.9.GA-redhat-00004//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
      at org.jboss.as.ejb3@8.0.9.GA-redhat-00004//org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
      at org.jboss.as.jpa@8.0.9.GA-redhat-00004//org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
      at org.jboss.as.ee@8.0.9.GA-redhat-00004//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:40)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
      at org.jboss.as.ee@8.0.9.GA-redhat-00004//org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
      at org.jboss.as.ejb3@8.0.9.GA-redhat-00004//org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
      at org.jboss.as.ejb3@8.0.9.GA-redhat-00004//org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:56)
      at org.jboss.invocation@2.0.0.Final-redhat-00001//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
      at org.jboss.as.ejb3@8.0.9.GA-redhat-00004//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:254)
      ... 140 more
      Suppressed: jakarta.json.stream.JsonGenerationException: Generating incomplete JSON
      at org.eclipse.parsson//org.eclipse.parsson.JsonGeneratorImpl.close(JsonGeneratorImpl.java:521)
      at org.eclipse.yasson//org.eclipse.yasson.internal.JsonBinding.toJson(JsonBinding.java:130)
      ... 169 more
      Caused by: java.lang.UnsupportedOperationException
      at java.sql/java.sql.Date.toInstant(Date.java:316)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.types.DateSerializer.toInstant(DateSerializer.java:36)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.types.DateSerializer.toTemporalAccessor(DateSerializer.java:56)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.types.DateSerializer.formatWithFormatter(DateSerializer.java:46)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.types.DateSerializer.formatWithFormatter(DateSerializer.java:26)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.types.AbstractDateSerializer.lambda$valueSerializer$3(AbstractDateSerializer.java:63)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.types.AbstractDateSerializer.lambda$new$1(AbstractDateSerializer.java:51)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.types.AbstractDateSerializer.serializeValue(AbstractDateSerializer.java:147)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.types.TypeSerializer$ValueSerializer.serialize(TypeSerializer.java:51)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.types.TypeSerializer.serialize(TypeSerializer.java:37)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.KeyWriter.serialize(KeyWriter.java:41)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.NullSerializer.serialize(NullSerializer.java:67)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.ValueGetterSerializer.serialize(ValueGetterSerializer.java:43)
      at org.eclipse.yasson//org.eclipse.yasson.internal.serializer.ObjectSerializer.lambda$serialize$0(ObjectSerializer.java:41)
      ... 179 more

      The "codeIngotToken" property is a java.util.Date marked with @Temporal(TemporalType.DATE):

      @Temporal(TemporalType.DATE)
      private Date codeIngotToken;

      The entity is retrieved from sql query. As a result, the property is automatically assigned with java.sql.Date type:
      ***************************************
      @NamedQueries(

      { @NamedQuery(name = "EntIngot.findBySerial", query = "select distinct object(i) from EntIngot i where i.numberSerial = ?1"), }

      )

      EntIngot entIngot = findBySerial(numberSerial);
      //the entIngot.getCodeIngotToken() returns type java.sql.Date
      ****************************************

      The jsonb processing is triggered by the code, for example:

       

      EntIngot entIngot = findBySerial(numberSerial);
      Jsonb jsonb = JsonbBuilder.create();
      jsonb.toJson(entIngot);
      

      The jsonb processing handles the java.util.Date differently in eap 7.4 (eclipse yassson 1.0.5) and 8.0 (eclipse yasson 3.0.4)

      The current implementation that doesn't work: [1]

      @Override
      protected Instant toInstant(Date value) {
        return value.toInstant();
      }
      

      The old implementation that works: [2]

      @Override
      protected Instant toInstant(Date value) {
        return Instant.ofEpochMilli(value.getTime());
      }

      The proposed change:

       

      @Override
      protected Instant toInstant(Date value) {
        if (value instanceof java.sql.Date){ 
           return Instant.ofEpochMilli(value.getTime());
         }
         else {
           return value.toInstant(value);
         }
      }
      

      [1] https://github.com/eclipse-ee4j/yasson/blob/3.0.4/src/main/java/org/eclipse/yasson/internal/serializer/types/DateSerializer.java#L34-L37
      [2] https://github.com/eclipse-ee4j/yasson/blob/1.0.5-RELEASE/src/main/java/org/eclipse/yasson/internal/serializer/AbstractDateTypeSerializer.java#L39-L42

              lvydra Lukas Vydra
              rhn-support-ghu Gary Hu
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved: