mirror of
https://gitee.com/mirrors/Spring-Cloud-Alibaba.git
synced 2021-06-26 13:25:11 +08:00
format code
Signed-off-by: caotc <250622148@qq.com>
This commit is contained in:
parent
0a1f712094
commit
2cacc97d94
@ -1,14 +1,12 @@
|
|||||||
package com.alibaba.cloud.stream.binder.rocketmq.support;
|
package com.alibaba.cloud.stream.binder.rocketmq.support;
|
||||||
|
|
||||||
import org.apache.rocketmq.common.message.MessageConst;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.messaging.MessageHeaders;
|
|
||||||
import org.springframework.util.Assert;
|
|
||||||
|
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
import org.apache.rocketmq.common.message.MessageConst;
|
||||||
|
import org.springframework.messaging.MessageHeaders;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base for RocketMQ header mappers.
|
* Base for RocketMQ header mappers.
|
||||||
*
|
*
|
||||||
@ -31,9 +29,12 @@ public abstract class AbstractRocketMQHeaderMapper implements RocketMQHeaderMapp
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected boolean matches(String headerName) {
|
protected boolean matches(String headerName) {
|
||||||
return !MessageConst.STRING_HASH_SET.contains(headerName) && !MessageHeaders.ID.equals(headerName)
|
return !MessageConst.STRING_HASH_SET.contains(headerName)
|
||||||
&& !MessageHeaders.TIMESTAMP.equals(headerName) && !MessageHeaders.CONTENT_TYPE.equals(headerName)
|
&& !MessageHeaders.ID.equals(headerName)
|
||||||
&& !MessageHeaders.REPLY_CHANNEL.equals(headerName) && !MessageHeaders.ERROR_CHANNEL.equals(headerName);
|
&& !MessageHeaders.TIMESTAMP.equals(headerName)
|
||||||
|
&& !MessageHeaders.CONTENT_TYPE.equals(headerName)
|
||||||
|
&& !MessageHeaders.REPLY_CHANNEL.equals(headerName)
|
||||||
|
&& !MessageHeaders.ERROR_CHANNEL.equals(headerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Charset getCharset() {
|
public Charset getCharset() {
|
||||||
|
@ -1,22 +1,23 @@
|
|||||||
package com.alibaba.cloud.stream.binder.rocketmq.support;
|
package com.alibaba.cloud.stream.binder.rocketmq.support;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import java.io.IOException;
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import java.nio.charset.Charset;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import java.util.*;
|
||||||
import com.google.common.collect.Maps;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.messaging.MessageHeaders;
|
import org.springframework.messaging.MessageHeaders;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import java.nio.charset.Charset;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import java.util.*;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* jackson header mapper for RocketMQ.
|
* jackson header mapper for RocketMQ. Header types are added to a special header
|
||||||
* Header types are added to a special header {@link #JSON_TYPES}.
|
* {@link #JSON_TYPES}.
|
||||||
*
|
*
|
||||||
* @author caotc
|
* @author caotc
|
||||||
* @date 2019-08-22
|
* @date 2019-08-22
|
||||||
@ -26,13 +27,8 @@ public class JacksonRocketMQHeaderMapper extends AbstractRocketMQHeaderMapper{
|
|||||||
private final static Logger log = LoggerFactory
|
private final static Logger log = LoggerFactory
|
||||||
.getLogger(JacksonRocketMQHeaderMapper.class);
|
.getLogger(JacksonRocketMQHeaderMapper.class);
|
||||||
|
|
||||||
private static final List<String> DEFAULT_TRUSTED_PACKAGES =
|
private static final List<String> DEFAULT_TRUSTED_PACKAGES = Arrays
|
||||||
Arrays.asList(
|
.asList("java.lang", "java.net", "java.util", "org.springframework.util");
|
||||||
"java.lang",
|
|
||||||
"java.net",
|
|
||||||
"java.util",
|
|
||||||
"org.springframework.util"
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Header name for java types of other headers.
|
* Header name for java types of other headers.
|
||||||
@ -40,7 +36,8 @@ public class JacksonRocketMQHeaderMapper extends AbstractRocketMQHeaderMapper{
|
|||||||
public static final String JSON_TYPES = "spring_json_header_types";
|
public static final String JSON_TYPES = "spring_json_header_types";
|
||||||
|
|
||||||
private final ObjectMapper objectMapper;
|
private final ObjectMapper objectMapper;
|
||||||
private final Set<String> trustedPackages = new LinkedHashSet<>(DEFAULT_TRUSTED_PACKAGES);
|
private final Set<String> trustedPackages = new LinkedHashSet<>(
|
||||||
|
DEFAULT_TRUSTED_PACKAGES);
|
||||||
|
|
||||||
public JacksonRocketMQHeaderMapper(ObjectMapper objectMapper) {
|
public JacksonRocketMQHeaderMapper(ObjectMapper objectMapper) {
|
||||||
this.objectMapper = objectMapper;
|
this.objectMapper = objectMapper;
|
||||||
@ -59,14 +56,16 @@ public class JacksonRocketMQHeaderMapper extends AbstractRocketMQHeaderMapper{
|
|||||||
if (matches(key)) {
|
if (matches(key)) {
|
||||||
if (value instanceof String) {
|
if (value instanceof String) {
|
||||||
target.put(key, (String) value);
|
target.put(key, (String) value);
|
||||||
}else {
|
}
|
||||||
|
else {
|
||||||
try {
|
try {
|
||||||
String className = value.getClass().getName();
|
String className = value.getClass().getName();
|
||||||
target.put(key, objectMapper.writeValueAsString(value));
|
target.put(key, objectMapper.writeValueAsString(value));
|
||||||
jsonHeaders.put(key, className);
|
jsonHeaders.put(key, className);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
log.debug("Could not map " + key + " with type " + value.getClass().getName(),e);
|
log.debug("Could not map " + key + " with type "
|
||||||
|
+ value.getClass().getName(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,7 +94,8 @@ public class JacksonRocketMQHeaderMapper extends AbstractRocketMQHeaderMapper{
|
|||||||
if (trusted) {
|
if (trusted) {
|
||||||
try {
|
try {
|
||||||
type = ClassUtils.forName(requestedType, null);
|
type = ClassUtils.forName(requestedType, null);
|
||||||
}catch (Exception e) {
|
}
|
||||||
|
catch (Exception e) {
|
||||||
log.error("Could not load class for header: " + key, e);
|
log.error("Could not load class for header: " + key, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -106,14 +106,16 @@ public class JacksonRocketMQHeaderMapper extends AbstractRocketMQHeaderMapper{
|
|||||||
target.put(key, val);
|
target.put(key, val);
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
log.error("Could not decode json type: " + value + " for key: "
|
log.error("Could not decode json type: " + value
|
||||||
+ key,e);
|
+ " for key: " + key, e);
|
||||||
target.put(key, value);
|
target.put(key, value);
|
||||||
}
|
}
|
||||||
}else {
|
}
|
||||||
|
else {
|
||||||
target.put(key, new NonTrustedHeaderType(value, requestedType));
|
target.put(key, new NonTrustedHeaderType(value, requestedType));
|
||||||
}
|
}
|
||||||
}else {
|
}
|
||||||
|
else {
|
||||||
target.put(key, value);
|
target.put(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -132,11 +134,11 @@ public class JacksonRocketMQHeaderMapper extends AbstractRocketMQHeaderMapper{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add packages to the trusted packages list (default {@code java.util, java.lang}) used
|
* Add packages to the trusted packages list (default {@code java.util, java.lang})
|
||||||
* when constructing objects from JSON.
|
* used when constructing objects from JSON. If any of the supplied packages is
|
||||||
* If any of the supplied packages is {@code "*"}, all packages are trusted.
|
* {@code "*"}, all packages are trusted. If a class for a non-trusted package is
|
||||||
* If a class for a non-trusted package is encountered, the header is returned to the
|
* encountered, the header is returned to the application with value of type
|
||||||
* application with value of type {@link NonTrustedHeaderType}.
|
* {@link NonTrustedHeaderType}.
|
||||||
* @param packagesToTrust the packages to trust.
|
* @param packagesToTrust the packages to trust.
|
||||||
*/
|
*/
|
||||||
public void addTrustedPackages(Collection<String> packagesToTrust) {
|
public void addTrustedPackages(Collection<String> packagesToTrust) {
|
||||||
@ -161,7 +163,8 @@ public class JacksonRocketMQHeaderMapper extends AbstractRocketMQHeaderMapper{
|
|||||||
return objectMapper;
|
return objectMapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object decodeValue(String jsonString, Class<?> type) throws IOException, LinkageError {
|
private Object decodeValue(String jsonString, Class<?> type)
|
||||||
|
throws IOException, LinkageError {
|
||||||
Object value = objectMapper.readValue(jsonString, type);
|
Object value = objectMapper.readValue(jsonString, type);
|
||||||
if (type.equals(NonTrustedHeaderType.class)) {
|
if (type.equals(NonTrustedHeaderType.class)) {
|
||||||
// Upstream NTHT propagated; may be trusted here...
|
// Upstream NTHT propagated; may be trusted here...
|
||||||
@ -184,7 +187,9 @@ public class JacksonRocketMQHeaderMapper extends AbstractRocketMQHeaderMapper{
|
|||||||
if (source.containsKey(JSON_TYPES)) {
|
if (source.containsKey(JSON_TYPES)) {
|
||||||
String value = source.get(JSON_TYPES);
|
String value = source.get(JSON_TYPES);
|
||||||
try {
|
try {
|
||||||
return objectMapper.readValue(value,new TypeReference<Map<String,String>>(){});
|
return objectMapper.readValue(value,
|
||||||
|
new TypeReference<Map<String, String>>() {
|
||||||
|
});
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
log.error("Could not decode json types: " + value, e);
|
log.error("Could not decode json types: " + value, e);
|
||||||
@ -204,7 +209,8 @@ public class JacksonRocketMQHeaderMapper extends AbstractRocketMQHeaderMapper{
|
|||||||
}
|
}
|
||||||
String packageName = requestedType.substring(0, lastDot);
|
String packageName = requestedType.substring(0, lastDot);
|
||||||
for (String trustedPackage : this.trustedPackages) {
|
for (String trustedPackage : this.trustedPackages) {
|
||||||
if (packageName.equals(trustedPackage) || packageName.startsWith(trustedPackage + ".")) {
|
if (packageName.equals(trustedPackage)
|
||||||
|
|| packageName.startsWith(trustedPackage + ".")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -231,7 +237,6 @@ public class JacksonRocketMQHeaderMapper extends AbstractRocketMQHeaderMapper{
|
|||||||
this.untrustedType = untrustedType;
|
this.untrustedType = untrustedType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setHeaderValue(String headerValue) {
|
public void setHeaderValue(String headerValue) {
|
||||||
this.headerValue = headerValue;
|
this.headerValue = headerValue;
|
||||||
}
|
}
|
||||||
@ -250,8 +255,8 @@ public class JacksonRocketMQHeaderMapper extends AbstractRocketMQHeaderMapper{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "NonTrustedHeaderType [headerValue=" + headerValue
|
return "NonTrustedHeaderType [headerValue=" + headerValue + ", untrustedType="
|
||||||
+ ", untrustedType=" + this.untrustedType + "]";
|
+ this.untrustedType + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package com.alibaba.cloud.stream.binder.rocketmq.support;
|
package com.alibaba.cloud.stream.binder.rocketmq.support;
|
||||||
|
|
||||||
import org.springframework.messaging.MessageHeaders;
|
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.messaging.MessageHeaders;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* header value mapper for RocketMQ
|
* header value mapper for RocketMQ
|
||||||
*
|
*
|
||||||
@ -18,6 +18,7 @@ public interface RocketMQHeaderMapper {
|
|||||||
* @return the native target message.
|
* @return the native target message.
|
||||||
*/
|
*/
|
||||||
Map<String, String> fromHeaders(MessageHeaders headers);
|
Map<String, String> fromHeaders(MessageHeaders headers);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map from the given target message to abstracted {@link MessageHeaders}.
|
* Map from the given target message to abstracted {@link MessageHeaders}.
|
||||||
* @param source the native target message.
|
* @param source the native target message.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user