Merge pull request #19250 from ktoso/wip-fix-multipart-model-java6-ktoso
!htc fix multipart model (java6 had trouble)
This commit is contained in:
commit
ddceadff7b
3 changed files with 30 additions and 15 deletions
|
|
@ -69,7 +69,7 @@ public interface Multipart {
|
||||||
* Basic model for multipart content as defined by http://tools.ietf.org/html/rfc2046.
|
* Basic model for multipart content as defined by http://tools.ietf.org/html/rfc2046.
|
||||||
*/
|
*/
|
||||||
interface General extends Multipart {
|
interface General extends Multipart {
|
||||||
Source<? extends Multipart.General.BodyPart, Object> getParts();
|
Source<? extends Multipart.General.BodyPart, Object> getGeneralParts();
|
||||||
|
|
||||||
Future<Multipart.General.Strict> toStrict(long timeoutMillis, Materializer materializer);
|
Future<Multipart.General.Strict> toStrict(long timeoutMillis, Materializer materializer);
|
||||||
|
|
||||||
|
|
@ -92,7 +92,7 @@ public interface Multipart {
|
||||||
* All parts must have distinct names. (This is not verified!)
|
* All parts must have distinct names. (This is not verified!)
|
||||||
*/
|
*/
|
||||||
interface FormData extends Multipart {
|
interface FormData extends Multipart {
|
||||||
Source<? extends Multipart.FormData.BodyPart, Object> getParts();
|
Source<? extends Multipart.FormData.BodyPart, Object> getFormDataParts();
|
||||||
|
|
||||||
Future<Multipart.FormData.Strict> toStrict(long timeoutMillis, Materializer materializer);
|
Future<Multipart.FormData.Strict> toStrict(long timeoutMillis, Materializer materializer);
|
||||||
|
|
||||||
|
|
@ -120,7 +120,7 @@ public interface Multipart {
|
||||||
* https://tools.ietf.org/html/rfc7233#section-5.4.1 and https://tools.ietf.org/html/rfc7233#appendix-A
|
* https://tools.ietf.org/html/rfc7233#section-5.4.1 and https://tools.ietf.org/html/rfc7233#appendix-A
|
||||||
*/
|
*/
|
||||||
interface ByteRanges extends Multipart {
|
interface ByteRanges extends Multipart {
|
||||||
Source<? extends Multipart.ByteRanges.BodyPart, Object> getParts();
|
Source<? extends Multipart.ByteRanges.BodyPart, Object> getByteRangeParts();
|
||||||
|
|
||||||
Future<Multipart.ByteRanges.Strict> toStrict(long timeoutMillis, Materializer materializer);
|
Future<Multipart.ByteRanges.Strict> toStrict(long timeoutMillis, Materializer materializer);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
package akka.http.scaladsl.model
|
package akka.http.scaladsl.model
|
||||||
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import scala.collection.immutable.VectorBuilder
|
|
||||||
import scala.concurrent.duration.FiniteDuration
|
import scala.concurrent.duration.FiniteDuration
|
||||||
import scala.concurrent.Future
|
import scala.concurrent.Future
|
||||||
import scala.collection.immutable
|
import scala.collection.immutable
|
||||||
|
|
@ -203,8 +202,13 @@ object Multipart {
|
||||||
strictify(parts)(_.toStrict(timeout)).fast.map(General.Strict(mediaType, _))
|
strictify(parts)(_.toStrict(timeout)).fast.map(General.Strict(mediaType, _))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: bring back once JDK7+, overload resolution in JDK6 freaks out with getParts overriding with more specific generic param
|
||||||
|
// /** Java API */
|
||||||
|
// override def getParts: JSource[_ <: jm.Multipart.General.BodyPart, AnyRef] =
|
||||||
|
// super.getParts.asInstanceOf[JSource[_ <: jm.Multipart.General.BodyPart, AnyRef]]
|
||||||
|
|
||||||
/** Java API */
|
/** Java API */
|
||||||
override def getParts: JSource[_ <: jm.Multipart.General.BodyPart, AnyRef] =
|
override def getGeneralParts: JSource[_ <: jm.Multipart.General.BodyPart, AnyRef] =
|
||||||
super.getParts.asInstanceOf[JSource[_ <: jm.Multipart.General.BodyPart, AnyRef]]
|
super.getParts.asInstanceOf[JSource[_ <: jm.Multipart.General.BodyPart, AnyRef]]
|
||||||
|
|
||||||
/** Java API */
|
/** Java API */
|
||||||
|
|
@ -216,8 +220,8 @@ object Multipart {
|
||||||
|
|
||||||
def apply(_mediaType: MediaType.Multipart, _parts: Source[Multipart.General.BodyPart, Any]): Multipart.General =
|
def apply(_mediaType: MediaType.Multipart, _parts: Source[Multipart.General.BodyPart, Any]): Multipart.General =
|
||||||
new Multipart.General {
|
new Multipart.General {
|
||||||
def mediaType = _mediaType
|
override def mediaType = _mediaType
|
||||||
def parts = _parts
|
override def parts = _parts
|
||||||
override def toString = s"General($mediaType, $parts)"
|
override def toString = s"General($mediaType, $parts)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -229,7 +233,7 @@ object Multipart {
|
||||||
*/
|
*/
|
||||||
case class Strict(mediaType: MediaType.Multipart, strictParts: immutable.Seq[Multipart.General.BodyPart.Strict])
|
case class Strict(mediaType: MediaType.Multipart, strictParts: immutable.Seq[Multipart.General.BodyPart.Strict])
|
||||||
extends Multipart.General with Multipart.Strict with jm.Multipart.General.Strict {
|
extends Multipart.General with Multipart.Strict with jm.Multipart.General.Strict {
|
||||||
def parts: Source[Multipart.General.BodyPart.Strict, Any] = Source(strictParts)
|
override def parts: Source[Multipart.General.BodyPart.Strict, Any] = Source(strictParts)
|
||||||
override def toStrict(timeout: FiniteDuration)(implicit fm: Materializer) = FastFuture.successful(this)
|
override def toStrict(timeout: FiniteDuration)(implicit fm: Materializer) = FastFuture.successful(this)
|
||||||
override def productPrefix = "General.Strict"
|
override def productPrefix = "General.Strict"
|
||||||
|
|
||||||
|
|
@ -246,7 +250,7 @@ object Multipart {
|
||||||
* Body part of the [[General]] model.
|
* Body part of the [[General]] model.
|
||||||
*/
|
*/
|
||||||
sealed abstract class BodyPart extends Multipart.BodyPart with jm.Multipart.General.BodyPart {
|
sealed abstract class BodyPart extends Multipart.BodyPart with jm.Multipart.General.BodyPart {
|
||||||
def toStrict(timeout: FiniteDuration)(implicit fm: Materializer): Future[Multipart.General.BodyPart.Strict] = {
|
override def toStrict(timeout: FiniteDuration)(implicit fm: Materializer): Future[Multipart.General.BodyPart.Strict] = {
|
||||||
import fm.executionContext
|
import fm.executionContext
|
||||||
entity.toStrict(timeout).map(BodyPart.Strict(_, headers))
|
entity.toStrict(timeout).map(BodyPart.Strict(_, headers))
|
||||||
}
|
}
|
||||||
|
|
@ -305,9 +309,9 @@ object Multipart {
|
||||||
* All parts must have distinct names. (This is not verified!)
|
* All parts must have distinct names. (This is not verified!)
|
||||||
*/
|
*/
|
||||||
sealed abstract class FormData extends Multipart with jm.Multipart.FormData {
|
sealed abstract class FormData extends Multipart with jm.Multipart.FormData {
|
||||||
def mediaType = MediaTypes.`multipart/form-data`
|
override def mediaType = MediaTypes.`multipart/form-data`
|
||||||
|
|
||||||
def parts: Source[Multipart.FormData.BodyPart, Any]
|
override def parts: Source[Multipart.FormData.BodyPart, Any]
|
||||||
|
|
||||||
def toStrict(timeout: FiniteDuration)(implicit fm: Materializer): Future[Multipart.FormData.Strict] = {
|
def toStrict(timeout: FiniteDuration)(implicit fm: Materializer): Future[Multipart.FormData.Strict] = {
|
||||||
import fm.executionContext
|
import fm.executionContext
|
||||||
|
|
@ -333,6 +337,8 @@ object Multipart {
|
||||||
def apply(_parts: Source[Multipart.FormData.BodyPart, Any]): Multipart.FormData =
|
def apply(_parts: Source[Multipart.FormData.BodyPart, Any]): Multipart.FormData =
|
||||||
new Multipart.FormData {
|
new Multipart.FormData {
|
||||||
def parts = _parts
|
def parts = _parts
|
||||||
|
override def getFormDataParts: JSource[jm.Multipart.FormData.BodyPart, AnyRef] =
|
||||||
|
parts.asJava.asInstanceOf[JSource[_ <: jm.Multipart.FormData.BodyPart, AnyRef]]
|
||||||
override def toString = s"FormData($parts)"
|
override def toString = s"FormData($parts)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -350,7 +356,9 @@ object Multipart {
|
||||||
*/
|
*/
|
||||||
case class Strict(strictParts: immutable.Seq[Multipart.FormData.BodyPart.Strict])
|
case class Strict(strictParts: immutable.Seq[Multipart.FormData.BodyPart.Strict])
|
||||||
extends FormData with Multipart.Strict with jm.Multipart.FormData.Strict {
|
extends FormData with Multipart.Strict with jm.Multipart.FormData.Strict {
|
||||||
def parts: Source[Multipart.FormData.BodyPart.Strict, Any] = Source(strictParts)
|
override def parts: Source[Multipart.FormData.BodyPart.Strict, Any] = Source(strictParts)
|
||||||
|
override def getFormDataParts: JSource[jm.Multipart.FormData.BodyPart, AnyRef] =
|
||||||
|
parts.asJava.asInstanceOf[JSource[_ <: jm.Multipart.FormData.BodyPart, AnyRef]]
|
||||||
override def toStrict(timeout: FiniteDuration)(implicit fm: Materializer) = FastFuture.successful(this)
|
override def toStrict(timeout: FiniteDuration)(implicit fm: Materializer) = FastFuture.successful(this)
|
||||||
override def productPrefix = "FormData.Strict"
|
override def productPrefix = "FormData.Strict"
|
||||||
|
|
||||||
|
|
@ -361,6 +369,7 @@ object Multipart {
|
||||||
/** Java API */
|
/** Java API */
|
||||||
override def getStrictParts: java.lang.Iterable[jm.Multipart.FormData.BodyPart.Strict] =
|
override def getStrictParts: java.lang.Iterable[jm.Multipart.FormData.BodyPart.Strict] =
|
||||||
super.getStrictParts.asInstanceOf[java.lang.Iterable[jm.Multipart.FormData.BodyPart.Strict]]
|
super.getStrictParts.asInstanceOf[java.lang.Iterable[jm.Multipart.FormData.BodyPart.Strict]]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -475,7 +484,9 @@ object Multipart {
|
||||||
|
|
||||||
def apply(_parts: Source[Multipart.ByteRanges.BodyPart, Any]): Multipart.ByteRanges =
|
def apply(_parts: Source[Multipart.ByteRanges.BodyPart, Any]): Multipart.ByteRanges =
|
||||||
new Multipart.ByteRanges {
|
new Multipart.ByteRanges {
|
||||||
def parts = _parts
|
override def parts = _parts
|
||||||
|
override def getByteRangeParts: JSource[jm.Multipart.ByteRanges.BodyPart, AnyRef] =
|
||||||
|
parts.asJava.asInstanceOf[JSource[jm.Multipart.ByteRanges.BodyPart, AnyRef]]
|
||||||
override def toString = s"ByteRanges($parts)"
|
override def toString = s"ByteRanges($parts)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -484,7 +495,7 @@ object Multipart {
|
||||||
*/
|
*/
|
||||||
case class Strict(strictParts: immutable.Seq[Multipart.ByteRanges.BodyPart.Strict])
|
case class Strict(strictParts: immutable.Seq[Multipart.ByteRanges.BodyPart.Strict])
|
||||||
extends Multipart.ByteRanges with Multipart.Strict with jm.Multipart.ByteRanges.Strict {
|
extends Multipart.ByteRanges with Multipart.Strict with jm.Multipart.ByteRanges.Strict {
|
||||||
def parts: Source[Multipart.ByteRanges.BodyPart.Strict, Any] = Source(strictParts)
|
override def parts: Source[Multipart.ByteRanges.BodyPart.Strict, Any] = Source(strictParts)
|
||||||
override def toStrict(timeout: FiniteDuration)(implicit fm: Materializer) = FastFuture.successful(this)
|
override def toStrict(timeout: FiniteDuration)(implicit fm: Materializer) = FastFuture.successful(this)
|
||||||
override def productPrefix = "ByteRanges.Strict"
|
override def productPrefix = "ByteRanges.Strict"
|
||||||
|
|
||||||
|
|
@ -495,6 +506,9 @@ object Multipart {
|
||||||
/** Java API */
|
/** Java API */
|
||||||
override def getStrictParts: java.lang.Iterable[jm.Multipart.ByteRanges.BodyPart.Strict] =
|
override def getStrictParts: java.lang.Iterable[jm.Multipart.ByteRanges.BodyPart.Strict] =
|
||||||
super.getStrictParts.asInstanceOf[java.lang.Iterable[jm.Multipart.ByteRanges.BodyPart.Strict]]
|
super.getStrictParts.asInstanceOf[java.lang.Iterable[jm.Multipart.ByteRanges.BodyPart.Strict]]
|
||||||
|
|
||||||
|
override def getByteRangeParts: JSource[jm.Multipart.ByteRanges.BodyPart, AnyRef] =
|
||||||
|
parts.asJava.asInstanceOf[JSource[jm.Multipart.ByteRanges.BodyPart.Strict, AnyRef]]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,8 @@ public class TcpTest extends StreamTest {
|
||||||
} catch (BindFailedException e) {
|
} catch (BindFailedException e) {
|
||||||
// expected
|
// expected
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new AssertionError("failed", e);
|
// throw new AssertionError("failed", e); // TODO: bring back once we're JDK7+
|
||||||
|
throw new RuntimeException("failed", e);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue