diff --git a/src/main/java/org/greenbytes/http/sfv/BooleanItem.java b/src/main/java/org/greenbytes/http/sfv/BooleanItem.java index 09fb28b..41485cb 100644 --- a/src/main/java/org/greenbytes/http/sfv/BooleanItem.java +++ b/src/main/java/org/greenbytes/http/sfv/BooleanItem.java @@ -5,8 +5,8 @@ /** * Represents a Boolean. * - * @see Section - * 3.3.6 of RFC 8941 + * @see Section + * 3.3.6 of RFC 9651 */ public class BooleanItem implements Item { diff --git a/src/main/java/org/greenbytes/http/sfv/ByteSequenceItem.java b/src/main/java/org/greenbytes/http/sfv/ByteSequenceItem.java index bc78021..c0fcd29 100644 --- a/src/main/java/org/greenbytes/http/sfv/ByteSequenceItem.java +++ b/src/main/java/org/greenbytes/http/sfv/ByteSequenceItem.java @@ -7,8 +7,8 @@ /** * Represents a Byte Sequence. * - * @see Section - * 3.3.5 of RFC 8941 + * @see Section + * 3.3.5 of RFC 9651 */ public class ByteSequenceItem implements Item { diff --git a/src/main/java/org/greenbytes/http/sfv/DateItem.java b/src/main/java/org/greenbytes/http/sfv/DateItem.java index 6a36640..3874bd5 100644 --- a/src/main/java/org/greenbytes/http/sfv/DateItem.java +++ b/src/main/java/org/greenbytes/http/sfv/DateItem.java @@ -4,6 +4,9 @@ /** * Represents a Date. + * + * @see Section + * 3.3.7 of RFC 9651 */ public class DateItem implements NumberItem { diff --git a/src/main/java/org/greenbytes/http/sfv/DecimalItem.java b/src/main/java/org/greenbytes/http/sfv/DecimalItem.java index 67da299..a072cab 100644 --- a/src/main/java/org/greenbytes/http/sfv/DecimalItem.java +++ b/src/main/java/org/greenbytes/http/sfv/DecimalItem.java @@ -15,8 +15,8 @@ * value. {@link #getAsLong()} provides access to the raw value when the * overhead of {@link BigDecimal} is not needed. * - * @see Section - * 3.3.2 of RFC 8941 + * @see Section + * 3.3.2 of RFC 9651 */ public class DecimalItem implements NumberItem { diff --git a/src/main/java/org/greenbytes/http/sfv/Dictionary.java b/src/main/java/org/greenbytes/http/sfv/Dictionary.java index 9a59d1d..31cd0fe 100644 --- a/src/main/java/org/greenbytes/http/sfv/Dictionary.java +++ b/src/main/java/org/greenbytes/http/sfv/Dictionary.java @@ -7,8 +7,8 @@ * Represents a Dictionary. * * @see Section 3.2 of - * RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#dictionary">Section 3.2 of + * RFC 9651 */ public class Dictionary implements Type>> { diff --git a/src/main/java/org/greenbytes/http/sfv/DisplayStringItem.java b/src/main/java/org/greenbytes/http/sfv/DisplayStringItem.java index 3c6b538..bd92f10 100755 --- a/src/main/java/org/greenbytes/http/sfv/DisplayStringItem.java +++ b/src/main/java/org/greenbytes/http/sfv/DisplayStringItem.java @@ -4,6 +4,10 @@ import java.util.Objects; /** + * Represents a Display String. + * + * @see Section + * 3.3.8 of RFC 9651 */ public class DisplayStringItem implements Item { @@ -16,12 +20,12 @@ private DisplayStringItem(String value, Parameters params) { } /** - * Creates a {@link StringItem} instance representing the specified + * Creates a {@link DisplayStringItem} instance representing the specified * {@code String} value. * * @param value * a {@code String} value. - * @return a {@link StringItem} representing {@code value}. + * @return a {@link DisplayStringItem} representing {@code value}. */ public static DisplayStringItem valueOf(String value) { return new DisplayStringItem(value, Parameters.EMPTY); diff --git a/src/main/java/org/greenbytes/http/sfv/InnerList.java b/src/main/java/org/greenbytes/http/sfv/InnerList.java index a63c0ec..1ef0b4f 100644 --- a/src/main/java/org/greenbytes/http/sfv/InnerList.java +++ b/src/main/java/org/greenbytes/http/sfv/InnerList.java @@ -7,8 +7,8 @@ * Represents an Inner List. * * @see Section 3.1.1 - * of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#inner-list">Section 3.1.1 + * of RFC 9651 */ public class InnerList implements ListElement>>, Parameterizable>> { diff --git a/src/main/java/org/greenbytes/http/sfv/IntegerItem.java b/src/main/java/org/greenbytes/http/sfv/IntegerItem.java index 39e6ca9..959f193 100644 --- a/src/main/java/org/greenbytes/http/sfv/IntegerItem.java +++ b/src/main/java/org/greenbytes/http/sfv/IntegerItem.java @@ -5,8 +5,8 @@ /** * Represents an Integer. * - * @see Section - * 3.3.1 of RFC 8941 + * @see Section + * 3.3.1 of RFC 9651 */ public class IntegerItem implements NumberItem { diff --git a/src/main/java/org/greenbytes/http/sfv/Item.java b/src/main/java/org/greenbytes/http/sfv/Item.java index 4b66f42..24a9192 100644 --- a/src/main/java/org/greenbytes/http/sfv/Item.java +++ b/src/main/java/org/greenbytes/http/sfv/Item.java @@ -5,8 +5,8 @@ * * @param * represented Java type - * @see Section 3.3 - * of RFC 8941 + * @see Section 3.3 + * of RFC 9651 */ public interface Item extends ListElement, Parameterizable { diff --git a/src/main/java/org/greenbytes/http/sfv/ListElement.java b/src/main/java/org/greenbytes/http/sfv/ListElement.java index 504b21f..2ce1bed 100644 --- a/src/main/java/org/greenbytes/http/sfv/ListElement.java +++ b/src/main/java/org/greenbytes/http/sfv/ListElement.java @@ -5,8 +5,8 @@ * * @param * represented Java type - * @see Section 3.3 - * of RFC 8941 + * @see Section 3.3 + * of RFC 9651 */ public interface ListElement extends Parameterizable { } diff --git a/src/main/java/org/greenbytes/http/sfv/NumberItem.java b/src/main/java/org/greenbytes/http/sfv/NumberItem.java index e353e22..475883b 100644 --- a/src/main/java/org/greenbytes/http/sfv/NumberItem.java +++ b/src/main/java/org/greenbytes/http/sfv/NumberItem.java @@ -8,11 +8,11 @@ * @param * represented Java type * @see Section - * 3.3.1 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#integer">Section + * 3.3.1 of RFC 9651 * @see Section - * 3.3.2 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#decimal">Section + * 3.3.2 of RFC 9651 */ public interface NumberItem extends Item, LongSupplier { diff --git a/src/main/java/org/greenbytes/http/sfv/OuterList.java b/src/main/java/org/greenbytes/http/sfv/OuterList.java index 52e174d..dd8dbc0 100644 --- a/src/main/java/org/greenbytes/http/sfv/OuterList.java +++ b/src/main/java/org/greenbytes/http/sfv/OuterList.java @@ -6,8 +6,8 @@ /** * Represents a List. * - * @see Section 3.1 - * of RFC 8941 + * @see Section 3.1 + * of RFC 9651 */ public class OuterList implements Type>> { diff --git a/src/main/java/org/greenbytes/http/sfv/Parameterizable.java b/src/main/java/org/greenbytes/http/sfv/Parameterizable.java index 6d74ec3..4fe831f 100644 --- a/src/main/java/org/greenbytes/http/sfv/Parameterizable.java +++ b/src/main/java/org/greenbytes/http/sfv/Parameterizable.java @@ -5,8 +5,8 @@ * * @param * represented Java type - * @see Section - * 3.1.2 of RFC 8941 + * @see Section + * 3.1.2 of RFC 9651 */ public interface Parameterizable extends Type { diff --git a/src/main/java/org/greenbytes/http/sfv/Parameters.java b/src/main/java/org/greenbytes/http/sfv/Parameters.java index e9b68fd..9296798 100644 --- a/src/main/java/org/greenbytes/http/sfv/Parameters.java +++ b/src/main/java/org/greenbytes/http/sfv/Parameters.java @@ -15,8 +15,8 @@ * Represents the Parameters of an Item or an Inner List. * * @see Section - * 3.1.2 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#param">Section + * 3.1.2 of RFC 9651 */ public class Parameters implements Map> { diff --git a/src/main/java/org/greenbytes/http/sfv/Parser.java b/src/main/java/org/greenbytes/http/sfv/Parser.java index 39a7e3e..86edd17 100644 --- a/src/main/java/org/greenbytes/http/sfv/Parser.java +++ b/src/main/java/org/greenbytes/http/sfv/Parser.java @@ -19,8 +19,8 @@ * Implementation of the "Structured Field Values" Parser. * * @see Section 4.2 of - * RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#text-parse">Section 4.2 of + * RFC 9651 */ public class Parser { @@ -626,47 +626,52 @@ private Dictionary internalParseDictionary() { return Dictionary.valueOf(result); } - // protected methods unit testing - - protected static DateItem parseDate(String input) { + /** + * Implementation of "Parsing a Boolean" (assuming no extra characters left + * in input string) + * + * @param input + * {@link String} to parse. + * @return result of parse as {@link Boolean}. + * + * @see Section + * 4.2.8 of RFC 9651 + */ + public static BooleanItem parseBoolean(String input) { Parser p = new Parser(input); - DateItem result = p.internalParseDate(); - p.assertEmpty("Extra characters in string parsed as Date"); + BooleanItem result = p.internalParseBoolean(); + p.assertEmpty("Extra characters at position %d in string parsed as Boolean: '%s'"); return result; } - protected static IntegerItem parseInteger(String input) { - Parser p = new Parser(input); - Item result = p.internalParseIntegerOrDecimal(); - if (!(result instanceof IntegerItem)) { - throw p.complaint("String parsed as Integer '" + input + "' is a Decimal"); - } else { - p.assertEmpty("Extra characters in string parsed as Integer"); - return (IntegerItem) result; - } - } - - protected static DecimalItem parseDecimal(String input) { + /** + * Implementation of "Parsing a Date" (assuming no extra characters left + * in input string) + * + * @param input + * {@link String} to parse. + * @return result of parse as {@link DateItem}. + * + * @see Section + * 4.2.9 of RFC 9651 + */ + static DateItem parseDate(String input) { Parser p = new Parser(input); - Item result = p.internalParseIntegerOrDecimal(); - if (!(result instanceof DecimalItem)) { - throw p.complaint("String parsed as Decimal '" + input + "' is an Integer"); - } else { - p.assertEmpty("Extra characters in string parsed as Decimal"); - return (DecimalItem) result; - } + DateItem result = p.internalParseDate(); + p.assertEmpty("Extra characters at position %d in string parsed as Date: '%s'"); + return result; } - // public instance methods - /** * Implementation of "Parsing a List" * * @return result of parse as {@link OuterList}. * * @see Section - * 4.2.1 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-list">Section + * 4.2.1 of RFC 9651 */ public OuterList parseList() { removeLeadingSP(); @@ -682,8 +687,8 @@ public OuterList parseList() { * @return result of parse as {@link Dictionary}. * * @see Section - * 4.2.2 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-dictionary">Section + * 4.2.2 of RFC 9651 */ public Dictionary parseDictionary() { removeLeadingSP(); @@ -699,8 +704,8 @@ public Dictionary parseDictionary() { * @return result of parse as {@link Item}. * * @see Section - * 4.2.3 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-item">Section + * 4.2.3 of RFC 9651 */ public Item parseItem() { removeLeadingSP(); @@ -721,8 +726,8 @@ public Item parseItem() { * @return result of parse as {@link OuterList}. * * @see Section - * 4.2.1 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-list">Section + * 4.2.1 of RFC 9651 */ public static OuterList parseList(String input) { Parser p = new Parser(input); @@ -740,8 +745,8 @@ public static OuterList parseList(String input) { * @return result of parse as {@link Item}. * * @see Section - * 4.2.1.1 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-item-or-list">Section + * 4.2.1.1 of RFC 9651 */ public static Parameterizable parseItemOrInnerList(String input) { Parser p = new Parser(input); @@ -759,8 +764,8 @@ public static Parameterizable parseItemOrInnerList(String input) { * @return result of parse as {@link InnerList}. * * @see Section - * 4.2.1.2 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-item-or-list">Section + * 4.2.1.2 of RFC 9651 */ public static InnerList parseInnerList(String input) { Parser p = new Parser(input); @@ -778,8 +783,8 @@ public static InnerList parseInnerList(String input) { * @return result of parse as {@link Dictionary}. * * @see Section - * 4.2.2 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-dictionary">Section + * 4.2.2 of RFC 9651 */ public static Dictionary parseDictionary(String input) { Parser p = new Parser(input); @@ -797,8 +802,8 @@ public static Dictionary parseDictionary(String input) { * @return result of parse as {@link Item}. * * @see Section - * 4.2.3 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-item">Section + * 4.2.3 of RFC 9651 */ public static Item parseItem(String input) { Parser p = new Parser(input); @@ -816,8 +821,8 @@ public static Item parseItem(String input) { * @return result of parse as {@link Item}. * * @see Section - * 4.2.3.1 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-bare-item">Section + * 4.2.3.1 of RFC 9651 */ public static Item parseBareItem(String input) { Parser p = new Parser(input); @@ -835,8 +840,8 @@ public static Item parseBareItem(String input) { * @return result of parse as {@link Parameters}. * * @see Section - * 4.2.3.2 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-param">Section + * 4.2.3.2 of RFC 9651 */ public static Parameters parseParameters(String input) { Parser p = new Parser(input); @@ -854,8 +859,8 @@ public static Parameters parseParameters(String input) { * @return result of parse as {@link String}. * * @see Section - * 4.2.3.3 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-key">Section + * 4.2.3.3 of RFC 9651 */ public static String parseKey(String input) { Parser p = new Parser(input); @@ -873,8 +878,8 @@ public static String parseKey(String input) { * @return result of parse as {@link NumberItem}. * * @see Section - * 4.2.4 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-number">Section + * 4.2.4 of RFC 9651 */ public static NumberItem parseIntegerOrDecimal(String input) { Parser p = new Parser(input); @@ -892,8 +897,8 @@ public static NumberItem parseIntegerOrDecimal(String input) { * @return result of parse as {@link StringItem}. * * @see Section - * 4.2.5 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-string">Section + * 4.2.5 of RFC 9651 */ public static StringItem parseString(String input) { Parser p = new Parser(input); @@ -909,6 +914,10 @@ public static StringItem parseString(String input) { * @param input * {@link String} to parse. * @return result of parse as {@link DisplayStringItem}. + * + * @see Section + * 4.2.10 of RFC 9651 */ public static DisplayStringItem parseDisplayString(String input) { Parser p = new Parser(input); @@ -926,8 +935,8 @@ public static DisplayStringItem parseDisplayString(String input) { * @return result of parse as {@link TokenItem}. * * @see Section - * 4.2.6 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-token">Section + * 4.2.6 of RFC 9651 */ public static TokenItem parseToken(String input) { Parser p = new Parser(input); @@ -945,8 +954,8 @@ public static TokenItem parseToken(String input) { * @return result of parse as {@link ByteSequenceItem}. * * @see Section - * 4.2.7 of RFC 8941 + * "https://www.rfc-editor.org/rfc/rfc9651.html#parse-binary">Section + * 4.2.7 of RFC 9651 */ public static ByteSequenceItem parseByteSequence(String input) { Parser p = new Parser(input); @@ -955,25 +964,6 @@ public static ByteSequenceItem parseByteSequence(String input) { return result; } - /** - * Implementation of "Parsing a Boolean" (assuming no extra characters left - * in input string) - * - * @param input - * {@link String} to parse. - * @return result of parse as {@link BooleanItem}. - * - * @see Section - * 4.2.8 of RFC 8941 - */ - public static BooleanItem parseBoolean(String input) { - Parser p = new Parser(input); - BooleanItem result = p.internalParseBoolean(); - p.assertEmpty("Extra characters at position %d in string parsed as Boolean: '%s'"); - return result; - } - // utility methods on CharBuffer private static final char EOD = (char) -1; diff --git a/src/main/java/org/greenbytes/http/sfv/StringItem.java b/src/main/java/org/greenbytes/http/sfv/StringItem.java index a78ef11..cc0323f 100644 --- a/src/main/java/org/greenbytes/http/sfv/StringItem.java +++ b/src/main/java/org/greenbytes/http/sfv/StringItem.java @@ -5,8 +5,8 @@ /** * Represents a String. * - * @see Section - * 3.3.3 of RFC 8941 + * @see Section + * 3.3.3 of RFC 9651 */ public class StringItem implements Item { diff --git a/src/main/java/org/greenbytes/http/sfv/TokenItem.java b/src/main/java/org/greenbytes/http/sfv/TokenItem.java index 575e4e2..fac9dc6 100644 --- a/src/main/java/org/greenbytes/http/sfv/TokenItem.java +++ b/src/main/java/org/greenbytes/http/sfv/TokenItem.java @@ -5,8 +5,8 @@ /** * Represents a Token. * - * @see Section - * 3.3.4 of RFC 8941 + * @see Section + * 3.3.4 of RFC 9651 */ public class TokenItem implements Item { diff --git a/src/main/java/org/greenbytes/http/sfv/Type.java b/src/main/java/org/greenbytes/http/sfv/Type.java index 760e2a9..6af9a8b 100644 --- a/src/main/java/org/greenbytes/http/sfv/Type.java +++ b/src/main/java/org/greenbytes/http/sfv/Type.java @@ -10,8 +10,8 @@ * * @param * represented Java type - * @see Section 3 of RFC - * 8941 + * @see Section 3 of RFC + * 9651 */ public interface Type extends Supplier { diff --git a/src/main/java/org/greenbytes/http/sfv/package-info.java b/src/main/java/org/greenbytes/http/sfv/package-info.java index 43d6c33..3e5b845 100644 --- a/src/main/java/org/greenbytes/http/sfv/package-info.java +++ b/src/main/java/org/greenbytes/http/sfv/package-info.java @@ -1,6 +1,6 @@ /** - * Implementation of IETF - * RFC 8941: Structured Field Values for HTTP. + * Implementation of IETF + * RFC 9651: Structured Field Values for HTTP. *

* Includes a {@link org.greenbytes.http.sfv.Parser} and object equivalents of the defined data types * (see {@link org.greenbytes.http.sfv.Type}). diff --git a/src/test/java/org/greenbytes/http/sfv/Tests.java b/src/test/java/org/greenbytes/http/sfv/Tests.java index a25b968..f8ba4e3 100644 --- a/src/test/java/org/greenbytes/http/sfv/Tests.java +++ b/src/test/java/org/greenbytes/http/sfv/Tests.java @@ -18,7 +18,7 @@ public void testValidIntegers() { String[] tests = new String[] { "0", "1", "-1", "999999999999", "-999999999999", "3;a=b" }; for (String s : tests) { - IntegerItem i = Parser.parseInteger(s); + IntegerItem i = (IntegerItem) Parser.parseIntegerOrDecimal(s); assertEquals("should round-trip", i.serialize(), s); } } @@ -40,7 +40,7 @@ public void testInvalidIntegers() { for (String s : tests) { try { - Parser.parseInteger(s); + Parser.parseIntegerOrDecimal(s); fail("should not parse as integer: " + s); } catch (IllegalArgumentException expected) { } @@ -53,7 +53,7 @@ public void testValidDecimals() { "3.14;this-is-pi" }; for (String s : tests) { - DecimalItem i = Parser.parseDecimal(s); + DecimalItem i = (DecimalItem) Parser.parseIntegerOrDecimal(s); assertEquals("should round-trip", s, i.serialize()); } } @@ -64,7 +64,7 @@ public void testInvalidDecimals() { for (String s : tests) { try { - Parser.parseDecimal(s); + Parser.parseIntegerOrDecimal(s); fail("should not parse as decimal: " + s); } catch (IllegalArgumentException expected) { }