We can wait 2 weeks to release Smooks 2. Alternatively, we can implement some 
hack to circumvent the problem and release now. As far as I can tell, the 
EDIFACT dictionaries from which the DFDL schemas are generated don't specify 
the numeric type. In theory, though it might not make sense, any numeric field 
may have a decimal sign and a negative sign.

Claude

The fields may have decimal points

On 2020/06/18 13:31:26, "Beckerle, Mike" <mbecke...@tresys.com> wrote: 
> I don't think maxLength is usable on anything but string and hexBinary.
> 
> For integers you can use maxInclusive or maxExclusive.
> ________________________________
> From: Steve Lawrence <slawre...@apache.org>
> Sent: Thursday, June 18, 2020 9:10 AM
> To: users@daffodil.apache.org <users@daffodil.apache.org>
> Subject: Re: java.lang.ArithmeticException: Overflow
> 
> Thanks for the contribution! I've taken a look and made a few comments
> in the PR. I think the totalDigits logic is actually much more
> complicated than I originally thought it would be.
> 
> Regarding the release, I'm not personally against a patch release, but
> keep in mind that the Daffodil release process is fairly slow. We need
> to start a DISCUSS thread on the dev mailing list which must remain open
> for at least 72 hours and until discussions die down. We then must
> create the release and start a VOTE thread on the dev list. The VOTE
> takes a minimum of 72 hours. If that passes, we must then start a VOTE
> on the incubator mailing list, which also takes a minimum of 72 hours,
> but in my experience takes more like a week. And then the jars take
> about a day or so to sync to maven repositories. So the whole process
> generally takes about 2 weeks.
> 
> Depending on how soon you're trying to get a release out, it might make
> sense to see if we can come up with an alternative to totalDigits.
> 
> Looking at the schema, to me it looks like the numeric1-10 and
> numeric1-18 simple types that have this totalDigits issue are used for
> fields that imply they are unsigned integer types rather than decimal
> (e.g. NumberOfSegmentsInAMessage, NumberOfSecuritySegments,
> LengthOfDataInOctetsOfBits). Is that the case? Are these fields allowed
> to have decimal points? If not, rather than using an xs:decimal base you
> could use an xs:unsignedInteger base and then use the maxLength
> restriction rather than totalDigits. As far as I'm aware maxLength
> doesn't have the same issue as totalDigits.
> 
> On 6/17/20 4:01 PM, Claude Mamo wrote:
> > I gave it a go Steve and opened a PR: 
> > https://github.com/apache/incubator-daffodil/pull/387. Assuming it's 
> > merged, can we have patch release for this? We are preparing to release the 
> > EDI cartridge for Smooks 2 (https://github.com/smooks/smooks-edi-cartridge) 
> > but there are many places in our generated EDIFACT schemas with totalDigits 
> > > 9.
> >
> > Claude
> >
> > On 2020/06/09 11:41:20, Steve Lawrence <slawre...@apache.org> wrote:
> >> Looks like total digits is just plain broken for anything greater than
> >> or equal to 10, which is pretty bad. Looking at the code I *think* the
> >> totalDigits check will always succeed if the value being validated is
> >> negative, regardless of the number of digits.
> >>
> >> I've created DAFFODIL-2349 [1] to track this issue.
> >>
> >> If you (or anyone else) is interested in getting involved in Daffodil
> >> development, this would be a good one to get your feet wet. The fix
> >> should be pretty self-contained to one file/function.
> >>
> >> Unfortunately, I'm not sure if there's a good workaround using just
> >> restrictions.
> >>
> >> Best I can come up with is have an inputValueCalc that strips out a
> >> negative sign and decimal place, and then restrict that to a length of
> >> 10, e.g.
> >>
> >>   <xs:element name="unscaled" dfdl:inputValueCalc="{
> >>     fn:concat(
> >>       fn:substring-before(xs:string(fn:abs(../value)), '.'),
> >>       fn:substring-after(xs:string(../value), '.')
> >>     )
> >>   }">
> >>   <xs:simpleType>
> >>     <xs:restriction base="xs:string">
> >>       <x:length value="10"/>
> >>     </xs:restriction>
> >>   </xs:simpleType>
> >> </xs:element>
> >>
> >> That's pretty terrible though. Maybe someone else can come up with a
> >> better workaround?
> >>
> >> [1] https://issues.apache.org/jira/browse/DAFFODIL-2349
> >>
> >>
> >> On 6/9/20 2:29 AM, Claude Mamo wrote:
> >>> Hello Daffodil team,
> >>>
> >>> Not sure if what I'm getting is expected behaviour. I have a facet 
> >>> defined as follows:
> >>>
> >>> ```
> >>>     <xsd:simpleType dfdl:textNumberPattern="#.#" name="numeric1-10">
> >>>         <xsd:restriction base="xsd:decimal">
> >>>             <xsd:totalDigits value="10"/>
> >>>         </xsd:restriction>
> >>>     </xsd:simpleType>
> >>> ```
> >>>
> >>> When attempting to parse a file with full validation turned on, Daffodil 
> >>> 2.6 throws an exception saying:
> >>>
> >>> ```
> >>> org.apache.daffodil.exceptions.Abort:
> >>> Invariant broken. Exception thrown with mark not returned: 
> >>> java.lang.ArithmeticException: Overflow
> >>> StackTrace:
> >>> java.lang.ArithmeticException: Overflow
> >>>         at java.math.BigDecimal.intValueExact(BigDecimal.java:3180)
> >>>         at 
> >>> org.apache.daffodil.processors.SimpleTypeRuntimeData.checkTotalDigits(RuntimeData.scala:526)
> >>>         at 
> >>> org.apache.daffodil.processors.SimpleTypeRuntimeData.$anonfun$executeFacetCheck$8(RuntimeData.scala:431)
> >>>         at 
> >>> org.apache.daffodil.processors.SimpleTypeRuntimeData.$anonfun$executeFacetCheck$8$adapted(RuntimeData.scala:427)
> >>> ```
> >>>
> >>> Should I create a bug report? Any suitable alternatives to "totalDigits"?
> >>>
> >>> Claude
> >>>
> >>>
> >>>
> >>
> >>
> 
> 

Reply via email to