I swapped to 7.1.0 and am seeing the same thing. But I think I have a
better idea of what is going on by default when this property isn't
configured manually.

In JsonParserFactoryImpl, a system level maxSize value is set and to
default to 262144 if the max-string-length johnzon property isn't set as a
system property. But before this, CxfRSService sets this in a system
property as 8192. So the larger value 262144 never applies.

On Tue, Feb 26, 2019 at 1:44 PM Mark Struberg <[email protected]>
wrote:

> We did tons of fixes in Johnzon. Can you please try out TomEE-7.0.5? This
> version contains a much newer version of Johnzon.
>
> LieGrue,
> strub
>
>
> > Am 26.02.2019 um 20:54 schrieb Kean Erickson <[email protected]>:
> >
> > Sorry to reply to my own email but one more question on that--if I am to
> > set "org.apache.johnzon.max-string-length", is there anywhere that the
> > default value for this is documented? The error message claims the
> default
> > is 8192, but if I override it in system.properties with 4092 the warning
> > goes away even though that would have resulted in the limit being lowered
> > if the "Too many characters" error message were correct.. So I'm not
> really
> > sure what's going on.
> >
> > On Mon, Feb 25, 2019 at 5:19 PM Kean Erickson <[email protected]>
> > wrote:
> >
> >> I'm using TomEE webprofile 7.04 in an exploded WAR deployment. I need to
> >> use JsonReader's readObject() to read from a JsonReader created from a
> >> string, but the JsonReader's readObject() call fails ineloquently when
> the
> >> object read is too long. I unfortunately haven't been able to find a
> way to
> >> make a unit test that reproduces this, it always passes even if the
> string
> >> length is over this limit.. I think being scoped to a request may have
> >> something to do with it.
> >>
> >> After putting the attached bad.json in my user directory, I acquire the
> >> attached file's contents as such:
> >>
> >> File bad = new File(System.getProperty("user.dir")+"/bad.json");
> >> byte[] badbytes = Files.readAllBytes(bad.toPath());
> >> String badStr =  new String(badbytes, StandardCharsets.UTF_8);
> >> try(JsonReader jr = Json.createReader(new StringReader(badStr))) {
> >>    JsonObject json = jr.readObject();
> >> }
> >>
> >> From this I get the error:
> >>
> >> "java.lang.ArrayIndexOutOfBoundsException: 8192
> >>    at
> >>
> org.apache.johnzon.core.JsonStreamParserImpl.appendToCopyBuffer(JsonStreamParserImpl.java:156)
> >>    at
> >>
> org.apache.johnzon.core.JsonStreamParserImpl.readString(JsonStreamParserImpl.java:581)
> >>    at
> >>
> org.apache.johnzon.core.JsonStreamParserImpl.handleQuote(JsonStreamParserImpl.java:684)
> >>    at
> >>
> org.apache.johnzon.core.JsonStreamParserImpl.next(JsonStreamParserImpl.java:429)
> >>    at
> >>
> org.apache.johnzon.core.JsonStreamParserImpl.next(JsonStreamParserImpl.java:389)
> >>    at
> >>
> org.apache.johnzon.core.JsonReaderImpl.parseObject(JsonReaderImpl.java:181)
> >>    at
> >> org.apache.johnzon.core.JsonReaderImpl.readValue(JsonReaderImpl.java:82)
> >>    at
> org.apache.johnzon.core.JsonReaderImpl.read(JsonReaderImpl.java:61)
> >>    at
> >>
> org.apache.johnzon.core.JsonReaderImpl.readObject(JsonReaderImpl.java:150)"
> >>
> >>
> >> ....but if I replace all the backslashes in that file with a standard
> >> character like "a", I get the error message that is probably intended
> for
> >> the above case:
> >>
> >> Too many characters. Maximum string/number length of 8192 exceeded on
> >> [lineNumber=1, columnNumber=10591, streamOffset=10590]. Maybe increase
> >> org.apache.johnzon.max-string-length in jsonp factory properties or
> system
> >> properties.
> >>
> >>
> >> I think there's a bug where this message doesn't appear if when there
> are
> >> a lot of escape characters (slashes) that bring the string length over
> the
> >> limit. Any reason this proper warning wouldn't appear when triggered by
> >> escape characters? This is occurring both on Windows and Unix.
> >>
> >> Thanks,
> >> -Kean
> >>
>
>

Reply via email to