<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Found attached X3D XML in this folder: /c/x3d-code/www.web3d.org/x3d/content/examples/Basic/course </p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I am including both your code, my code and the XML.</p><p class=MsoNormal><br>This is ye olde ProtoInstance field issue, I think.  Sorry if I’m reporting multiple times.</p><p class=MsoNormal><br>I believe the from end and the to end of this is the last thing I need to handle with routes, either in my code, or</p><p class=MsoNormal>in my X3D.  I do have a ProtoInstance name issue, but that might be handled with a constructor parameter I haven’t tried yet—I haven’t really worked on that yet.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’m still getting code to large problems too, with X3dToJava.xslt generated code.  I can probably share an example from my website.  Converting this file with X3dToJava.xslt and then compiling it will generate a code to large issue: <a href="http://coderextreme.net/X3DJSONLD/john.x3d">http://coderextreme.net/X3DJSONLD/john.x3d</a>  I do have a solution for this, and it involves creating inner classes for the arrays (and breaking up the arrays).  My corresponding example java is found here:  <a href="http://coderextreme.net/X3DJSONLD/john.java">http://coderextreme.net/X3DJSONLD/john.java</a></p><p class=MsoNormal>This does work, as evidenced by an output JSON file: <a href="http://coderextreme.net/X3DJSONLD/john.new.json">http://coderextreme.net/X3DJSONLD/john.new.json</a> .   Serializer code for the arrays is below.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John</p><p class=MsoNormal>Here is your exception:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>ExtrusionCrossSectionExampleShip execution self-validation test results: <meta name='hint' content='Utilize ExtrusionCrossSection ProtoInstance as a Shape node (with containerField=&quot;children&quot;) rather than an Extrusion node (with containerField=&quot;geometry&quot;).'/></p><p class=MsoNormal> ROUTE details: FROM SmokeSpineInterpolator.value_changed (CoordinateInterpolator.MFVec3f.outputOnly) TO Smoke.set_spine (ProtoInstance.ERROR_UNKNOWN_FIELD_TYPE.ERROR_UNKNOWN_FIELD_ACCESSTYPE)</p><p class=MsoNormal>ROUTE toField (destination) event can only have accessType='inputOutput' or accessType='inputOnly'.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Below are my exceptions.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>org.web3d.x3d.sai.InvalidFieldValueException:  ROUTE details: FROM SmokeSpineInterpolator.value_changed (CoordinateInterpolator.MFVec3f.outputOnly) TO Smoke.set_spine (ProtoInstance.ERROR_UNKNOWN_FIELD_TYPE.ERROR_UNKNOWN_FIELD_ACCESSTYPE)</p><p class=MsoNormal>ROUTE toField (destination) event can only have accessType='inputOutput' or accessType='inputOnly'.</p><p class=MsoNormal>org.web3d.x3d.sai.InvalidFieldValueException:  ROUTE details: FROM SmokeSpineInterpolator.value_changed (CoordinateInterpolator.MFVec3f.outputOnly) TO Smoke.set_spine (ProtoInstance.ERROR_UNKNOWN_FIELD_TYPE.ERROR_UNKNOWN_FIELD_ACCESSTYPE)</p><p class=MsoNormal>ROUTE toField (destination) event can only have accessType='inputOutput' or accessType='inputOnly'.</p><p class=MsoNormal>        at org.web3d.x3d.jsail.Core.ROUTEObject.validate(ROUTEObject.java:760)</p><p class=MsoNormal>        at org.web3d.x3d.jsail.Grouping.TransformObject.validate(TransformObject.java:1763)</p><p class=MsoNormal>        at org.web3d.x3d.jsail.Core.SceneObject.validate(SceneObject.java:627)</p><p class=MsoNormal>        at org.web3d.x3d.jsail.Core.X3DObject.validate(X3DObject.java:1876)</p><p class=MsoNormal>        at org.web3d.x3d.jsail.Core.X3DObject.toFileJSON(X3DObject.java:746)</p><p class=MsoNormal>        at www_web3d_org.x3d.content.examples.Basic.course.ExtrusionCrossSectionExampleShip.main(ExtrusionCrossSectionExampleShip.java:80)</p><p class=MsoNormal>Exception in thread "main" org.web3d.x3d.sai.InvalidFieldValueException:  ROUTE details: FROM SmokeSpineInterpolator.value_changed (CoordinateInterpolator.MFVec3f.outputOnly) TO Smoke.set_spine (ProtoInstance.ERROR_UNKNOWN_FIELD_TYPE.ERROR_UNKNOWN_FIELD_ACCESSTYPE)</p><p class=MsoNormal>ROUTE toField (destination) event can only have accessType='inputOutput' or accessType='inputOnly'.</p><p class=MsoNormal>        at org.web3d.x3d.jsail.Core.ROUTEObject.validate(ROUTEObject.java:760)</p><p class=MsoNormal>        at org.web3d.x3d.jsail.Grouping.TransformObject.validate(TransformObject.java:1763)</p><p class=MsoNormal>        at org.web3d.x3d.jsail.Core.SceneObject.validate(SceneObject.java:627)</p><p class=MsoNormal>        at org.web3d.x3d.jsail.Core.X3DObject.validate(X3DObject.java:1876)</p><p class=MsoNormal>        at org.web3d.x3d.jsail.Core.X3DObject.toFileJSON(X3DObject.java:746)</p><p class=MsoNormal>        at www_web3d_org.x3d.content.examples.Basic.course.ExtrusionCrossSectionExampleShip.main(ExtrusionCrossSectionExampleShip.java:80)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Here is my serializer array breakup code. Even it isn’t perfect, but it handles my local test code (I think there’s still an issue somewhere in the X3D archives)  The duplicated 840 figure (3 times, I’m embarrassed) can be tweaked to optimize.  You’ll want to call it on your large arrays, not your small ones (but I do call it on my small ones.  There outta be a law <span style='font-family:"Segoe UI Emoji",sans-serif'>☹</span>):</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>        printSubArray : function (attrType, type, values, co, j, lead, trail) {</p><p class=MsoNormal>                if (attrType.startsWith("MF")) {</p><p class=MsoNormal>                        var str = "new "+attrType+"Object(";</p><p class=MsoNormal>                        for (var i = 0; i < values.length; i += 840) {</p><p class=MsoNormal>                                var max = values.length;</p><p class=MsoNormal>                                if (i + 840 < max) {</p><p class=MsoNormal>                                        max = i + 840;</p><p class=MsoNormal>                                }</p><p class=MsoNormal>                                this.codeno++;</p><p class=MsoNormal>                                  // this code is separate from the main code</p><p class=MsoNormal>                                this.code[co] = "protected class "+attrType+co+" {\n";</p><p class=MsoNormal>                                this.code[co] +=  "  protected "+attrType+"Object getArray() {\n";</p><p class=MsoNormal>                                this.code[co] += "    return new "+attrType+"Object(new "+type+"[] {"+lead+values.slice(i, max).join(j)+trail+"});\n";</p><p class=MsoNormal>                                this.code[co] += "  }\n";</p><p class=MsoNormal>                                this.code[co] += "}\n";</p><p class=MsoNormal>                                // this code is part of the main code</p><p class=MsoNormal>                                if (i == 0) {</p><p class=MsoNormal>                                        str += "new "+attrType+co+"().getArray())";</p><p class=MsoNormal>                                } else {</p><p class=MsoNormal>                                        str += ".append(new "+attrType+co+"().getArray())";</p><p class=MsoNormal>                                }</p><p class=MsoNormal>                                co = this.codeno;</p><p class=MsoNormal>                        }</p><p class=MsoNormal>                        return str;</p><p class=MsoNormal>                } else {</p><p class=MsoNormal>                        if (type === "int") {</p><p class=MsoNormal>                                for (var v in values) {</p><p class=MsoNormal>                                        if (values[v] > 4200000000) {</p><p class=MsoNormal>                                                values[v] = "0x"+parseInt(values[v]).toString(16).toUpperCase();</p><p class=MsoNormal>                                        }</p><p class=MsoNormal>                                }</p><p class=MsoNormal>                        }</p><p class=MsoNormal>                        return "new "+type+"[] {"+lead+values.join(j)+trail+"}";</p><p class=MsoNormal>                }</p><p class=MsoNormal>        },<o:p></o:p></p></div></body></html>