diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonValueParserAdapter.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonValueParserAdapter.java index 4c09496a2..16b18e638 100644 --- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonValueParserAdapter.java +++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonValueParserAdapter.java @@ -1,145 +1,157 @@ -/* - * 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 java.math.BigDecimal; -import java.util.function.Supplier; - -import jakarta.json.JsonNumber; -import jakarta.json.JsonString; -import jakarta.json.JsonValue; -import jakarta.json.stream.JsonLocation; -import jakarta.json.stream.JsonParser; -import jakarta.json.stream.JsonParserFactory; - -import org.apache.johnzon.mapper.jsonp.RewindableJsonParser; - -class JsonValueParserAdapter implements JsonParser { - - private static class JsonStringParserAdapter extends JsonValueParserAdapter { - - public JsonStringParserAdapter(JsonString jsonValue) { - super(jsonValue); - } - - @Override - public String getString() { - return getValue().getString(); - } - } - - private static class JsonNumberParserAdapter extends JsonValueParserAdapter { - - public JsonNumberParserAdapter(JsonNumber jsonValue) { - super(jsonValue); - } - - @Override - public boolean isIntegralNumber() { - return getValue().isIntegral(); - } - - @Override - public int getInt() { - return getValue().intValueExact(); - } - - @Override - public long getLong() { - return getValue().longValueExact(); - } - - @Override - public BigDecimal getBigDecimal() { - return getValue().bigDecimalValue(); - } - } - - public static JsonParser createFor(final JsonValue jsonValue, - final Supplier parserFactoryProvider) { - return new RewindableJsonParser(doCreate(jsonValue, parserFactoryProvider)); - } - - private static JsonParser doCreate(final JsonValue jsonValue, - final Supplier parserFactoryProvider) { - switch (jsonValue.getValueType()) { - case OBJECT: return parserFactoryProvider.get().createParser(jsonValue.asJsonObject()); - case ARRAY: return parserFactoryProvider.get().createParser(jsonValue.asJsonArray()); - case STRING: return new JsonStringParserAdapter((JsonString) jsonValue); - case NUMBER: return new JsonNumberParserAdapter((JsonNumber) jsonValue); - default: return new JsonValueParserAdapter<>(jsonValue); - } - } - - private final T jsonValue; - - JsonValueParserAdapter(T jsonValue) { - this.jsonValue = jsonValue; - } - - @Override - public boolean hasNext() { - return false; - } - - @Override - public Event next() { - throw new UnsupportedOperationException("next() no supported for " + jsonValue.getValueType()); - } - - @Override - public String getString() { - throw new UnsupportedOperationException("next() no supported for " + jsonValue.getValueType()); - } - - @Override - public boolean isIntegralNumber() { - throw new UnsupportedOperationException("isIntegralNumber() not supported for " + jsonValue.getValueType()); - } - - @Override - public int getInt() { - throw new UnsupportedOperationException("getInt() not supported for " + jsonValue.getValueType()); - } - - @Override - public long getLong() { - throw new UnsupportedOperationException("getLong() not supported for " + jsonValue.getValueType()); - } - - @Override - public BigDecimal getBigDecimal() { - throw new UnsupportedOperationException("getBigDecimal() not supported for " + jsonValue.getValueType()); - } - - @Override - public JsonLocation getLocation() { - throw new UnsupportedOperationException("getLocation() not supported for " + jsonValue.getValueType()); - } - - @Override - public void close() { - // no-op - } - - @Override - public T getValue() { - return jsonValue; - } -} +/* + * 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 java.math.BigDecimal; +import java.util.function.Supplier; + +import jakarta.json.JsonNumber; +import jakarta.json.JsonString; +import jakarta.json.JsonValue; +import jakarta.json.stream.JsonLocation; +import jakarta.json.stream.JsonParser; +import jakarta.json.stream.JsonParserFactory; + +class JsonValueParserAdapter implements JsonParser { + + private static class JsonStringParserAdapter extends JsonValueParserAdapter { + + public JsonStringParserAdapter(JsonString jsonValue) { + super(jsonValue); + } + + @Override + public String getString() { + return getValue().getString(); + } + } + + private static class JsonNumberParserAdapter extends JsonValueParserAdapter { + + public JsonNumberParserAdapter(JsonNumber jsonValue) { + super(jsonValue); + } + + @Override + public boolean isIntegralNumber() { + return getValue().isIntegral(); + } + + @Override + public int getInt() { + return getValue().intValueExact(); + } + + @Override + public long getLong() { + return getValue().longValueExact(); + } + + @Override + public BigDecimal getBigDecimal() { + return getValue().bigDecimalValue(); + } + } + + public static JsonParser createFor(final JsonValue jsonValue, + final Supplier parserFactoryProvider) { + return doCreate(jsonValue, parserFactoryProvider); + } + + private static JsonParser doCreate(final JsonValue jsonValue, + final Supplier parserFactoryProvider) { + switch (jsonValue.getValueType()) { + case OBJECT: return parserFactoryProvider.get().createParser(jsonValue.asJsonObject()); + case ARRAY: return parserFactoryProvider.get().createParser(jsonValue.asJsonArray()); + case STRING: return new JsonStringParserAdapter((JsonString) jsonValue); + case NUMBER: return new JsonNumberParserAdapter((JsonNumber) jsonValue); + default: return new JsonValueParserAdapter<>(jsonValue); + } + } + + private final T jsonValue; + + JsonValueParserAdapter(T jsonValue) { + this.jsonValue = jsonValue; + } + + @Override + public boolean hasNext() { + return false; + } + + @Override + public Event next() { + throw new UnsupportedOperationException("next() no supported for " + jsonValue.getValueType()); + } + + @Override + public Event currentEvent() { + switch (jsonValue.getValueType()) { + case STRING: return Event.VALUE_STRING; + case NUMBER: return Event.VALUE_NUMBER; + case TRUE: return Event.VALUE_TRUE; + case FALSE: return Event.VALUE_FALSE; + case NULL: return Event.VALUE_NULL; + case OBJECT: return Event.START_OBJECT; + case ARRAY: return Event.START_ARRAY; + default: throw new UnsupportedOperationException("currentEvent() not supported for " + jsonValue.getValueType()); + } + } + + @Override + public String getString() { + throw new UnsupportedOperationException("next() no supported for " + jsonValue.getValueType()); + } + + @Override + public boolean isIntegralNumber() { + throw new UnsupportedOperationException("isIntegralNumber() not supported for " + jsonValue.getValueType()); + } + + @Override + public int getInt() { + throw new UnsupportedOperationException("getInt() not supported for " + jsonValue.getValueType()); + } + + @Override + public long getLong() { + throw new UnsupportedOperationException("getLong() not supported for " + jsonValue.getValueType()); + } + + @Override + public BigDecimal getBigDecimal() { + throw new UnsupportedOperationException("getBigDecimal() not supported for " + jsonValue.getValueType()); + } + + @Override + public JsonLocation getLocation() { + throw new UnsupportedOperationException("getLocation() not supported for " + jsonValue.getValueType()); + } + + @Override + public void close() { + // no-op + } + + @Override + public T getValue() { + return jsonValue; + } +} diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/serializer/JohnzonDeserializationContext.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/serializer/JohnzonDeserializationContext.java index 252f1f220..9e0697a54 100644 --- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/serializer/JohnzonDeserializationContext.java +++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/serializer/JohnzonDeserializationContext.java @@ -55,8 +55,7 @@ public T deserialize(final Type type, final JsonParser parser) { } private JsonValue read(final JsonParser parser) { - final JsonParser.Event next = /*RewindableJsonParser.class.isInstance(parser) ? - RewindableJsonParser.class.cast(parser).getLast() : */ parser.next(); + final JsonParser.Event next = parser.next(); switch (next) { case START_OBJECT: { final JsonObjectBuilder objectBuilder = builderFactory.createObjectBuilder(); diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/jsonp/RewindableJsonParser.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/jsonp/RewindableJsonParser.java deleted file mode 100644 index f0c246091..000000000 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/jsonp/RewindableJsonParser.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 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.mapper.jsonp; - -import java.math.BigDecimal; -import java.util.Map; -import java.util.stream.Stream; - -import jakarta.json.JsonArray; -import jakarta.json.JsonObject; -import jakarta.json.JsonValue; -import jakarta.json.stream.JsonLocation; -import jakarta.json.stream.JsonParser; - -public class RewindableJsonParser implements JsonParser { - private final JsonParser delegate; - private Event last; - - public RewindableJsonParser(final JsonParser delegate) { - this.delegate = delegate; - } - - public Event getLast() { - return last; - } - - @Override - public boolean hasNext() { - return delegate.hasNext(); - } - - @Override - public Event next() { - return last = delegate.next(); - } - - @Override - public String getString() { - return delegate.getString(); - } - - @Override - public boolean isIntegralNumber() { - return delegate.isIntegralNumber(); - } - - @Override - public int getInt() { - return delegate.getInt(); - } - - @Override - public long getLong() { - return delegate.getLong(); - } - - @Override - public BigDecimal getBigDecimal() { - return delegate.getBigDecimal(); - } - - @Override - public JsonLocation getLocation() { - return delegate.getLocation(); - } - - @Override - public void close() { - delegate.close(); - } - - @Override - public JsonObject getObject() { - return delegate.getObject(); - } - - @Override - public JsonValue getValue() { - return delegate.getValue(); - } - - @Override - public JsonArray getArray() { - return delegate.getArray(); - } - - @Override - public Stream getArrayStream() { - return delegate.getArrayStream(); - } - - @Override - public Stream> getObjectStream() { - return delegate.getObjectStream(); - } - - @Override - public Stream getValueStream() { - return delegate.getValueStream(); - } - - @Override - public void skipArray() { - delegate.skipArray(); - } - - @Override - public void skipObject() { - delegate.skipObject(); - } -}