diff --git a/akka-actor/src/main/scala-2.13+/akka/util/ByteString.scala b/akka-actor/src/main/scala-2.13+/akka/util/ByteString.scala index bfe4d9b5ad..64405bdd61 100644 --- a/akka-actor/src/main/scala-2.13+/akka/util/ByteString.scala +++ b/akka-actor/src/main/scala-2.13+/akka/util/ByteString.scala @@ -141,6 +141,9 @@ object ByteString { val empty: ByteString = CompactByteString(Array.empty[Byte]) + /** Java API */ + val emptyByteString: ByteString = empty + def newBuilder: ByteStringBuilder = new ByteStringBuilder /** Java API */ diff --git a/akka-actor/src/main/scala-2.13-/akka/util/ByteString.scala b/akka-actor/src/main/scala-2.13-/akka/util/ByteString.scala index 1b7b8cd144..87c8007e07 100644 --- a/akka-actor/src/main/scala-2.13-/akka/util/ByteString.scala +++ b/akka-actor/src/main/scala-2.13-/akka/util/ByteString.scala @@ -138,6 +138,9 @@ object ByteString { val empty: ByteString = CompactByteString(Array.empty[Byte]) + /** Java API */ + val emptyByteString: ByteString = empty + def newBuilder: ByteStringBuilder = new ByteStringBuilder /** Java API */ diff --git a/akka-docs/src/main/paradox/project/migration-guide-2.5.x-2.6.x.md b/akka-docs/src/main/paradox/project/migration-guide-2.5.x-2.6.x.md index 90252c41df..641539cac5 100644 --- a/akka-docs/src/main/paradox/project/migration-guide-2.5.x-2.6.x.md +++ b/akka-docs/src/main/paradox/project/migration-guide-2.5.x-2.6.x.md @@ -1,5 +1,9 @@ # Migration Guide 2.5.x to 2.6.x +It is now recommended to use @apidoc[akka.util.ByteString]`.emptyByteString()` instead of +@apidoc[akka.util.ByteString]`.empty()` when using Java because @apidoc[akka.util.ByteString]`.empty()` +is [no longer available as a static method](https://github.com/scala/bug/issues/11509) in the artifacts built for Scala 2.13. + ## Scala 2.11 no longer supported If you are still using Scala 2.11 then you must upgrade to 2.12 or 2.13 @@ -184,5 +188,3 @@ instead either run under `/system/localReceptionist` or `/system/clusterReceptio The path change makes it impossible to do a rolling upgrade from 2.5 to 2.6 if you use Akka Typed and the receptionist as the old and the new nodes receptionists will not be able to communicate. - - \ No newline at end of file diff --git a/akka-docs/src/test/java/jdocs/io/UdpConnectedDocTest.java b/akka-docs/src/test/java/jdocs/io/UdpConnectedDocTest.java index d16eb059e0..aa54edb521 100644 --- a/akka-docs/src/test/java/jdocs/io/UdpConnectedDocTest.java +++ b/akka-docs/src/test/java/jdocs/io/UdpConnectedDocTest.java @@ -19,6 +19,9 @@ import akka.io.UdpConnected; import akka.io.UdpConnectedMessage; import akka.io.UdpSO; import akka.util.ByteString; + +import static akka.util.ByteString.emptyByteString; + // #imports public class UdpConnectedDocTest { @@ -79,7 +82,7 @@ public class UdpConnectedDocTest { builder.matchEquals( "send", x -> { - ByteString data = ByteString.empty(); + ByteString data = emptyByteString(); // #send connectionActor.tell(UdpConnectedMessage.send(data), getSelf()); // #send diff --git a/akka-docs/src/test/java/jdocs/stream/BidiFlowDocTest.java b/akka-docs/src/test/java/jdocs/stream/BidiFlowDocTest.java index 0494bf6156..e5ac52c837 100644 --- a/akka-docs/src/test/java/jdocs/stream/BidiFlowDocTest.java +++ b/akka-docs/src/test/java/jdocs/stream/BidiFlowDocTest.java @@ -25,6 +25,7 @@ import akka.stream.javadsl.*; import akka.stream.stage.*; import akka.util.ByteIterator; import akka.util.ByteString; +import static akka.util.ByteString.emptyByteString; import akka.util.ByteStringBuilder; import static org.junit.Assert.assertArrayEquals; @@ -156,7 +157,7 @@ public class BidiFlowDocTest extends AbstractJavaTest { return new GraphStageLogic(shape) { // this holds the received but not yet parsed bytes - private ByteString stash = ByteString.empty(); + private ByteString stash = emptyByteString(); // this holds the current message length or -1 if at a boundary private int needed = -1; diff --git a/akka-docs/src/test/java/jdocs/stream/javadsl/cookbook/RecipeByteStrings.java b/akka-docs/src/test/java/jdocs/stream/javadsl/cookbook/RecipeByteStrings.java index 936d6a2810..714aed7500 100644 --- a/akka-docs/src/test/java/jdocs/stream/javadsl/cookbook/RecipeByteStrings.java +++ b/akka-docs/src/test/java/jdocs/stream/javadsl/cookbook/RecipeByteStrings.java @@ -13,6 +13,7 @@ import akka.stream.javadsl.Source; import akka.stream.stage.*; import akka.testkit.javadsl.TestKit; import akka.util.ByteString; +import static akka.util.ByteString.emptyByteString; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -78,7 +79,7 @@ public class RecipeByteStrings extends RecipeTest { @Override public GraphStageLogic createLogic(Attributes inheritedAttributes) { return new GraphStageLogic(shape) { - private ByteString buffer = ByteString.empty(); + private ByteString buffer = emptyByteString(); { setHandler( @@ -149,7 +150,7 @@ public class RecipeByteStrings extends RecipeTest { assertTrue(chunk.size() <= 2); } - ByteString sum = ByteString.empty(); + ByteString sum = emptyByteString(); for (ByteString chunk : chunks) { sum = sum.concat(chunk); } @@ -244,7 +245,7 @@ public class RecipeByteStrings extends RecipeTest { .runWith(Sink.seq(), mat) .toCompletableFuture() .get(3, TimeUnit.SECONDS); - ByteString acc = ByteString.empty(); + ByteString acc = emptyByteString(); for (ByteString b : got) { acc = acc.concat(b); } diff --git a/akka-docs/src/test/java/jdocs/stream/javadsl/cookbook/RecipeDecompress.java b/akka-docs/src/test/java/jdocs/stream/javadsl/cookbook/RecipeDecompress.java index 2249f3ad61..47adfeb081 100644 --- a/akka-docs/src/test/java/jdocs/stream/javadsl/cookbook/RecipeDecompress.java +++ b/akka-docs/src/test/java/jdocs/stream/javadsl/cookbook/RecipeDecompress.java @@ -12,6 +12,7 @@ import akka.stream.javadsl.Compression; import akka.stream.javadsl.Source; import akka.testkit.javadsl.TestKit; import akka.util.ByteString; +import static akka.util.ByteString.emptyByteString; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -51,7 +52,7 @@ public class RecipeDecompress extends RecipeTest { ByteString decompressedData = decompressedStream - .runFold(ByteString.empty(), ByteString::concat, mat) + .runFold(emptyByteString(), ByteString::concat, mat) .toCompletableFuture() .get(1, TimeUnit.SECONDS); String decompressedString = decompressedData.utf8String(); diff --git a/akka-stream-tests/src/test/java/akka/stream/javadsl/TcpTest.java b/akka-stream-tests/src/test/java/akka/stream/javadsl/TcpTest.java index 82ae95798a..fcc8ccf4d8 100644 --- a/akka-stream-tests/src/test/java/akka/stream/javadsl/TcpTest.java +++ b/akka-stream-tests/src/test/java/akka/stream/javadsl/TcpTest.java @@ -19,6 +19,7 @@ import akka.testkit.SocketUtil; import akka.testkit.javadsl.EventFilter; import akka.testkit.javadsl.TestKit; import akka.util.ByteString; +import static akka.util.ByteString.emptyByteString; import org.junit.ClassRule; import org.junit.Test; @@ -85,7 +86,7 @@ public class TcpTest extends StreamTest { Tcp.get(system) .outgoingConnection(serverAddress.getHostString(), serverAddress.getPort())) .runFold( - ByteString.empty(), + emptyByteString(), new Function2() { public ByteString apply(ByteString acc, ByteString elem) { return acc.concat(elem);