Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
6ddacdc0
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,体验更适合开发者的 AI 搜索 >>
提交
6ddacdc0
编写于
9月 30, 2013
作者:
R
Rossen Stoyanchev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix issue in simple broker with peer-to-peer messages
Issue: SPR-10930
上级
48caeef4
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
54 addition
and
13 deletion
+54
-13
spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java
.../messaging/simp/stomp/StompBrokerRelayMessageHandler.java
+1
-2
spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java
...ngframework/messaging/simp/stomp/StompHeaderAccessor.java
+23
-2
spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompProtocolHandler.java
...gframework/messaging/simp/stomp/StompProtocolHandler.java
+3
-3
spring-messaging/src/test/java/org/springframework/messaging/simp/handler/AnnotationMethodIntegrationTests.java
...saging/simp/handler/AnnotationMethodIntegrationTests.java
+25
-3
spring-messaging/src/test/java/org/springframework/messaging/simp/handler/SimpleBrokerMessageHandlerTests.java
...ssaging/simp/handler/SimpleBrokerMessageHandlerTests.java
+0
-1
spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandlerIntegrationTests.java
...stomp/StompBrokerRelayMessageHandlerIntegrationTests.java
+1
-1
spring-messaging/src/test/resources/log4j.xml
spring-messaging/src/test/resources/log4j.xml
+1
-1
未找到文件。
spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java
浏览文件 @
6ddacdc0
...
...
@@ -192,8 +192,7 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler
if
(
SimpMessageType
.
MESSAGE
.
equals
(
messageType
))
{
sessionId
=
(
sessionId
==
null
)
?
SystemStompRelaySession
.
ID
:
sessionId
;
headers
.
setSessionId
(
sessionId
);
command
=
(
command
==
null
)
?
StompCommand
.
SEND
:
command
;
headers
.
setCommandIfNotSet
(
command
);
headers
.
updateStompCommandAsClientMessage
();
message
=
MessageBuilder
.
withPayloadAndHeaders
(
message
.
getPayload
(),
headers
).
build
();
}
...
...
spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java
浏览文件 @
6ddacdc0
...
...
@@ -26,6 +26,7 @@ import java.util.concurrent.atomic.AtomicLong;
import
org.springframework.http.MediaType
;
import
org.springframework.messaging.Message
;
import
org.springframework.messaging.simp.SimpMessageHeaderAccessor
;
import
org.springframework.messaging.simp.SimpMessageType
;
import
org.springframework.util.Assert
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
...
...
@@ -218,9 +219,29 @@ public class StompHeaderAccessor extends SimpMessageHeaderAccessor {
return
toNativeHeaderMap
();
}
public
void
setCommandIfNotSet
(
StompCommand
command
)
{
public
void
updateStompCommandAsClientMessage
()
{
Assert
.
state
(
SimpMessageType
.
MESSAGE
.
equals
(
getMessageType
()),
"Unexpected message type "
+
getMessage
());
if
(
getCommand
()
==
null
)
{
setHeader
(
COMMAND_HEADER
,
command
);
setHeader
(
COMMAND_HEADER
,
StompCommand
.
SEND
);
}
else
if
(!
getCommand
().
equals
(
StompCommand
.
SEND
))
{
throw
new
IllegalStateException
(
"Unexpected STOMP command "
+
getCommand
());
}
}
public
void
updateStompCommandAsServerMessage
()
{
Assert
.
state
(
SimpMessageType
.
MESSAGE
.
equals
(
getMessageType
()),
"Unexpected message type "
+
getMessage
());
if
((
getCommand
()
==
null
)
||
getCommand
().
equals
(
StompCommand
.
SEND
))
{
setHeader
(
COMMAND_HEADER
,
StompCommand
.
MESSAGE
);
}
else
if
(!
getCommand
().
equals
(
StompCommand
.
MESSAGE
))
{
throw
new
IllegalStateException
(
"Unexpected STOMP command "
+
getCommand
());
}
}
...
...
spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompProtocolHandler.java
浏览文件 @
6ddacdc0
...
...
@@ -150,9 +150,6 @@ public class StompProtocolHandler implements SubProtocolHandler {
public
void
handleMessageToClient
(
WebSocketSession
session
,
Message
<?>
message
)
{
StompHeaderAccessor
headers
=
StompHeaderAccessor
.
wrap
(
message
);
if
(
headers
.
getCommand
()
==
null
&&
SimpMessageType
.
MESSAGE
==
headers
.
getMessageType
())
{
headers
.
setCommandIfNotSet
(
StompCommand
.
MESSAGE
);
}
if
(
headers
.
getMessageType
()
==
SimpMessageType
.
CONNECT_ACK
)
{
StompHeaderAccessor
connectedHeaders
=
StompHeaderAccessor
.
create
(
StompCommand
.
CONNECTED
);
...
...
@@ -160,6 +157,9 @@ public class StompProtocolHandler implements SubProtocolHandler {
connectedHeaders
.
setHeartbeat
(
0
,
0
);
// no heart-beat support with simple broker
headers
=
connectedHeaders
;
}
else
if
(
SimpMessageType
.
MESSAGE
.
equals
(
headers
.
getMessageType
()))
{
headers
.
updateStompCommandAsServerMessage
();
}
if
(
headers
.
getCommand
()
==
StompCommand
.
CONNECTED
)
{
augmentConnectedHeaders
(
headers
,
session
);
...
...
spring-messaging/src/test/java/org/springframework/messaging/simp/handler/AnnotationMethodIntegrationTests.java
浏览文件 @
6ddacdc0
...
...
@@ -80,7 +80,7 @@ public class AnnotationMethodIntegrationTests extends AbstractWebSocketIntegrati
@Test
public
void
s
imple
Controller
()
throws
Exception
{
public
void
s
endMessageTo
Controller
()
throws
Exception
{
TextMessage
message
=
create
(
StompCommand
.
SEND
).
headers
(
"destination:/app/simple"
).
build
();
WebSocketSession
session
=
doHandshake
(
new
TestClientWebSocketHandler
(
0
,
message
),
"/ws"
).
get
();
...
...
@@ -95,10 +95,10 @@ public class AnnotationMethodIntegrationTests extends AbstractWebSocketIntegrati
}
@Test
public
void
incrementController
()
throws
Exception
{
public
void
sendMessageToControllerAndReceiveReplyViaTopic
()
throws
Exception
{
TextMessage
message1
=
create
(
StompCommand
.
SUBSCRIBE
).
headers
(
"id:subs1"
,
"destination:/topic/increment"
).
b
ody
(
"5"
).
b
uild
();
"id:subs1"
,
"destination:/topic/increment"
).
build
();
TextMessage
message2
=
create
(
StompCommand
.
SEND
).
headers
(
"destination:/app/topic/increment"
).
body
(
"5"
).
build
();
...
...
@@ -114,6 +114,28 @@ public class AnnotationMethodIntegrationTests extends AbstractWebSocketIntegrati
}
}
// SPR-10930
@Test
public
void
sendMessageToBrokerAndReceiveReplyViaTopic
()
throws
Exception
{
TextMessage
message1
=
create
(
StompCommand
.
SUBSCRIBE
).
headers
(
"id:subs1"
,
"destination:/topic/foo"
).
build
();
TextMessage
message2
=
create
(
StompCommand
.
SEND
).
headers
(
"destination:/topic/foo"
).
body
(
"5"
).
build
();
TestClientWebSocketHandler
clientHandler
=
new
TestClientWebSocketHandler
(
1
,
message1
,
message2
);
WebSocketSession
session
=
doHandshake
(
clientHandler
,
"/ws"
).
get
();
try
{
assertTrue
(
clientHandler
.
latch
.
await
(
2
,
TimeUnit
.
SECONDS
));
String
payload
=
clientHandler
.
actual
.
get
(
0
).
getPayload
();
assertTrue
(
"Expected STOMP Command=MESSAGE, got "
+
payload
,
payload
.
startsWith
(
"MESSAGE\n"
));
}
finally
{
session
.
close
();
}
}
@IntegrationTestController
static
class
SimpleController
{
...
...
spring-messaging/src/test/java/org/springframework/messaging/simp/handler/SimpleBrokerMessageHandlerTests.java
浏览文件 @
6ddacdc0
...
...
@@ -31,7 +31,6 @@ import org.springframework.messaging.simp.SimpMessageType;
import
org.springframework.messaging.support.MessageBuilder
;
import
static
org
.
junit
.
Assert
.*;
import
static
org
.
mockito
.
Mockito
.*;
...
...
spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandlerIntegrationTests.java
浏览文件 @
6ddacdc0
...
...
@@ -146,7 +146,7 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
@Test
(
expected
=
MessageDeliveryException
.
class
)
public
void
messageDeliverExceptionIfSystemSessionForwardFails
()
throws
Exception
{
StompHeaderAccessor
headers
=
StompHeaderAccessor
.
create
(
StompCommand
.
MESSAGE
);
StompHeaderAccessor
headers
=
StompHeaderAccessor
.
create
(
StompCommand
.
SEND
);
this
.
relay
.
handleMessage
(
MessageBuilder
.
withPayloadAndHeaders
(
"test"
,
headers
).
build
());
}
...
...
spring-messaging/src/test/resources/log4j.xml
浏览文件 @
6ddacdc0
...
...
@@ -12,7 +12,7 @@
</appender>
<logger
name=
"org.springframework.messaging"
>
<level
value=
"
trace
"
/>
<level
value=
"
debug
"
/>
</logger>
<logger
name=
"org.apache.activemq"
>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录