Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,12 @@ protected TypeIdResolver idResolver(DatabindContext ctxt,
return _customIdResolver;
}
// Only override handlers of class, minimal class; name is good as is
switch (_idType) {
case CLASS:
return new XmlTypeResolverBuilder.XmlClassNameIdResolver(baseType,
subtypes, subTypeValidator(ctxt));
case MINIMAL_CLASS:
return new XmlTypeResolverBuilder.XmlMinimalClassNameIdResolver(baseType,
subtypes, subTypeValidator(ctxt));
default:
}
return super.idResolver(ctxt, baseType, subtypeValidator, subtypes, forSer, forDeser);
return switch (_idType) {
case CLASS -> new XmlTypeResolverBuilder.XmlClassNameIdResolver(baseType,
subtypes, subTypeValidator(ctxt));
case MINIMAL_CLASS -> new XmlTypeResolverBuilder.XmlMinimalClassNameIdResolver(baseType,
subtypes, subTypeValidator(ctxt));
default -> super.idResolver(ctxt, baseType, subtypeValidator, subtypes, forSer, forDeser);
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public PropertyName findWrapperName(MapperConfig<?> config, Annotated ann)
}
// also: need to ensure we use marker:
String localName = w.localName();
if (localName == null || localName.length() == 0) {
if (localName == null || localName.isEmpty()) {
return PropertyName.USE_DEFAULT;
}
return PropertyName.construct(w.localName(), w.namespace());
Expand All @@ -104,7 +104,7 @@ public PropertyName findRootName(MapperConfig<?> config, AnnotatedClass ac)
String local = root.localName();
String ns = root.namespace();

if (local.length() == 0 && ns.length() == 0) {
if (local.isEmpty() && ns.isEmpty()) {
return PropertyName.USE_DEFAULT;
}
return new PropertyName(local, ns);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@ public static class Pair extends AnnotationIntrospectorPair
public Pair(AnnotationIntrospector p, AnnotationIntrospector s)
{
super(p, s);
if (p instanceof AnnotationIntrospector.XmlExtensions) {
_xmlPrimary = (AnnotationIntrospector.XmlExtensions) p;
if (p instanceof AnnotationIntrospector.XmlExtensions xmlExt) {
_xmlPrimary = xmlExt;
} else {
_xmlPrimary = null;
}

if (s instanceof AnnotationIntrospector.XmlExtensions) {
_xmlSecondary = (AnnotationIntrospector.XmlExtensions) s;
if (s instanceof AnnotationIntrospector.XmlExtensions xmlExt) {
_xmlSecondary = xmlExt;
} else {
_xmlSecondary = null;
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/tools/jackson/dataformat/xml/XmlFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -413,11 +413,11 @@ private final XmlPrettyPrinter _xmlPrettyPrinter(ObjectWriteContext writeCtxt)
return null;
}
// Ideally should catch earlier, but just in case....
if (!(pp instanceof XmlPrettyPrinter)) {
if (!(pp instanceof XmlPrettyPrinter xmlPp)) {
throw new IllegalStateException("Configured PrettyPrinter not of type `XmlPrettyPrinter` but `"
+pp.getClass().getName()+"`");
}
return (XmlPrettyPrinter) pp;
return xmlPp;
}

/**
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/tools/jackson/dataformat/xml/XmlMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -281,8 +281,8 @@ public Builder defaultUseWrapper(boolean b) {

AnnotationIntrospector ai0 = annotationIntrospector();
for (AnnotationIntrospector ai : ai0.allIntrospectors()) {
if (ai instanceof JacksonXmlAnnotationIntrospector) {
((JacksonXmlAnnotationIntrospector) ai).setDefaultUseWrapper(b);
if (ai instanceof JacksonXmlAnnotationIntrospector xmlAi) {
xmlAi.setDefaultUseWrapper(b);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,16 +60,13 @@ protected TypeIdResolver idResolver(DatabindContext ctxt,
return _customIdResolver;
}
// Only override handlers of class, minimal class; name is good as is
switch (_idType) {
case CLASS:
return new XmlClassNameIdResolver(baseType, subtypes,
subTypeValidator(ctxt));
case MINIMAL_CLASS:
return new XmlMinimalClassNameIdResolver(baseType, subtypes,
subTypeValidator(ctxt));
default:
}
return super.idResolver(ctxt, baseType, subtypeValidator, subtypes, forSer, forDeser);
return switch (_idType) {
case CLASS -> new XmlClassNameIdResolver(baseType, subtypes,
subTypeValidator(ctxt));
case MINIMAL_CLASS -> new XmlMinimalClassNameIdResolver(baseType, subtypes,
subTypeValidator(ctxt));
default -> super.idResolver(ctxt, baseType, subtypeValidator, subtypes, forSer, forDeser);
};
}

/*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package tools.jackson.dataformat.xml.deser;

import java.util.Objects;

/**
* Helper class needed to keep track of virtual wrapper elements
* added in the logical XML token stream.
Expand Down Expand Up @@ -27,7 +29,7 @@ private ElementWrapper(ElementWrapper parent,
{
_parent = parent;
_wrapperName = wrapperLocalName;
_wrapperNamespace = (wrapperNamespace == null) ? "" : wrapperNamespace;
_wrapperNamespace = Objects.requireNonNullElse(wrapperNamespace, "");
}

/**
Expand Down
102 changes: 43 additions & 59 deletions src/main/java/tools/jackson/dataformat/xml/deser/FromXmlParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -245,17 +245,17 @@ public FromXmlParser(ObjectReadContext readCtxt, IOContext ioCtxt,
_xmlTokens.markAsStreamEnd();
} else {
switch (firstToken) {
case XmlTokenStream.XML_START_ELEMENT:
// Removed from 2.14:
// case XmlTokenStream.XML_DELAYED_START_ELEMENT:
case XmlTokenStream.XML_START_ELEMENT -> {
// Removed from 2.14:
// case XmlTokenStream.XML_DELAYED_START_ELEMENT:
// [dataformat-xml#484]: in wrap mode, suppress queuing the
// (inner) START_OBJECT here; the wrap state machine queues it
// explicitly after delivering outer START + PROPERTY_NAME.
if (!wrapRoot) {
_nextToken = JsonToken.START_OBJECT;
}
break;
case XmlTokenStream.XML_ROOT_TEXT:
}
case XmlTokenStream.XML_ROOT_TEXT -> {
_currText = _xmlTokens.getText();
// [dataformat-xml#435]: may get `null` from empty element...
// It's complicated.
Expand All @@ -264,9 +264,8 @@ public FromXmlParser(ObjectReadContext readCtxt, IOContext ioCtxt,
} else {
_nextToken = JsonToken.VALUE_STRING;
}
break;
default:
_reportError("Internal problem: invalid starting state (%s)", _xmlTokens._currentStateDesc());
}
default -> _reportError("Internal problem: invalid starting state (%s)", _xmlTokens._currentStateDesc());
}
}
// [dataformat-xml#484]: activate wrap state machine if feature enabled
Expand Down Expand Up @@ -607,17 +606,10 @@ public JsonToken nextToken() throws JacksonException
_nextToken = null;

switch (t) {
case START_OBJECT:
_createChildObjectContext();
break;
case START_ARRAY:
_createChildArrayContext();
break;
case END_OBJECT:
case END_ARRAY:
_streamReadContext = _streamReadContext.getParent();
break;
case PROPERTY_NAME:
case START_OBJECT -> _createChildObjectContext();
case START_ARRAY -> _createChildArrayContext();
case END_OBJECT, END_ARRAY -> _streamReadContext = _streamReadContext.getParent();
case PROPERTY_NAME -> {
// 29-Mar-2021, tatu: [dataformat-xml#442]: special case of leading
// mixed text added
if (_nextIsLeadingMixed) {
Expand All @@ -627,8 +619,8 @@ public JsonToken nextToken() throws JacksonException
} else {
_streamReadContext.setCurrentName(_xmlTokens.getLocalName());
}
break;
default: // VALUE_STRING, VALUE_NULL
}
default -> { // VALUE_STRING, VALUE_NULL
// 13-May-2020, tatu: [dataformat-xml#397]: advance `index` anyway; not
// used for Object contexts, updated automatically by "createChildXxxContext"
_streamReadContext.valueStarted();
Expand All @@ -637,6 +629,7 @@ public JsonToken nextToken() throws JacksonException
_rootWrapStage = WRAP_PENDING_OUTER_END;
}
}
}
return t;
}

Expand Down Expand Up @@ -771,9 +764,9 @@ public JsonToken nextToken() throws JacksonException
return _updateToken(JsonToken.VALUE_STRING);
}
if (token != XmlTokenStream.XML_START_ELEMENT) {
throw _constructReadException(String.format(
"Internal error: Expected END_ELEMENT (%d) or START_ELEMENT (%d), got event of type %d",
XmlTokenStream.XML_END_ELEMENT, XmlTokenStream.XML_START_ELEMENT, token));
throw _constructReadException(
"Internal error: Expected END_ELEMENT (%d) or START_ELEMENT (%d), got event of type %d"
.formatted(XmlTokenStream.XML_END_ELEMENT, XmlTokenStream.XML_START_ELEMENT, token));
}
// fall-through, except must create new context AND push back
// START_ELEMENT we just saw:
Expand Down Expand Up @@ -848,12 +841,13 @@ public JsonToken nextToken() throws JacksonException
*/
private JsonToken _nextRootWrapToken()
{
switch (_rootWrapStage) {
case WRAP_PENDING_OUTER_START:
return switch (_rootWrapStage) {
case WRAP_PENDING_OUTER_START -> {
_rootWrapStage = WRAP_PENDING_NAME;
_streamReadContext = _streamReadContext.createChildObjectContext(-1, -1);
return _updateToken(JsonToken.START_OBJECT);
case WRAP_PENDING_NAME:
yield _updateToken(JsonToken.START_OBJECT);
}
case WRAP_PENDING_NAME -> {
// Object body case: queue inner START_OBJECT for normal flow to consume.
// Scalar/null body case: _nextToken already holds the value.
if (_nextToken == null) {
Expand All @@ -863,15 +857,18 @@ private JsonToken _nextRootWrapToken()
_rootWrapStage = WRAP_OPEN_SCALAR;
}
_streamReadContext.setCurrentName(_xmlTokens.getRootName().getLocalPart());
return _updateToken(JsonToken.PROPERTY_NAME);
case WRAP_PENDING_OUTER_END:
yield _updateToken(JsonToken.PROPERTY_NAME);
}
case WRAP_PENDING_OUTER_END -> {
_rootWrapStage = WRAP_INACTIVE;
_streamReadContext = _streamReadContext.getParent();
return _updateToken(JsonToken.END_OBJECT);
default:
yield _updateToken(JsonToken.END_OBJECT);
}
default -> {
// WRAP_OPEN_OBJECT / WRAP_OPEN_SCALAR — caller should fall through.
return null;
yield null;
}
};
}

/*
Expand Down Expand Up @@ -1008,21 +1005,11 @@ public String nextStringValue() throws JacksonException
private void _updateState(JsonToken t)
{
switch (t) {
case START_OBJECT:
_createChildObjectContext();
break;
case START_ARRAY:
_createChildArrayContext();
break;
case END_OBJECT:
case END_ARRAY:
_streamReadContext = _streamReadContext.getParent();
break;
case PROPERTY_NAME:
_streamReadContext.setCurrentName(_xmlTokens.getLocalName());
break;
default:
_internalErrorUnknownToken(t);
case START_OBJECT -> _createChildObjectContext();
case START_ARRAY -> _createChildArrayContext();
case END_OBJECT, END_ARRAY -> _streamReadContext = _streamReadContext.getParent();
case PROPERTY_NAME -> _streamReadContext.setCurrentName(_xmlTokens.getLocalName());
default -> _internalErrorUnknownToken(t);
}
}

Expand Down Expand Up @@ -1053,14 +1040,11 @@ public String getString() throws JacksonException
if (_currToken == null) {
return null;
}
switch (_currToken) {
case PROPERTY_NAME:
return currentName();
case VALUE_STRING:
return _currText;
default:
return _currToken.asString();
}
return switch (_currToken) {
case PROPERTY_NAME -> currentName();
case VALUE_STRING -> _currText;
default -> _currToken.asString();
};
}

@Override
Expand Down Expand Up @@ -1403,9 +1387,9 @@ protected void _handleEOF() throws StreamReadException
{
if (!_streamReadContext.inRoot()) {
String marker = _streamReadContext.inArray() ? "Array" : "Object";
_reportInvalidEOF(String.format(
": expected close marker for %s (start marker at %s)",
marker,
_reportInvalidEOF(
": expected close marker for %s (start marker at %s)"
.formatted(marker,
_streamReadContext.startLocation(_ioContext.contentReference())),
null);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public List<BeanPropertyDefinition> updateProperties(DeserializationConfig confi

if (wrapperName != null && wrapperName != PropertyName.NO_NAME) {
String localName = wrapperName.getSimpleName();
if ((localName != null && localName.length() > 0)
if ((localName != null && !localName.isEmpty())
&& !localName.equals(prop.getName())) {
// make copy-on-write as necessary
if (changed == 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ private static void _checkDup(DupDetector dd, String name) throws StreamReadExce
{
if (dd.isDup(name)) {
Object src = dd.getSource();
throw new StreamReadException(((src instanceof JsonParser) ? ((JsonParser) src) : null),
throw new StreamReadException(((src instanceof JsonParser jsonParser) ? jsonParser : null),
"Duplicate Object property \""+name+"\"");
}
}
Expand Down Expand Up @@ -234,15 +234,13 @@ public final String toString()
{
StringBuilder sb = new StringBuilder(64);
switch (_type) {
case TYPE_ROOT:
sb.append("/");
break;
case TYPE_ARRAY:
case TYPE_ROOT -> sb.append("/");
case TYPE_ARRAY -> {
sb.append('[');
sb.append(getCurrentIndex());
sb.append(']');
break;
case TYPE_OBJECT:
}
case TYPE_OBJECT -> {
sb.append('{');
if (_currentName != null) {
sb.append('"');
Expand All @@ -252,7 +250,7 @@ public final String toString()
sb.append('?');
}
sb.append('}');
break;
}
}
return sb.toString();
}
Expand Down
Loading
Loading