Skip to content

Commit

Permalink
Merge pull request #2 from spring-projects/master
Browse files Browse the repository at this point in the history
pull latest
  • Loading branch information
lifejwang11 committed Jul 2, 2020
2 parents ddbeef8 + f13ab6d commit a1615e0
Show file tree
Hide file tree
Showing 28 changed files with 656 additions and 103 deletions.
Expand Up @@ -44,6 +44,7 @@
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.annotation.ConfigurationCondition.ConfigurationPhase;
import org.springframework.core.SpringProperties;
import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;
Expand All @@ -68,6 +69,7 @@
* @author Juergen Hoeller
* @author Phillip Webb
* @author Sam Brannen
* @author Sebastien Deleuze
* @since 3.0
* @see ConfigurationClassParser
*/
Expand All @@ -77,6 +79,13 @@ class ConfigurationClassBeanDefinitionReader {

private static final ScopeMetadataResolver scopeMetadataResolver = new AnnotationScopeMetadataResolver();

/**
* Boolean flag controlled by a {@code spring.xml.ignore} system property that instructs Spring to
* ignore XML, i.e. to not initialize the XML-related infrastructure.
* <p>The default is "false".
*/
private static final boolean shouldIgnoreXml = SpringProperties.getFlag("spring.xml.ignore");

private final BeanDefinitionRegistry registry;

private final SourceExtractor sourceExtractor;
Expand Down Expand Up @@ -349,6 +358,9 @@ private void loadBeanDefinitionsFromImportedResources(
// When clearly asking for Groovy, that's what they'll get...
readerClass = GroovyBeanDefinitionReader.class;
}
else if (shouldIgnoreXml) {
throw new UnsupportedOperationException("XML support disabled");
}
else {
// Primarily ".xml" files but for any other extension as well
readerClass = XmlBeanDefinitionReader.class;
Expand Down
Expand Up @@ -916,7 +916,9 @@ protected void finishRefresh() {
publishEvent(new ContextRefreshedEvent(this));

// Participate in LiveBeansView MBean, if active.
LiveBeansView.registerApplicationContext(this);
if (!IN_NATIVE_IMAGE) {
LiveBeansView.registerApplicationContext(this);
}
}

/**
Expand Down Expand Up @@ -1024,7 +1026,9 @@ protected void doClose() {
logger.debug("Closing " + this);
}

LiveBeansView.unregisterApplicationContext(this);
if (!IN_NATIVE_IMAGE) {
LiveBeansView.unregisterApplicationContext(this);
}

try {
// Publish shutdown event.
Expand Down
Expand Up @@ -504,7 +504,7 @@ public static boolean release(@Nullable DataBuffer dataBuffer) {
catch (IllegalStateException ex) {
// Avoid dependency on Netty: IllegalReferenceCountException
if (logger.isDebugEnabled()) {
logger.debug("Failed to release PooledDataBuffer", ex);
logger.debug("Failed to release PooledDataBuffer: " + dataBuffer, ex);
}
return false;
}
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -22,6 +22,7 @@
import org.apache.commons.logging.LogFactory;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.SpringProperties;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;

Expand All @@ -34,11 +35,19 @@
* See {@link org.springframework.jdbc.core.JdbcTemplate}.
*
* @author Juergen Hoeller
* @author Sebastien Deleuze
* @since 28.11.2003
* @see org.springframework.jdbc.core.JdbcTemplate
*/
public abstract class JdbcAccessor implements InitializingBean {

/**
* Boolean flag controlled by a {@code spring.xml.ignore} system property that instructs Spring to
* ignore XML, i.e. to not initialize the XML-related infrastructure.
* <p>The default is "false".
*/
private static final boolean shouldIgnoreXml = SpringProperties.getFlag("spring.xml.ignore");

/** Logger available to subclasses. */
protected final Log logger = LogFactory.getLog(getClass());

Expand Down Expand Up @@ -87,7 +96,9 @@ protected DataSource obtainDataSource() {
* @see java.sql.DatabaseMetaData#getDatabaseProductName()
*/
public void setDatabaseProductName(String dbName) {
this.exceptionTranslator = new SQLErrorCodeSQLExceptionTranslator(dbName);
if (!shouldIgnoreXml) {
this.exceptionTranslator = new SQLErrorCodeSQLExceptionTranslator(dbName);
}
}

/**
Expand Down Expand Up @@ -118,7 +129,10 @@ public SQLExceptionTranslator getExceptionTranslator() {
exceptionTranslator = this.exceptionTranslator;
if (exceptionTranslator == null) {
DataSource dataSource = getDataSource();
if (dataSource != null) {
if (shouldIgnoreXml) {
exceptionTranslator = new SQLExceptionSubclassTranslator();
}
else if (dataSource != null) {
exceptionTranslator = new SQLErrorCodeSQLExceptionTranslator(dataSource);
}
else {
Expand Down
Expand Up @@ -20,6 +20,7 @@

import javax.sql.DataSource;

import org.springframework.core.SpringProperties;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.lang.Nullable;
Expand All @@ -43,6 +44,7 @@
* may also throw such exceptions in their {@code flush} and {@code beforeCommit} phases.
*
* @author Juergen Hoeller
* @author Sebastien Deleuze
* @since 5.3
* @see DataSourceTransactionManager
* @see #setDataSource
Expand All @@ -51,6 +53,14 @@
@SuppressWarnings("serial")
public class JdbcTransactionManager extends DataSourceTransactionManager {

/**
* Boolean flag controlled by a {@code spring.xml.ignore} system property that instructs Spring to
* ignore XML, i.e. to not initialize the XML-related infrastructure.
* <p>The default is "false".
*/
private static final boolean shouldIgnoreXml = SpringProperties.getFlag("spring.xml.ignore");


@Nullable
private volatile SQLExceptionTranslator exceptionTranslator;

Expand Down Expand Up @@ -87,7 +97,9 @@ public JdbcTransactionManager(DataSource dataSource) {
* @see java.sql.DatabaseMetaData#getDatabaseProductName()
*/
public void setDatabaseProductName(String dbName) {
this.exceptionTranslator = new SQLErrorCodeSQLExceptionTranslator(dbName);
if (!shouldIgnoreXml) {
this.exceptionTranslator = new SQLErrorCodeSQLExceptionTranslator(dbName);
}
}

/**
Expand Down Expand Up @@ -116,7 +128,12 @@ public SQLExceptionTranslator getExceptionTranslator() {
synchronized (this) {
exceptionTranslator = this.exceptionTranslator;
if (exceptionTranslator == null) {
exceptionTranslator = new SQLErrorCodeSQLExceptionTranslator(obtainDataSource());
if (shouldIgnoreXml) {
exceptionTranslator = new SQLExceptionSubclassTranslator();
}
else {
exceptionTranslator = new SQLErrorCodeSQLExceptionTranslator(obtainDataSource());
}
this.exceptionTranslator = exceptionTranslator;
}
return exceptionTranslator;
Expand Down
Expand Up @@ -23,8 +23,10 @@
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;

import io.rsocket.Payload;
import io.rsocket.RSocket;
import io.rsocket.frame.decoder.PayloadDecoder;
import io.rsocket.metadata.WellKnownMimeType;
import io.rsocket.transport.ClientTransport;
Expand Down Expand Up @@ -174,10 +176,6 @@ public Mono<RSocketRequester> connectWebSocket(URI uri) {

@Override
public Mono<RSocketRequester> connect(ClientTransport transport) {
return Mono.defer(() -> doConnect(transport));
}

private Mono<RSocketRequester> doConnect(ClientTransport transport) {
RSocketStrategies rsocketStrategies = getRSocketStrategies();
Assert.isTrue(!rsocketStrategies.encoders().isEmpty(), "No encoders");
Assert.isTrue(!rsocketStrategies.decoders().isEmpty(), "No decoders");
Expand All @@ -186,21 +184,28 @@ private Mono<RSocketRequester> doConnect(ClientTransport transport) {
MimeTypeUtils.parseMimeType(WellKnownMimeType.MESSAGE_RSOCKET_COMPOSITE_METADATA.getString());

MimeType dataMimeType = getDataMimeType(rsocketStrategies);
Mono<Payload> setupPayload = getSetupPayload(dataMimeType, metaMimeType, rsocketStrategies);

Function<Payload, Mono<RSocket>> connectFunction;
if (rsocketConnectorPresent) {
return getSetupPayload(dataMimeType, metaMimeType, rsocketStrategies)
.flatMap(payload ->
new RSocketConnectorHelper().connect(
this.rsocketConnectorConfigurers, this.rsocketFactoryConfigurers,
metaMimeType, dataMimeType, payload, rsocketStrategies, transport));
connectFunction = payload -> new RSocketConnectorHelper().getRSocketMono(
this.rsocketConnectorConfigurers, this.rsocketFactoryConfigurers,
metaMimeType, dataMimeType, setupPayload, rsocketStrategies, transport, payload);
}
else {
return getSetupPayload(dataMimeType, metaMimeType, rsocketStrategies)
.flatMap(payload ->
new RSocketFactoryHelper().connect(
this.rsocketFactoryConfigurers, metaMimeType, dataMimeType, payload,
rsocketStrategies, transport));
connectFunction = payload -> new RSocketFactoryHelper().getRSocketMono(
this.rsocketFactoryConfigurers, metaMimeType, dataMimeType,
setupPayload, rsocketStrategies, transport, payload);
}

// In RSocket 1.0.2 we can pass a Mono for the setup Payload. Until then we have to
// resolve it and then cache the Mono<RSocket> because it may be a ReconnectMono.

return setupPayload
.map(connectFunction)
.cache()
.flatMap(mono -> mono.map(rsocket ->
new DefaultRSocketRequester(rsocket, dataMimeType, metaMimeType, rsocketStrategies)));
}

private RSocketStrategies getRSocketStrategies() {
Expand Down Expand Up @@ -285,14 +290,13 @@ private Mono<Payload> getSetupPayload(
}


@SuppressWarnings("deprecation")
private static class RSocketConnectorHelper {

@SuppressWarnings("deprecation")
Mono<RSocketRequester> connect(
List<RSocketConnectorConfigurer> connectorConfigurers,
Mono<RSocket> getRSocketMono(List<RSocketConnectorConfigurer> connectorConfigurers,
List<ClientRSocketFactoryConfigurer> factoryConfigurers,
MimeType metaMimeType, MimeType dataMimeType, Payload setupPayload,
RSocketStrategies rsocketStrategies, ClientTransport transport) {
MimeType metaMimeType, MimeType dataMimeType, Mono<Payload> setupPayload,
RSocketStrategies rsocketStrategies, ClientTransport transport, Payload payload) {

io.rsocket.core.RSocketConnector connector = io.rsocket.core.RSocketConnector.create();
connectorConfigurers.forEach(c -> c.configure(connector));
Expand All @@ -307,27 +311,23 @@ Mono<RSocketRequester> connect(
connector.payloadDecoder(PayloadDecoder.ZERO_COPY);
}

connector.metadataMimeType(metaMimeType.toString());
connector.dataMimeType(dataMimeType.toString());

if (setupPayload != EMPTY_SETUP_PAYLOAD) {
connector.setupPayload(setupPayload);
connector.setupPayload(payload);
}

return connector
.metadataMimeType(metaMimeType.toString())
.dataMimeType(dataMimeType.toString())
.connect(transport)
.map(rsocket -> new DefaultRSocketRequester(
rsocket, dataMimeType, metaMimeType, rsocketStrategies));
return connector.connect(transport);
}
}


@SuppressWarnings("deprecation")
private static class RSocketFactoryHelper {

Mono<RSocketRequester> connect(
List<ClientRSocketFactoryConfigurer> configurers,
MimeType metaMimeType, MimeType dataMimeType, Payload setupPayload,
RSocketStrategies rsocketStrategies, ClientTransport transport) {
Mono<RSocket> getRSocketMono(List<ClientRSocketFactoryConfigurer> configurers,
MimeType metaMimeType, MimeType dataMimeType, Mono<Payload> setupPayload,
RSocketStrategies rsocketStrategies, ClientTransport transport, Payload payload) {

io.rsocket.RSocketFactory.ClientRSocketFactory factory = io.rsocket.RSocketFactory.connect();
configurers.forEach(c -> c.configure(factory));
Expand All @@ -336,16 +336,12 @@ Mono<RSocketRequester> connect(
factory.frameDecoder(PayloadDecoder.ZERO_COPY);
}

factory.metadataMimeType(metaMimeType.toString());
factory.dataMimeType(dataMimeType.toString());
if (setupPayload != EMPTY_SETUP_PAYLOAD) {
factory.setupPayload(setupPayload);
factory.setupPayload(payload);
}

return factory.metadataMimeType(metaMimeType.toString())
.dataMimeType(dataMimeType.toString())
.transport(transport)
.start()
.map(rsocket -> new DefaultRSocketRequester(
rsocket, dataMimeType, metaMimeType, rsocketStrategies));
return factory.transport(transport).start();
}
}

Expand Down
Expand Up @@ -76,10 +76,11 @@ public abstract class AbstractJackson2Encoder extends Jackson2CodecSupport imple
STREAM_SEPARATORS.put(MediaType.APPLICATION_STREAM_JSON, NEWLINE_SEPARATOR);
STREAM_SEPARATORS.put(MediaType.parseMediaType("application/stream+x-jackson-smile"), new byte[0]);

ENCODINGS = new HashMap<>(JsonEncoding.values().length);
ENCODINGS = new HashMap<>(JsonEncoding.values().length + 1);
for (JsonEncoding encoding : JsonEncoding.values()) {
ENCODINGS.put(encoding.getJavaName(), encoding);
}
ENCODINGS.put("US-ASCII", JsonEncoding.UTF8);
}


Expand Down
Expand Up @@ -26,6 +26,7 @@
import org.springframework.core.codec.Hints;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.core.io.buffer.PooledDataBuffer;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
Expand Down Expand Up @@ -66,7 +67,7 @@ public Mono<Void> write(Publisher<? extends Part> parts,
Flux<DataBuffer> body = Flux.from(parts)
.concatMap(part -> encodePart(boundary, part, outputMessage.bufferFactory()))
.concatWith(generateLastLine(boundary, outputMessage.bufferFactory()))
.doOnDiscard(PooledDataBuffer.class, PooledDataBuffer::release);
.doOnDiscard(PooledDataBuffer.class, DataBufferUtils::release);

return outputMessage.writeWith(body);
}
Expand Down
Expand Up @@ -43,6 +43,8 @@
*/
public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {

private static final MediaType APPLICATION_PLUS_JSON = new MediaType("application", "*+json");

/**
* The default charset used by the converter.
*/
Expand Down Expand Up @@ -104,7 +106,9 @@ protected Long getContentLength(String str, @Nullable MediaType contentType) {
@Override
protected void addDefaultHeaders(HttpHeaders headers, String s, @Nullable MediaType type) throws IOException {
if (headers.getContentType() == null ) {
if (type != null && type.isConcrete() && type.isCompatibleWith(MediaType.APPLICATION_JSON)) {
if (type != null && type.isConcrete() &&
(type.isCompatibleWith(MediaType.APPLICATION_JSON) ||
type.isCompatibleWith(APPLICATION_PLUS_JSON))) {
// Prevent charset parameter for JSON..
headers.setContentType(type);
}
Expand Down Expand Up @@ -144,7 +148,8 @@ private Charset getContentTypeCharset(@Nullable MediaType contentType) {
if (charset != null) {
return charset;
}
else if (contentType.isCompatibleWith(MediaType.APPLICATION_JSON)) {
else if (contentType.isCompatibleWith(MediaType.APPLICATION_JSON) ||
contentType.isCompatibleWith(APPLICATION_PLUS_JSON)) {
// Matching to AbstractJackson2HttpMessageConverter#DEFAULT_CHARSET
return StandardCharsets.UTF_8;
}
Expand Down

0 comments on commit a1615e0

Please sign in to comment.