Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
05d475a2
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
05d475a2
编写于
5月 22, 2015
作者:
J
Juergen Hoeller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Polishing
上级
5f60d700
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
43 addition
and
40 deletion
+43
-40
spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java
...mework/jms/listener/AbstractMessageListenerContainer.java
+8
-6
spring-messaging/src/main/java/org/springframework/messaging/simp/user/UserSessionRegistry.java
...ingframework/messaging/simp/user/UserSessionRegistry.java
+3
-3
spring-web/src/main/java/org/springframework/web/client/RestTemplate.java
...ain/java/org/springframework/web/client/RestTemplate.java
+0
-1
spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolver.java
...method/annotation/RequestParamMethodArgumentResolver.java
+5
-7
spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java
...amework/web/socket/messaging/StompSubProtocolHandler.java
+27
-23
未找到文件。
spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java
浏览文件 @
05d475a2
...
...
@@ -450,10 +450,11 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
/**
* Configure the reply destination type. By default, the configured {@code pubSubDomain}
* value is used (see {@link #isPubSubDomain()}.
* <p>This setting primarily indicates what type of destination to resolve
* if dynamic destinations are enabled.
* @param replyPubSubDomain "true" for the Publish/Subscribe domain ({@link javax.jms.Topic Topics}),
* "false" for the Point-to-Point domain ({@link javax.jms.Queue Queues})
* <p>This setting primarily indicates what type of destination to resolve if dynamic
* destinations are enabled.
* @param replyPubSubDomain "true" for the Publish/Subscribe domain ({@link Topic Topics}),
* "false" for the Point-to-Point domain ({@link Queue Queues})
* @since 4.2
* @see #setDestinationResolver
*/
public
void
setReplyPubSubDomain
(
boolean
replyPubSubDomain
)
{
...
...
@@ -462,8 +463,9 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
/**
* Return whether the Publish/Subscribe domain ({@link javax.jms.Topic Topics}) is used
* for replies. Otherwise, the Point-to-Point domain ({@link javax.jms.Queue Queues}) is
* used.
* for replies. Otherwise, the Point-to-Point domain ({@link javax.jms.Queue Queues})
* is used.
* @since 4.2
*/
@Override
public
boolean
isReplyPubSubDomain
()
{
...
...
spring-messaging/src/main/java/org/springframework/messaging/simp/user/UserSessionRegistry.java
浏览文件 @
05d475a2
...
...
@@ -21,9 +21,9 @@ import java.util.Set;
/**
* A contract for adding and removing user sessions.
*
* <p>As of 4.2
this interface extends {@link SimpUserRegistry}.
* exposing methods to return all registered users as well as to provide
more
* extensive information for each user.
* <p>As of 4.2
, this interface is replaced by {@link SimpUserRegistry},
* exposing methods to return all registered users as well as to provide
*
more
extensive information for each user.
*
* @author Rossen Stoyanchev
* @since 4.0
...
...
spring-web/src/main/java/org/springframework/web/client/RestTemplate.java
浏览文件 @
05d475a2
...
...
@@ -23,7 +23,6 @@ import java.util.ArrayList;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
javax.xml.transform.Source
;
import
org.springframework.core.ParameterizedTypeReference
;
...
...
spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolver.java
浏览文件 @
05d475a2
...
...
@@ -218,8 +218,11 @@ public class RequestParamMethodArgumentResolver extends AbstractNamedValueMethod
}
private
boolean
isMultipartFileCollection
(
MethodParameter
parameter
)
{
Class
<?>
collectionType
=
getCollectionParameterType
(
parameter
);
return
(
collectionType
!=
null
&&
MultipartFile
.
class
==
collectionType
);
return
(
MultipartFile
.
class
==
getCollectionParameterType
(
parameter
));
}
private
boolean
isMultipartFileArray
(
MethodParameter
parameter
)
{
return
(
MultipartFile
.
class
==
parameter
.
getParameterType
().
getComponentType
());
}
private
boolean
isPartCollection
(
MethodParameter
parameter
)
{
...
...
@@ -232,11 +235,6 @@ public class RequestParamMethodArgumentResolver extends AbstractNamedValueMethod
return
(
paramType
!=
null
&&
"javax.servlet.http.Part"
.
equals
(
paramType
.
getName
()));
}
private
boolean
isMultipartFileArray
(
MethodParameter
parameter
)
{
Class
<?>
paramType
=
parameter
.
getParameterType
().
getComponentType
();
return
(
paramType
!=
null
&&
MultipartFile
.
class
==
paramType
);
}
private
Class
<?>
getCollectionParameterType
(
MethodParameter
parameter
)
{
Class
<?>
paramType
=
parameter
.
getParameterType
();
if
(
Collection
.
class
==
paramType
||
List
.
class
.
isAssignableFrom
(
paramType
)){
...
...
spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java
浏览文件 @
05d475a2
...
...
@@ -135,9 +135,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
* Since a STOMP message can be received in multiple WebSocket messages,
* buffering may be required and therefore it is necessary to know the maximum
* allowed message size.
*
* <p>By default this property is set to 64K.
*
* @since 4.0.3
*/
public
void
setMessageSizeLimit
(
int
messageSizeLimit
)
{
...
...
@@ -146,14 +144,12 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
/**
* Get the configured message buffer size limit in bytes.
*
* @since 4.0.3
*/
public
int
getMessageSizeLimit
()
{
return
this
.
messageSizeLimit
;
}
/**
* Provide a registry with which to register active user session ids.
* @see org.springframework.messaging.simp.user.UserDestinationMessageHandler
...
...
@@ -179,7 +175,6 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
* Configure a {@link MessageHeaderInitializer} to apply to the headers of all
* messages created from decoded STOMP frames and other messages sent to the
* client inbound channel.
*
* <p>By default this property is not set.
*/
public
void
setHeaderInitializer
(
MessageHeaderInitializer
headerInitializer
)
{
...
...
@@ -188,7 +183,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
}
/**
*
@r
eturn the configured header initializer.
*
R
eturn the configured header initializer.
*/
public
MessageHeaderInitializer
getHeaderInitializer
()
{
return
this
.
headerInitializer
;
...
...
@@ -259,7 +254,6 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
try
{
StompHeaderAccessor
headerAccessor
=
MessageHeaderAccessor
.
getAccessor
(
message
,
StompHeaderAccessor
.
class
);
Principal
user
=
session
.
getPrincipal
();
headerAccessor
.
setSessionId
(
session
.
getId
());
...
...
@@ -314,34 +308,37 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
sendErrorMessage
(
session
,
ex
);
return
;
}
Message
<
byte
[]>
message
=
getErrorHandler
().
handleClientMessageProcessingError
(
clientMessage
,
ex
);
if
(
message
==
null
)
{
return
;
}
StompHeaderAccessor
accessor
=
MessageHeaderAccessor
.
getAccessor
(
message
,
StompHeaderAccessor
.
class
);
Assert
.
notNull
(
accessor
,
"Expected STOMP headers
.
"
);
Assert
.
notNull
(
accessor
,
"Expected STOMP headers"
);
sendToClient
(
session
,
accessor
,
message
.
getPayload
());
}
/**
* Invoked when no
* {@link #setErrorHandler(StompSubProtocolErrorHandler) errorHandler}
is
* configured to send an ERROR frame to the client.
* @deprecated as of
4.2 this method is deprecated
in favor of
* {@link #setErrorHandler(StompSubProtocolErrorHandler) configuring}
a
*
{@code StompSubProtocolErrorHandler}.
* {@link #setErrorHandler(StompSubProtocolErrorHandler) errorHandler}
*
is
configured to send an ERROR frame to the client.
* @deprecated as of
Spring 4.2,
in favor of
* {@link #setErrorHandler(StompSubProtocolErrorHandler) configuring}
*
a {@code StompSubProtocolErrorHandler}
*/
@Deprecated
protected
void
sendErrorMessage
(
WebSocketSession
session
,
Throwable
error
)
{
StompHeaderAccessor
headerAccessor
=
StompHeaderAccessor
.
create
(
StompCommand
.
ERROR
);
headerAccessor
.
setMessage
(
error
.
getMessage
());
byte
[]
bytes
=
this
.
stompEncoder
.
encode
(
headerAccessor
.
getMessageHeaders
(),
EMPTY_PAYLOAD
);
try
{
session
.
sendMessage
(
new
TextMessage
(
bytes
));
}
catch
(
Throwable
ex
)
{
// Could be part of normal workflow (e.g. browser tab closed)
logger
.
debug
(
"Failed to send STOMP ERROR to client
.
"
,
ex
);
logger
.
debug
(
"Failed to send STOMP ERROR to client"
,
ex
);
}
}
...
...
@@ -349,6 +346,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
if
(
this
.
immutableMessageInterceptorPresent
!=
null
)
{
return
this
.
immutableMessageInterceptorPresent
;
}
if
(
channel
instanceof
AbstractMessageChannel
)
{
for
(
ChannelInterceptor
interceptor
:
((
AbstractMessageChannel
)
channel
).
getInterceptors
())
{
if
(
interceptor
instanceof
ImmutableMessageChannelInterceptor
)
{
...
...
@@ -366,7 +364,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
this
.
eventPublisher
.
publishEvent
(
event
);
}
catch
(
Throwable
ex
)
{
logger
.
error
(
"Error publishing "
+
event
+
"."
,
ex
);
logger
.
error
(
"Error publishing "
+
event
,
ex
);
}
}
...
...
@@ -380,8 +378,10 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
logger
.
error
(
"Expected byte[] payload. Ignoring "
+
message
+
"."
);
return
;
}
StompHeaderAccessor
stompAccessor
=
getStompHeaderAccessor
(
message
);
StompCommand
command
=
stompAccessor
.
getCommand
();
if
(
StompCommand
.
MESSAGE
.
equals
(
command
))
{
if
(
stompAccessor
.
getSubscriptionId
()
==
null
)
{
logger
.
warn
(
"No STOMP \"subscription\" header in "
+
message
);
...
...
@@ -414,7 +414,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
if
(
StompCommand
.
ERROR
.
equals
(
command
)
&&
getErrorHandler
()
!=
null
)
{
Message
<
byte
[]>
errorMessage
=
getErrorHandler
().
handleErrorMessageToClient
((
Message
<
byte
[]>)
message
);
stompAccessor
=
MessageHeaderAccessor
.
getAccessor
(
errorMessage
,
StompHeaderAccessor
.
class
);
Assert
.
notNull
(
stompAccessor
,
"Expected STOMP headers
.
"
);
Assert
.
notNull
(
stompAccessor
,
"Expected STOMP headers"
);
payload
=
errorMessage
.
getPayload
();
}
...
...
@@ -442,7 +442,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
}
catch
(
Throwable
ex
)
{
// Could be part of normal workflow (e.g. browser tab closed)
logger
.
debug
(
"Failed to send WebSocket message to client in session "
+
session
.
getId
()
+
"."
,
ex
);
logger
.
debug
(
"Failed to send WebSocket message to client in session "
+
session
.
getId
(),
ex
);
command
=
StompCommand
.
ERROR
;
}
finally
{
...
...
@@ -461,7 +461,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
MessageHeaderAccessor
accessor
=
MessageHeaderAccessor
.
getAccessor
(
message
,
MessageHeaderAccessor
.
class
);
if
(
accessor
==
null
)
{
// Shouldn't happen (only broker broadcasts directly to clients)
throw
new
IllegalStateException
(
"No header accessor in "
+
message
+
"."
);
throw
new
IllegalStateException
(
"No header accessor in "
+
message
);
}
StompHeaderAccessor
stompAccessor
;
if
(
accessor
instanceof
StompHeaderAccessor
)
{
...
...
@@ -487,7 +487,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
else
{
// Shouldn't happen (only broker broadcasts directly to clients)
throw
new
IllegalStateException
(
"Unexpected header accessor type: "
+
accessor
.
getClass
()
+
" in "
+
message
+
"."
);
"Unexpected header accessor type: "
+
accessor
.
getClass
()
+
" in "
+
message
);
}
return
stompAccessor
;
}
...
...
@@ -515,7 +515,8 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
long
[]
heartbeat
=
(
long
[])
connectAckHeaders
.
getHeader
(
SimpMessageHeaderAccessor
.
HEART_BEAT_HEADER
);
if
(
heartbeat
!=
null
)
{
connectedHeaders
.
setHeartbeat
(
heartbeat
[
0
],
heartbeat
[
1
]);
}
else
{
}
else
{
connectedHeaders
.
setHeartbeat
(
0
,
0
);
}
return
connectedHeaders
;
...
...
@@ -537,6 +538,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
this
.
userSessionRegistry
.
registerSessionId
(
userName
,
session
.
getId
());
}
}
long
[]
heartbeat
=
accessor
.
getHeartbeat
();
if
(
heartbeat
[
1
]
>
0
)
{
session
=
WebSocketSessionDecorator
.
unwrap
(
session
);
...
...
@@ -544,6 +546,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
((
SockJsSession
)
session
).
disableHeartbeat
();
}
}
return
accessor
;
}
...
...
@@ -571,11 +574,13 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
@Override
public
void
afterSessionEnded
(
WebSocketSession
session
,
CloseStatus
closeStatus
,
MessageChannel
outputChannel
)
{
this
.
decoders
.
remove
(
session
.
getId
());
Principal
principal
=
session
.
getPrincipal
();
if
(
principal
!=
null
&&
this
.
userSessionRegistry
!=
null
)
{
String
userName
=
getSessionRegistryUserName
(
principal
);
this
.
userSessionRegistry
.
unregisterSessionId
(
userName
,
session
.
getId
());
}
Message
<
byte
[]>
message
=
createDisconnectMessage
(
session
);
SimpAttributes
simpAttributes
=
SimpAttributes
.
fromMessage
(
message
);
try
{
...
...
@@ -608,7 +613,8 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
return
"StompSubProtocolHandler"
+
getSupportedProtocols
();
}
private
class
Stats
{
private
static
class
Stats
{
private
final
AtomicInteger
connect
=
new
AtomicInteger
();
...
...
@@ -616,7 +622,6 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
private
final
AtomicInteger
disconnect
=
new
AtomicInteger
();
public
void
incrementConnectCount
()
{
this
.
connect
.
incrementAndGet
();
}
...
...
@@ -629,7 +634,6 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
this
.
disconnect
.
incrementAndGet
();
}
public
String
toString
()
{
return
"processed CONNECT("
+
this
.
connect
.
get
()
+
")-CONNECTED("
+
this
.
connected
.
get
()
+
")-DISCONNECT("
+
this
.
disconnect
.
get
()
+
")"
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录