Java 14 - Change in InetSocketAddress.toString() behaviour seems to be causing issues
Alan Bateman
Alan.Bateman at oracle.com
Mon Mar 30 08:01:17 UTC 2020
On 28/03/2020 06:43, Jaikiran Pai wrote:
>
> There's an issue raised in Quarkus repo[1], where Apache Kafka
> (embedded) no longer starts on Java 14. From what I can see the root
> cause is this[2].
>
> JDK-8225499[3] changed the implementation (and even the javadoc) of
> the InetSocketAddress.toString()
>
For the Quarkus/Kafka issue, do you know if it really needs to parse the
String representation? Just curious why it doesn't use getHostString. To
my knowledge anyway, this is the first report of an issue with this
spec/implementation change. It's a reminder that we need a lot more
testing of the JDK early access builds to gauge the impact of fixes like
this.
As I think you've found, the spec/implementation change in Java SE 14
has two parts.
The change to surround an IPv6 literal address (and maybe the scope ID)
in square brackets. Anything that parses a string that encodes an IP
address and port, say the host component in a URI string, will have seen
this already.
The change to concatenate "/<unresolved>" to unresolved addresses. I
think it's important to observe that an InetSocketAddress can be created
with nonsensical input so it's easy to confuse code that parses the
string representation, e.g. new InetSocketAddress("java.com/1.2.3.4",
80) creates an InetSocketAddress that is unresolved but its string
representation (when run on JDK 13 or older) would suggest otherwise.
I'll have to defer to Julia, Daniel and Chris to see what other options
were considered. I could imagine conditionally adding ""/<unresolved>"
based on whether host string contains slash and/or colon characters.
That might reduce the compatibility impact but at the cost of additional
complexity and/or non-obvious failures in code that encounter
nonsensical string on rare occasions.
-Alan
More information about the net-dev
mailing list