@ -36,15 +36,20 @@ import org.springframework.http.codec.CodecConfigurer;
@@ -36,15 +36,20 @@ import org.springframework.http.codec.CodecConfigurer;
import org.springframework.http.codec.DecoderHttpMessageReader ;
import org.springframework.http.codec.EncoderHttpMessageWriter ;
import org.springframework.http.codec.FormHttpMessageReader ;
import org.springframework.http.codec.FormHttpMessageWriter ;
import org.springframework.http.codec.HttpMessageReader ;
import org.springframework.http.codec.HttpMessageWriter ;
import org.springframework.http.codec.ResourceHttpMessageReader ;
import org.springframework.http.codec.ResourceHttpMessageWriter ;
import org.springframework.http.codec.ServerSentEventHttpMessageReader ;
import org.springframework.http.codec.json.AbstractJackson2Decoder ;
import org.springframework.http.codec.json.Jackson2JsonDecoder ;
import org.springframework.http.codec.json.Jackson2JsonEncoder ;
import org.springframework.http.codec.json.Jackson2SmileDecoder ;
import org.springframework.http.codec.json.Jackson2SmileEncoder ;
import org.springframework.http.codec.multipart.MultipartHttpMessageReader ;
import org.springframework.http.codec.multipart.MultipartHttpMessageWriter ;
import org.springframework.http.codec.multipart.SynchronossPartHttpMessageReader ;
import org.springframework.http.codec.protobuf.ProtobufDecoder ;
import org.springframework.http.codec.protobuf.ProtobufEncoder ;
import org.springframework.http.codec.protobuf.ProtobufHttpMessageWriter ;
@ -70,6 +75,8 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
@@ -70,6 +75,8 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
private static final boolean protobufPresent ;
static final boolean synchronossMultipartPresent ;
static {
ClassLoader classLoader = BaseCodecConfigurer . class . getClassLoader ( ) ;
jackson2Present = ClassUtils . isPresent ( "com.fasterxml.jackson.databind.ObjectMapper" , classLoader ) & &
@ -77,6 +84,7 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
@@ -77,6 +84,7 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
jackson2SmilePresent = ClassUtils . isPresent ( "com.fasterxml.jackson.dataformat.smile.SmileFactory" , classLoader ) ;
jaxb2Present = ClassUtils . isPresent ( "javax.xml.bind.Binder" , classLoader ) ;
protobufPresent = ClassUtils . isPresent ( "com.google.protobuf.Message" , classLoader ) ;
synchronossMultipartPresent = ClassUtils . isPresent ( "org.synchronoss.cloud.nio.multipart.NioMultipartParser" , classLoader ) ;
}
@ -101,7 +109,8 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
@@ -101,7 +109,8 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
@Nullable
private Integer maxInMemorySize ;
private boolean enableLoggingRequestDetails = false ;
@Nullable
private Boolean enableLoggingRequestDetails ;
private boolean registerDefaults = true ;
@ -171,7 +180,8 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
@@ -171,7 +180,8 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
}
@Override
public boolean isEnableLoggingRequestDetails ( ) {
@Nullable
public Boolean isEnableLoggingRequestDetails ( ) {
return this . enableLoggingRequestDetails ;
}
@ -191,48 +201,107 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
@@ -191,48 +201,107 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
return Collections . emptyList ( ) ;
}
List < HttpMessageReader < ? > > readers = new ArrayList < > ( ) ;
readers . add ( new DecoderHttpMessageReader < > ( init ( new ByteArrayDecoder ( ) ) ) ) ;
readers . add ( new DecoderHttpMessageReader < > ( init ( new ByteBufferDecoder ( ) ) ) ) ;
readers . add ( new DecoderHttpMessageReader < > ( init ( new DataBufferDecoder ( ) ) ) ) ;
readers . add ( new ResourceHttpMessageReader ( init ( new ResourceDecoder ( ) ) ) ) ;
readers . add ( new DecoderHttpMessageReader < > ( init ( StringDecoder . textPlainOnly ( ) ) ) ) ;
addCodec ( readers , new DecoderHttpMessageReader < > ( new ByteArrayDecoder ( ) ) ) ;
addCodec ( readers , new DecoderHttpMessageReader < > ( new ByteBufferDecoder ( ) ) ) ;
addCodec ( readers , new DecoderHttpMessageReader < > ( new DataBufferDecoder ( ) ) ) ;
addCodec ( readers , new ResourceHttpMessageReader ( new ResourceDecoder ( ) ) ) ;
addCodec ( readers , new DecoderHttpMessageReader < > ( StringDecoder . textPlainOnly ( ) ) ) ;
if ( protobufPresent ) {
Decoder < ? > decoder = this . protobufDecoder ! = null ? this . protobufDecoder : init ( new ProtobufDecoder ( ) ) ;
readers . add ( new DecoderHttpMessageReader < > ( decoder ) ) ;
}
FormHttpMessageReader formReader = new FormHttpMessageReader ( ) ;
if ( this . maxInMemorySize ! = null ) {
formReader . setMaxInMemorySize ( this . maxInMemorySize ) ;
Decoder < ? > decoder = this . protobufDecoder ! = null ? this . protobufDecoder : new ProtobufDecoder ( ) ;
addCodec ( readers , new DecoderHttpMessageReader < > ( decoder ) ) ;
}
formReader . setEnableLoggingRequestDetails ( this . enableLoggingRequestDetails ) ;
readers . add ( formReader ) ;
addCodec ( readers , new FormHttpMessageReader ( ) ) ;
// client vs server..
extendTypedReaders ( readers ) ;
return readers ;
}
private < T extends Decoder < ? > > T init ( T decoder ) {
if ( this . maxInMemorySize ! = null ) {
if ( decoder instanceof AbstractDataBufferDecoder ) {
( ( AbstractDataBufferDecoder < ? > ) decoder ) . setMaxInMemorySize ( this . maxInMemorySize ) ;
/ * *
* Initialize a codec and add it to the List .
* @since 5 . 1 . 13
* /
protected < T > void addCodec ( List < T > codecs , T codec ) {
initCodec ( codec ) ;
codecs . add ( codec ) ;
}
/ * *
* Apply { @link # maxInMemorySize ( ) } and { @link # enableLoggingRequestDetails } ,
* if configured by the application , to the given codec , including any
* codec it contains .
* /
private void initCodec ( @Nullable Object codec ) {
if ( codec instanceof DecoderHttpMessageReader ) {
codec = ( ( DecoderHttpMessageReader ) codec ) . getDecoder ( ) ;
}
else if ( codec instanceof ServerSentEventHttpMessageReader ) {
codec = ( ( ServerSentEventHttpMessageReader ) codec ) . getDecoder ( ) ;
}
if ( codec = = null ) {
return ;
}
Integer size = this . maxInMemorySize ;
if ( size ! = null ) {
if ( codec instanceof AbstractDataBufferDecoder ) {
( ( AbstractDataBufferDecoder < ? > ) codec ) . setMaxInMemorySize ( size ) ;
}
if ( decoder instanceof ProtobufDecoder ) {
( ( ProtobufDecoder ) decoder ) . setMaxMessageSize ( this . maxInMemorySize ) ;
if ( protobufPresent ) {
if ( codec instanceof ProtobufDecoder ) {
( ( ProtobufDecoder ) codec ) . setMaxMessageSize ( size ) ;
}
}
if ( jackson2Present ) {
if ( decoder instanceof AbstractJackson2Decoder ) {
( ( AbstractJackson2Decoder ) decoder ) . setMaxInMemorySize ( this . maxInMemorySize ) ;
if ( codec instanceof AbstractJackson2Decoder ) {
( ( AbstractJackson2Decoder ) codec ) . setMaxInMemorySize ( s ize) ;
}
}
if ( jaxb2Present ) {
if ( decoder instanceof Jaxb2XmlDecoder ) {
( ( Jaxb2XmlDecoder ) decoder ) . setMaxInMemorySize ( this . maxInMemorySize ) ;
if ( codec instanceof Jaxb2XmlDecoder ) {
( ( Jaxb2XmlDecoder ) codec ) . setMaxInMemorySize ( s ize) ;
}
}
if ( codec instanceof FormHttpMessageReader ) {
( ( FormHttpMessageReader ) codec ) . setMaxInMemorySize ( size ) ;
}
if ( synchronossMultipartPresent ) {
if ( codec instanceof SynchronossPartHttpMessageReader ) {
( ( SynchronossPartHttpMessageReader ) codec ) . setMaxInMemorySize ( size ) ;
}
}
}
Boolean enable = this . enableLoggingRequestDetails ;
if ( enable ! = null ) {
if ( codec instanceof FormHttpMessageReader ) {
( ( FormHttpMessageReader ) codec ) . setEnableLoggingRequestDetails ( enable ) ;
}
if ( codec instanceof MultipartHttpMessageReader ) {
( ( MultipartHttpMessageReader ) codec ) . setEnableLoggingRequestDetails ( enable ) ;
}
if ( synchronossMultipartPresent ) {
if ( codec instanceof SynchronossPartHttpMessageReader ) {
( ( SynchronossPartHttpMessageReader ) codec ) . setEnableLoggingRequestDetails ( enable ) ;
}
}
if ( codec instanceof FormHttpMessageWriter ) {
( ( FormHttpMessageWriter ) codec ) . setEnableLoggingRequestDetails ( enable ) ;
}
if ( codec instanceof MultipartHttpMessageWriter ) {
( ( MultipartHttpMessageWriter ) codec ) . setEnableLoggingRequestDetails ( enable ) ;
}
}
if ( codec instanceof MultipartHttpMessageReader ) {
initCodec ( ( ( MultipartHttpMessageReader ) codec ) . getPartReader ( ) ) ;
}
else if ( codec instanceof MultipartHttpMessageWriter ) {
initCodec ( ( ( MultipartHttpMessageWriter ) codec ) . getFormWriter ( ) ) ;
}
return decoder ;
}
/ * *
@ -250,16 +319,19 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
@@ -250,16 +319,19 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
}
List < HttpMessageReader < ? > > readers = new ArrayList < > ( ) ;
if ( jackson2Present ) {
readers . add ( new DecoderHttpMessageReader < > ( init ( getJackson2JsonDecoder ( ) ) ) ) ;
addCodec ( readers , new DecoderHttpMessageReader < > ( getJackson2JsonDecoder ( ) ) ) ;
}
if ( jackson2SmilePresent ) {
readers . add ( new DecoderHttpMessageReader < > ( init ( new Jackson2SmileDecoder ( ) ) ) ) ;
addCodec ( readers , new DecoderHttpMessageReader < > ( new Jackson2SmileDecoder ( ) ) ) ;
}
if ( jaxb2Present ) {
Decoder < ? > decoder = this . jaxb2Decoder ! = null ? this . jaxb2Decoder : init ( new Jaxb2XmlDecoder ( ) ) ;
readers . add ( new DecoderHttpMessageReader < > ( decoder ) ) ;
Decoder < ? > decoder = this . jaxb2Decoder ! = null ? this . jaxb2Decoder : new Jaxb2XmlDecoder ( ) ;
addCodec ( readers , new DecoderHttpMessageReader < > ( decoder ) ) ;
}
// client vs server..
extendObjectReaders ( readers ) ;
return readers ;
}
@ -276,9 +348,9 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
@@ -276,9 +348,9 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
if ( ! this . registerDefaults ) {
return Collections . emptyList ( ) ;
}
List < HttpMessageReader < ? > > result = new ArrayList < > ( ) ;
result . add ( new DecoderHttpMessageReader < > ( init ( StringDecoder . allMimeTypes ( ) ) ) ) ;
return result ;
List < HttpMessageReader < ? > > reader s = new ArrayList < > ( ) ;
addCodec ( readers , new DecoderHttpMessageReader < > ( StringDecoder . allMimeTypes ( ) ) ) ;
return reader s ;
}
/ * *
@ -365,11 +437,17 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
@@ -365,11 +437,17 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
// Accessors for use in subclasses...
protected Decoder < ? > getJackson2JsonDecoder ( ) {
return ( this . jackson2JsonDecoder ! = null ? this . jackson2JsonDecoder : new Jackson2JsonDecoder ( ) ) ;
if ( this . jackson2JsonDecoder = = null ) {
this . jackson2JsonDecoder = new Jackson2JsonDecoder ( ) ;
}
return this . jackson2JsonDecoder ;
}
protected Encoder < ? > getJackson2JsonEncoder ( ) {
return ( this . jackson2JsonEncoder ! = null ? this . jackson2JsonEncoder : new Jackson2JsonEncoder ( ) ) ;
if ( this . jackson2JsonEncoder = = null ) {
this . jackson2JsonEncoder = new Jackson2JsonEncoder ( ) ;
}
return this . jackson2JsonEncoder ;
}
}