I am working on moving much of the typeCalc logic to compile time (notably for 
this email, I am moving much of the error detection to compile time).


To avoid circular depdencies, I am trying to use the same pass-by-name trick we 
use for the runtime data structures:


class ExpressionTypeCalculator[A <: AnyRef, B <: AnyRef](

  @TransientParam maybeInputTypeCalcArg: => Maybe[ CompiledExpression[B]],

  ...

) extends TypeCalculator

//TypeCalculator extends PreSerialization

  lazy val maybeInputTypeCalc = maybeInputTypeCalcArg

  override protected def preSerialization: Any = {
    super.preSerialization
    maybeInputTypeCalc
    maybeOutputTypeCalc
  }


This works in the Common case. In some error cases, it is now possible that the 
DPath expression compiler will detect an error and emit an SDE.


When this happens, I would expect to see an SDE; however the SDE appears to be 
getting eaten by the serialization code. I assume that I am missing a step in 
how I am saving/computing these values.


java.io.IOException: unexpected exception type
at java.io.ObjectStreamClass.throwMiscException(ObjectStreamClass.java:1736)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1146)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at 
scala.collection.immutable.HashMap$SerializationProxy.$anonfun$writeObject$2(HashMap.scala:609)
at 
scala.collection.immutable.HashMap$SerializationProxy.$anonfun$writeObject$2$adapted(HashMap.scala:607)
at 
scala.collection.TraversableLike$WithFilter.$anonfun$foreach$1(TraversableLike.scala:789)
at scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:231)
at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:462)
at 
scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:788)
at 
scala.collection.immutable.HashMap$SerializationProxy.writeObject(HashMap.scala:607)
at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1140)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:441)
at org.apache.daffodil.util.PreSerialization.serializeObject(Serialize.scala:46)
at 
org.apache.daffodil.util.PreSerialization.serializeObject$(Serialize.scala:42)
at 
org.apache.daffodil.dsom.DPathCompileInfo.serializeObject(CompiledExpression1.scala:204)
at 
org.apache.daffodil.dsom.DPathCompileInfo.writeObject(CompiledExpression1.scala:234)
at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1140)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:441)
at org.apache.daffodil.util.PreSerialization.serializeObject(Serialize.scala:46)
at 
org.apache.daffodil.util.PreSerialization.serializeObject$(Serialize.scala:42)
at 
org.apache.daffodil.processors.TermRuntimeData.serializeObject(RuntimeData.scala:99)
at 
org.apache.daffodil.processors.TermRuntimeData.writeObject(RuntimeData.scala:175)
at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1140)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at org.apache.daffodil.processors.DataProcessor.save(DataProcessor.scala:171)
at 
org.apache.daffodil.tdml.processor.TDMLDFDLProcessorFactory.generateProcessor(DaffodilTDMLDFDLProcessor.scala:82)
at 
org.apache.daffodil.tdml.processor.TDMLDFDLProcessorFactory.compileProcessor(DaffodilTDMLDFDLProcessor.scala:99)
at 
org.apache.daffodil.tdml.processor.TDMLDFDLProcessorFactory.$anonfun$getProcessor$1(DaffodilTDMLDFDLProcessor.scala:112)
at 
org.apache.daffodil.tdml.SchemaCache.doCompile$lzycompute$1(SchemaCache.scala:95)
at org.apache.daffodil.tdml.SchemaCache.doCompile$1(SchemaCache.scala:95)
at 
org.apache.daffodil.tdml.SchemaCache.$anonfun$compileAndCache$1(SchemaCache.scala:108)
at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:82)
at 
org.apache.daffodil.tdml.SchemaCache$Cache.getOrElseUpdate(SchemaCache.scala:51)
at org.apache.daffodil.tdml.SchemaCache.compileAndCache(SchemaCache.scala:107)
at 
org.apache.daffodil.tdml.processor.TDMLDFDLProcessorFactory.getProcessor(DaffodilTDMLDFDLProcessor.scala:112)
at org.apache.daffodil.tdml.TestCase.run(TDMLRunner.scala:772)
at org.apache.daffodil.tdml.DFDLTestSuite.runOneTest(TDMLRunner.scala:394)
at org.apache.daffodil.tdml.Runner.runOneTest(RunnerFactory.scala:133)
at 
org.apache.daffodil.extensions.TestInputTypeValueCalc.test_outputTypeCalcInt_01(TestInputTypeValueCalc.scala:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at 
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at 
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: Schema Definition Error: dfdlx:repTypeValue can only be defined on a 
simple type
Schema context: ex:AbstractIntToMulitiply2 Location line 53 column 4 in 
file:/tmp/inputTypeCalc-Embedded.dfdl.xsd7371030902782065874.dfdl.xsd




Brandon T. Sloane

Associate, Services

[email protected] | tresys.com

Reply via email to