if you have cycles +1

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
<https://www.packtpub.com/application-development/java-ee-8-high-performance>

2018-02-21 8:49 GMT+01:00 Mark Struberg <[email protected]>:

> Should we run yet another release?
>
> Lg strub
>
> Mit autocorrect gesendet
>
> > Am 20.02.2018 um 23:13 schrieb Romain Manni-Bucau <[email protected]
> >:
> >
> > Yep
> >
> > Needed 2 checks too since we worked on it heavily but the changes in
> > defaults changed a bit the cases we can have I guess.
> >
> >
> > Le 20 févr. 2018 19:40, "Mark Struberg" <[email protected]> a
> > écrit :
> >
> >> Oh I now get it. It's not fallbackBuffer.length but contentLength.
> >> So this was a case where the extend was still not enough.Agree with the
> >> fix.LieGrue,strub
> >>
> >>
> >>    On Tuesday, 20 February 2018, 19:22:53 CET, Mark Struberg
> >> <[email protected]> wrote:
> >>
> >> This looks wrong
> >> -                final char[] newArray = new
> >> char[fallBackCopyBuffer.length + getBufferExtends(
> >> fallBackCopyBuffer.length)];
> >> +                final char[] newArray = new
> >> char[fallBackCopyBuffer.length + Math.max(getBufferExtends(
> fallBackCopyBuffer.length),
> >> length)];
> >>
> >>
> >> that means with the new logic we always at least _double_ the old size!
> >> e.g. 10m + max(2.5m, 10m)
> >> That's just wrong. That kind of screws anything which wants to extend
> less
> >> than the old size.
> >> LieGrue,strub
> >>
> >>
> >>    On Tuesday, 20 February 2018, 18:43:48 CET, Romain Manni-Bucau <
> >> [email protected]> wrote:
> >>
> >> Hi guys,
> >>
> >> reviwes welcomed since it touches a sensitive area
> >>
> >> long story short: the resizing was using size/4 but we can have read way
> >> more data so adjusting it more if better
> >>
> >> also the isClose was skipping buffer reuse it seems
> >>
> >> Romain
> >>
> >> ---------- Forwarded message ----------
> >> From: <[email protected]>
> >> Date: 2018-02-20 18:42 GMT+01:00
> >> Subject: johnzon git commit: JOHNZON-158 ensure we resize correctly the
> >> buffer even when sizes of the internal buffers are not in the expected
> area
> >> + ensure we call close correctly in terms of scope to avoid surprises
> and
> >> leaking buffers
> >> To: [email protected]
> >>
> >>
> >> Repository: johnzon
> >> Updated Branches:
> >>  refs/heads/master 57f307cc6 -> d579e1381
> >>
> >>
> >> JOHNZON-158 ensure we resize correctly the buffer even when sizes of the
> >> internal buffers are not in the expected area + ensure we call close
> >> correctly in terms of scope to avoid surprises and leaking buffers
> >>
> >>
> >> Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
> >> Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/d579e138
> >> Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/d579e138
> >> Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/d579e138
> >>
> >> Branch: refs/heads/master
> >> Commit: d579e1381cf1842f08f35f8bf216c349dc123771
> >> Parents: 57f307c
> >> Author: Romain Manni-Bucau <[email protected]>
> >> Authored: Tue Feb 20 18:42:05 2018 +0100
> >> Committer: Romain Manni-Bucau <[email protected]>
> >> Committed: Tue Feb 20 18:42:05 2018 +0100
> >>
> >> ----------------------------------------------------------------------
> >> .../johnzon/core/JsonStreamParserImpl.java      |  4 +-
> >> .../jsonb/DynamicBufferResizingTest.java        | 93
> ++++++++++++++++++++
> >> .../java/org/apache/johnzon/mapper/Mapper.java  | 85 ++++++++----------
> >> .../johnzon/mapper/MappingGeneratorImpl.java    |  7 +-
> >> .../johnzon/mapper/MappingParserImpl.java      | 11 ++-
> >> .../apache/johnzon/core/TestBufferProvider.java |  2 +-
> >> 6 files changed, 143 insertions(+), 59 deletions(-)
> >> ----------------------------------------------------------------------
> >>
> >>
> >> http://git-wip-us.apache.org/repos/asf/johnzon/blob/
> >> d579e138/johnzon-core/src/main/java/org/apache/johnzon/
> >> core/JsonStreamParserImpl.java
> >> ----------------------------------------------------------------------
> >> diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/
> >> JsonStreamParserImpl.java
> >> b/johnzon-core/src/main/java/org/apache/johnzon/core/
> >> JsonStreamParserImpl.java
> >> index 44c4ee9..4d0571a 100644
> >> --- a/johnzon-core/src/main/java/org/apache/johnzon/core/
> >> JsonStreamParserImpl.java
> >> +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/
> >> JsonStreamParserImpl.java
> >> @@ -170,7 +170,7 @@ public class JsonStreamParserImpl extends
> >> JohnzonJsonParserImpl implements JsonC
> >>                    throw new ArrayIndexOutOfBoundsException("Buffer too
> >> small for such a long string");
> >>                }
> >>
> >> -                final char[] newArray = new
> char[fallBackCopyBuffer.length
> >> + getBufferExtends(fallBackCopyBuffer.length)];
> >> +                final char[] newArray = new
> char[fallBackCopyBuffer.length
> >> + Math.max(getBufferExtends(fallBackCopyBuffer.length), length)];
> >>                // TODO: log to adjust size once?
> >>                System.arraycopy(fallBackCopyBuffer, 0, newArray, 0,
> >> fallBackCopyBufferLength);
> >>                System.arraycopy(buffer, startOfValueInBuffer, newArray,
> >> fallBackCopyBufferLength, length);
> >> @@ -192,7 +192,7 @@ public class JsonStreamParserImpl extends
> >> JohnzonJsonParserImpl implements JsonC
> >>      * @return the amount of bytes the current buffer should get
> extended
> >> with
> >>      */
> >>    protected int getBufferExtends(int currentLength) {
> >> -        return currentLength/4;
> >> +        return currentLength / 4;
> >>    }
> >>
> >>
> >>
> >> http://git-wip-us.apache.org/repos/asf/johnzon/blob/
> >> d579e138/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/
> >> DynamicBufferResizingTest.java
> >> ----------------------------------------------------------------------
> >> diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/
> >> DynamicBufferResizingTest.java
> >> b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/
> >> DynamicBufferResizingTest.java
> >> new file mode 100644
> >> index 0000000..6345a9b
> >> --- /dev/null
> >> +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/
> >> DynamicBufferResizingTest.java
> >> @@ -0,0 +1,93 @@
> >> +/*
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements. See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership. The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License. You may obtain a copy of the License at
> >> + *
> >> + * http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied. See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +package org.apache.johnzon.jsonb;
> >> +
> >> +import static org.junit.Assert.assertEquals;
> >> +
> >> +import javax.json.bind.Jsonb;
> >> +import javax.json.bind.JsonbBuilder;
> >> +import javax.json.bind.JsonbConfig;
> >> +import javax.json.bind.annotation.JsonbCreator;
> >> +import javax.json.bind.annotation.JsonbProperty;
> >> +import javax.json.bind.annotation.JsonbPropertyOrder;
> >> +import javax.json.bind.config.BinaryDataStrategy;
> >> +
> >> +import org.junit.Test;
> >> +
> >> +public class DynamicBufferResizingTest {
> >> +    @Test
> >> +    public void main() {
> >> +        final JsonbConfig config = new JsonbConfig()
> >> +                .withFormatting(Boolean.TRUE)
> >> +                .withBinaryDataStrategy(BinaryDataStrategy.BASE_64);
> >> +        Jsonb jsonb = JsonbBuilder.create(config);
> >> +
> >> +        final Request request = new Request("Screenshot.png",
> "image/png",
> >> new byte[558140]);
> >> +        String json = jsonb.toJson(request);
> >> +
> >> +        // the first call works
> >> +        for (int i = 0; i < 10; i++) { // originally the second call
> was
> >> failling
> >> +            final Request fromJson = jsonb.fromJson(json,
> Request.class);
> >> +            assertEquals("Screenshot.png", fromJson.name);
> >> +            assertEquals("image/png", fromJson.mimeType);
> >> +            assertEquals(558140, fromJson.body.length);
> >> +        }
> >> +    }
> >> +
> >> +    @JsonbPropertyOrder(value = {"name", "mimeType"})
> >> +    public static class Request {
> >> +        private String name;
> >> +        private String mimeType;
> >> +        private byte[] body;
> >> +
> >> +        @JsonbCreator
> >> +        public Request(
> >> +                final @JsonbProperty("name") String name,
> >> +                final @JsonbProperty("mimeType") String mimeType,
> >> +                final @JsonbProperty("body") byte[] body) {
> >> +            this.name = name;
> >> +            this.mimeType = mimeType;
> >> +            this.body = body;
> >> +        }
> >> +
> >> +        public String getName() {
> >> +            return name;
> >> +        }
> >> +
> >> +        public void setName(String name) {
> >> +            this.name = name;
> >> +        }
> >> +
> >> +        public String getMimeType() {
> >> +            return mimeType;
> >> +        }
> >> +
> >> +        public void setMimeType(String mimeType) {
> >> +            this.mimeType = mimeType;
> >> +        }
> >> +
> >> +        public byte[] getBody() {
> >> +            return body;
> >> +        }
> >> +
> >> +        public void setBody(byte[] body) {
> >> +            this.body = body;
> >> +        }
> >> +    }
> >> +}
> >>
> >> http://git-wip-us.apache.org/repos/asf/johnzon/blob/
> >> d579e138/johnzon-mapper/src/main/java/org/apache/johnzon/
> >> mapper/Mapper.java
> >> ----------------------------------------------------------------------
> >> diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/
> >> mapper/Mapper.java
> >> b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
> >> index 4bcc775..da28ae7 100644
> >> --- a/johnzon-mapper/src/main/java/org/apache/johnzon/
> mapper/Mapper.java
> >> +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/
> mapper/Mapper.java
> >> @@ -21,7 +21,6 @@ package org.apache.johnzon.mapper;
> >> import org.apache.johnzon.mapper.internal.JsonPointerTracker;
> >> import org.apache.johnzon.mapper.reflection.JohnzonCollectionType;
> >>
> >> -import javax.json.JsonException;
> >> import javax.json.JsonReader;
> >> import javax.json.JsonReaderFactory;
> >> import javax.json.JsonValue;
> >> @@ -86,9 +85,10 @@ public class Mapper implements Closeable {
> >>    }
> >>
> >>    public <T> void writeArray(final Collection<T> object, final Writer
> >> stream) {
> >> -        JsonGenerator generator = generatorFactory.
> >> createGenerator(stream(stream));
> >> -        boolean dedup = Boolean.TRUE.equals(config.
> >> isDeduplicateObjects());
> >> -        writeObject(object, generator, null, dedup ? new
> >> JsonPointerTracker(null, "/") : null);
> >> +        try (final JsonGenerator generator = generatorFactory.
> >> createGenerator(stream(stream))) {
> >> +            boolean dedup = Boolean.TRUE.equals(config.
> >> isDeduplicateObjects());
> >> +            writeObject(object, generator, null, dedup ? new
> >> JsonPointerTracker(null, "/") : null);
> >> +        }
> >>    }
> >>
> >>    public <T> void writeIterable(final Iterable<T> object, final
> >> OutputStream stream) {
> >> @@ -96,9 +96,10 @@ public class Mapper implements Closeable {
> >>    }
> >>
> >>    public <T> void writeIterable(final Iterable<T> object, final Writer
> >> stream) {
> >> -        JsonGenerator generator = generatorFactory.
> >> createGenerator(stream(stream));
> >> -        boolean dedup = Boolean.TRUE.equals(config.
> >> isDeduplicateObjects());
> >> -        writeObject(object, generator, null, dedup ? new
> >> JsonPointerTracker(null, "/") : null);
> >> +        try (final JsonGenerator generator = generatorFactory.
> >> createGenerator(stream(stream))) {
> >> +            boolean dedup = Boolean.TRUE.equals(config.
> >> isDeduplicateObjects());
> >> +            writeObject(object, generator, null, dedup ? new
> >> JsonPointerTracker(null, "/") : null);
> >> +        }
> >>    }
> >>
> >>    public void writeObject(final Object object, final Writer stream) {
> >> @@ -128,9 +129,10 @@ public class Mapper implements Closeable {
> >>            return;
> >>        }
> >>
> >> -        final JsonGenerator generator = generatorFactory.
> >> createGenerator(stream(stream));
> >> -
> >> -        writeObject(object, generator, null,
> >> isDeduplicateObjects(object.getClass())
> >> ? new JsonPointerTracker(null, "/") : null);
> >> +        try (final JsonGenerator generator = generatorFactory.
> >> createGenerator(stream(stream))) {
> >> +            writeObject(object, generator, null,
> >> +                    isDeduplicateObjects(object.getClass()) ? new
> >> JsonPointerTracker(null, "/") : null);
> >> +        }
> >>    }
> >>
> >>    private boolean isDeduplicateObjects(Class<?> rootType) {
> >> @@ -156,29 +158,7 @@ public class Mapper implements Closeable {
> >>
> >>    private void writeObject(final Object object, final JsonGenerator
> >> generator, final Collection<String> ignored, JsonPointerTracker
> >> jsonPointer) {
> >>        MappingGeneratorImpl mappingGenerator = new
> >> MappingGeneratorImpl(config, generator, mappings, jsonPointer != null);
> >> -
> >> -        Throwable originalException = null;
> >> -        try {
> >> -            mappingGenerator.doWriteObject(object, generator, true,
> >> ignored, jsonPointer);
> >> -        } catch (final Error | RuntimeException e) {
> >> -            originalException = e;
> >> -        } finally {
> >> -
> >> -            try {
> >> -                generator.close();
> >> -            } catch (JsonException e) {
> >> -
> >> -                if (originalException != null) {
> >> -                    if (RuntimeException.class.
> >> isInstance(originalException))
> >> {
> >> -                        throw RuntimeException.class.cast(
> >> originalException);
> >> -                    }
> >> -                    throw Error.class.cast(originalException); //
> >> stackoverflow falls here
> >> -                } else {
> >> -                    throw e;
> >> -                }
> >> -            }
> >> -        }
> >> -
> >> +        mappingGenerator.doWriteObject(object, generator, true,
> ignored,
> >> jsonPointer);
> >>    }
> >>
> >>    public String writeArrayAsString(final Collection<?> instance) {
> >> @@ -205,15 +185,22 @@ public class Mapper implements Closeable {
> >>    }
> >>
> >>    public <T> T readObject(final Reader stream, final Type clazz) {
> >> -        return mapObject(clazz, readerFactory.createReader(
> >> stream(stream)));
> >> +        try (final JsonReader reader =
> >> readerFactory.createReader(stream(stream)))
> >> {
> >> +            return mapObject(clazz, reader);
> >> +        }
> >>    }
> >>
> >>    public <T> T readObject(final InputStream stream, final Type clazz) {
> >> -        return mapObject(clazz, charset == null ?
> >> readerFactory.createReader(stream(stream)):
> >> readerFactory.createReader(stream(stream),
> >> charset));
> >> +        try (final JsonReader reader = charset == null ?
> >> readerFactory.createReader(stream(stream)) :
> readerFactory.createReader(
> >> +                stream(stream), charset)) {
> >> +            return mapObject(clazz, reader);
> >> +        }
> >>    }
> >>
> >>    public <T> Collection<T> readCollection(final InputStream stream,
> >> final ParameterizedType genericType) {
> >> -        return mapObject(genericType, charset == null ?
> >> readerFactory.createReader(stream(stream)):
> >> readerFactory.createReader(stream(stream),
> >> charset));
> >> +        try (final JsonReader reader = charset == null ?
> >> readerFactory.createReader(stream(stream)):
> >> readerFactory.createReader(stream(stream),
> >> charset)) {
> >> +            return mapObject(genericType, reader);
> >> +        }
> >>    }
> >>
> >>    public <T> T readJohnzonCollection(final InputStream stream, final
> >> JohnzonCollectionType<T> genericType) {
> >> @@ -225,27 +212,33 @@ public class Mapper implements Closeable {
> >>    }
> >>
> >>    public <T> Collection<T> readCollection(final Reader stream, final
> >> ParameterizedType genericType) {
> >> -        return mapObject(genericType, readerFactory.createReader(
> >> stream(stream)));
> >> +        try (final JsonReader reader =
> >> readerFactory.createReader(stream(stream)))
> >> {
> >> +            return mapObject(genericType, reader);
> >> +        }
> >>    }
> >>
> >>    public <T> T[] readArray(final Reader stream, final Class<T> clazz) {
> >> -        final JsonReader reader = readerFactory.createReader(
> >> stream(stream));
> >> -        return (T[]) mapArray(clazz, reader);
> >> +        try (final JsonReader reader =
> >> readerFactory.createReader(stream(stream)))
> >> {
> >> +            return (T[]) mapArray(clazz, reader);
> >> +        }
> >>    }
> >>
> >>    public <T> T readTypedArray(final InputStream stream, final Class<?>
> >> elementType, final Class<T> arrayType) {
> >> -        final JsonReader reader = charset == null ?
> >> readerFactory.createReader(stream(stream)):
> >> readerFactory.createReader(stream(stream),
> >> charset);
> >> -        return arrayType.cast(mapArray(elementType, reader));
> >> +        try (final JsonReader reader = charset == null ?
> >> readerFactory.createReader(stream(stream)):
> >> readerFactory.createReader(stream(stream),
> >> charset)) {
> >> +            return arrayType.cast(mapArray(elementType, reader));
> >> +        }
> >>    }
> >>
> >>    public <T> T readTypedArray(final Reader stream, final Class<?>
> >> elementType, final Class<T> arrayType) {
> >> -        final JsonReader reader = readerFactory.createReader(
> >> stream(stream));
> >> -        return arrayType.cast(mapArray(elementType, reader));
> >> +        try (final JsonReader reader =
> >> readerFactory.createReader(stream(stream)))
> >> {
> >> +            return arrayType.cast(mapArray(elementType, reader));
> >> +        }
> >>    }
> >>
> >>    public <T> T[] readArray(final InputStream stream, final Class<T>
> >> clazz) {
> >> -        final JsonReader reader = charset == null ?
> >> readerFactory.createReader(stream(stream)):
> >> readerFactory.createReader(stream(stream),
> >> charset);
> >> -        return (T[]) mapArray(clazz, reader);
> >> +        try (final JsonReader reader = charset == null ?
> >> readerFactory.createReader(stream(stream)):
> >> readerFactory.createReader(stream(stream),
> >> charset)) {
> >> +            return (T[]) mapArray(clazz, reader);
> >> +        }
> >>    }
> >>
> >>    private Object mapArray(final Class<?> clazz, final JsonReader
> reader)
> >> {
> >> @@ -282,7 +275,7 @@ public class Mapper implements Closeable {
> >>                c.close();
> >>            } catch (final IOException e) {
> >>                if (errors == null) {
> >> -                    errors = new ArrayList<Exception>();
> >> +                    errors = new ArrayList<>();
> >>                }
> >>                errors.add(e);
> >>            }
> >>
> >> http://git-wip-us.apache.org/repos/asf/johnzon/blob/
> >> d579e138/johnzon-mapper/src/main/java/org/apache/johnzon/
> >> mapper/MappingGeneratorImpl.java
> >> ----------------------------------------------------------------------
> >> diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/
> >> mapper/MappingGeneratorImpl.java b/johnzon-mapper/src/main/
> >> java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
> >> index 773e615..3fa054a 100644
> >> --- a/johnzon-mapper/src/main/java/org/apache/johnzon/
> >> mapper/MappingGeneratorImpl.java
> >> +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/
> >> mapper/MappingGeneratorImpl.java
> >> @@ -18,16 +18,15 @@
> >>  */
> >> package org.apache.johnzon.mapper;
> >>
> >> -import org.apache.johnzon.mapper.internal.AdapterKey;
> >> import org.apache.johnzon.mapper.internal.JsonPointerTracker;
> >>
> >> import javax.json.JsonValue;
> >> import javax.json.stream.JsonGenerator;
> >> -import javax.xml.bind.DatatypeConverter;
> >> import java.lang.reflect.Array;
> >> import java.lang.reflect.InvocationTargetException;
> >> import java.math.BigDecimal;
> >> import java.math.BigInteger;
> >> +import java.util.Base64;
> >> import java.util.Collection;
> >> import java.util.Collections;
> >> import java.util.HashMap;
> >> @@ -329,12 +328,12 @@ public class MappingGeneratorImpl implements
> >> MappingGenerator {
> >>            }
> >>
> >>            if(config.isTreatByteArrayAsBase64() && (type ==
> byte[].class
> >> /*|| type == Byte[].class*/)) {
> >> -                String base64EncodedByteArray =
> >> DatatypeConverter.printBase64Binary((byte[])
> >> value);
> >> +                String base64EncodedByteArray =
> >> Base64.getEncoder().encodeToString((byte[])
> >> value);
> >>                generator.write(key, base64EncodedByteArray);
> >>                return;
> >>            }
> >>            if(config.isTreatByteArrayAsBase64URL() && (type ==
> >> byte[].class /*|| type == Byte[].class*/)) {
> >> -                generator.write(key, String.valueOf(Adapter.class.
> >> cast(config.getAdapters().get(new AdapterKey(byte[].class,
> >> String.class))).to(value)));
> >> +                generator.write(key,
> >> Base64.getUrlEncoder().encodeToString((byte[])
> >> value));
> >>                return;
> >>            }
> >>
> >>
> >> http://git-wip-us.apache.org/repos/asf/johnzon/blob/
> >> d579e138/johnzon-mapper/src/main/java/org/apache/johnzon/
> >> mapper/MappingParserImpl.java
> >> ----------------------------------------------------------------------
> >> diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/
> >> mapper/MappingParserImpl.java
> >> b/johnzon-mapper/src/main/java/org/apache/johnzon/
> >> mapper/MappingParserImpl.java
> >> index 18af2ec..8e74e3c 100644
> >> --- a/johnzon-mapper/src/main/java/org/apache/johnzon/
> >> mapper/MappingParserImpl.java
> >> +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/
> >> mapper/MappingParserImpl.java
> >> @@ -33,7 +33,6 @@ import javax.json.JsonReader;
> >> import javax.json.JsonString;
> >> import javax.json.JsonStructure;
> >> import javax.json.JsonValue;
> >> -import javax.xml.bind.DatatypeConverter;
> >>
> >> import java.lang.reflect.Array;
> >> import java.lang.reflect.InvocationTargetException;
> >> @@ -45,6 +44,7 @@ import java.math.BigDecimal;
> >> import java.math.BigInteger;
> >> import java.util.ArrayDeque;
> >> import java.util.ArrayList;
> >> +import java.util.Base64;
> >> import java.util.Collection;
> >> import java.util.Collections;
> >> import java.util.Deque;
> >> @@ -125,10 +125,6 @@ public class MappingParserImpl implements
> >> MappingParser {
> >>            return readObject(jsonReader.readValue(), targetType);
> >>        } catch (final NoSuchMethodError noSuchMethodError) { // jsonp
> 1.0
> >> fallback - mainly for tests
> >>            return readObject(jsonReader.read(), targetType);
> >> -        } finally {
> >> -            if (config.isClose()) {
> >> -                jsonReader.close();
> >> -            }
> >>        }
> >>    }
> >>
> >> @@ -482,7 +478,10 @@ public class MappingParserImpl implements
> >> MappingParser {
> >>        }
> >>
> >>        if (config.isTreatByteArrayAsBase64() &&
> jsonValue.getValueType()
> >> == JsonValue.ValueType.STRING && (type == byte[].class /*|| type ==
> >> Byte[].class*/)) {
> >> -            return DatatypeConverter.parseBase64Binary(((JsonString)
> >> jsonValue).getString());
> >> +            return Base64.getDecoder().decode(((JsonString)
> >> jsonValue).getString());
> >> +        }
> >> +        if (config.isTreatByteArrayAsBase64URL() &&
> >> jsonValue.getValueType() == JsonValue.ValueType.STRING && (type ==
> >> byte[].class /*|| type == Byte[].class*/)) {
> >> +            return Base64.getUrlDecoder().decode(((JsonString)
> >> jsonValue).getString());
> >>        }
> >>
> >>        if (Object.class == type) { // handling specific types here to
> >> keep exception in standard handling
> >>
> >> http://git-wip-us.apache.org/repos/asf/johnzon/blob/
> >> d579e138/johnzon-mapper/src/test/java/org/apache/johnzon/
> >> core/TestBufferProvider.java
> >> ----------------------------------------------------------------------
> >> diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/core/
> >> TestBufferProvider.java
> >> b/johnzon-mapper/src/test/java/org/apache/johnzon/core/
> >> TestBufferProvider.java
> >> index 532d32c..93733d9 100644
> >> --- a/johnzon-mapper/src/test/java/org/apache/johnzon/core/
> >> TestBufferProvider.java
> >> +++ b/johnzon-mapper/src/test/java/org/apache/johnzon/core/
> >> TestBufferProvider.java
> >> @@ -69,7 +69,7 @@ public class TestBufferProvider implements
> >> BufferStrategy.BufferProvider<char[]>
> >>    }
> >>
> >>    public int newBufferCalls() {
> >> -        return releaseCalls.get();
> >> +        return newBufferCalls.get();
> >>    }
> >>
> >>    public void clear() {
> >>
>
>

Reply via email to