下面列出了怎么用org.springframework.web.socket.messaging.WebSocketAnnotationMethodMessageHandler的API类实例代码及写法,或者点击链接到github查看源代码。
@Test
public void testAfterMessageHandled() {
Span span = mock(Span.class);
Scope scope = mock(Scope.class);
MessageHandler messageHandler = mock(WebSocketAnnotationMethodMessageHandler.class);
MessageBuilder<String> messageBuilder = MessageBuilder.withPayload("Hi")
.setHeader(TracingChannelInterceptor.SIMP_MESSAGE_TYPE, SimpMessageType.MESSAGE)
.setHeader(TracingChannelInterceptor.SIMP_DESTINATION, TEST_DESTINATION)
.setHeader(TracingChannelInterceptor.OPENTRACING_SCOPE, scope)
.setHeader(TracingChannelInterceptor.OPENTRACING_SPAN, span);
TracingChannelInterceptor interceptor = new TracingChannelInterceptor(mockTracer,
Tags.SPAN_KIND_CLIENT);
interceptor.afterMessageHandled(messageBuilder.build(), null, messageHandler, null);
// Verify span is finished and scope is closed
verify(span).finish();
verify(scope).close();
}
private void registerAnnotationMethodMessageHandler(Element messageBrokerElement,
RuntimeBeanReference inChannel, RuntimeBeanReference outChannel,
RuntimeBeanReference converter, RuntimeBeanReference messagingTemplate,
ParserContext context, @Nullable Object source) {
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
cargs.addIndexedArgumentValue(0, inChannel);
cargs.addIndexedArgumentValue(1, outChannel);
cargs.addIndexedArgumentValue(2, messagingTemplate);
MutablePropertyValues values = new MutablePropertyValues();
String prefixAttribute = messageBrokerElement.getAttribute("application-destination-prefix");
values.add("destinationPrefixes", Arrays.asList(StringUtils.tokenizeToStringArray(prefixAttribute, ",")));
values.add("messageConverter", converter);
RootBeanDefinition beanDef = new RootBeanDefinition(WebSocketAnnotationMethodMessageHandler.class, cargs, values);
if (messageBrokerElement.hasAttribute("path-matcher")) {
String pathMatcherRef = messageBrokerElement.getAttribute("path-matcher");
beanDef.getPropertyValues().add("pathMatcher", new RuntimeBeanReference(pathMatcherRef));
}
RuntimeBeanReference validatorRef = getValidator(messageBrokerElement, source, context);
if (validatorRef != null) {
beanDef.getPropertyValues().add("validator", validatorRef);
}
Element resolversElement = DomUtils.getChildElementByTagName(messageBrokerElement, "argument-resolvers");
if (resolversElement != null) {
values.add("customArgumentResolvers", extractBeanSubElements(resolversElement, context));
}
Element handlersElement = DomUtils.getChildElementByTagName(messageBrokerElement, "return-value-handlers");
if (handlersElement != null) {
values.add("customReturnValueHandlers", extractBeanSubElements(handlersElement, context));
}
registerBeanDef(beanDef, context, source);
}
private void registerAnnotationMethodMessageHandler(Element messageBrokerElement,
RuntimeBeanReference inChannel, RuntimeBeanReference outChannel,
RuntimeBeanReference converter, RuntimeBeanReference messagingTemplate,
ParserContext context, @Nullable Object source) {
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
cargs.addIndexedArgumentValue(0, inChannel);
cargs.addIndexedArgumentValue(1, outChannel);
cargs.addIndexedArgumentValue(2, messagingTemplate);
MutablePropertyValues values = new MutablePropertyValues();
String prefixAttribute = messageBrokerElement.getAttribute("application-destination-prefix");
values.add("destinationPrefixes", Arrays.asList(StringUtils.tokenizeToStringArray(prefixAttribute, ",")));
values.add("messageConverter", converter);
RootBeanDefinition beanDef = new RootBeanDefinition(WebSocketAnnotationMethodMessageHandler.class, cargs, values);
if (messageBrokerElement.hasAttribute("path-matcher")) {
String pathMatcherRef = messageBrokerElement.getAttribute("path-matcher");
beanDef.getPropertyValues().add("pathMatcher", new RuntimeBeanReference(pathMatcherRef));
}
RuntimeBeanReference validatorRef = getValidator(messageBrokerElement, source, context);
if (validatorRef != null) {
beanDef.getPropertyValues().add("validator", validatorRef);
}
Element resolversElement = DomUtils.getChildElementByTagName(messageBrokerElement, "argument-resolvers");
if (resolversElement != null) {
values.add("customArgumentResolvers", extractBeanSubElements(resolversElement, context));
}
Element handlersElement = DomUtils.getChildElementByTagName(messageBrokerElement, "return-value-handlers");
if (handlersElement != null) {
values.add("customReturnValueHandlers", extractBeanSubElements(handlersElement, context));
}
registerBeanDef(beanDef, context, source);
}
@Override
public void afterMessageHandled(final Message<?> message, final MessageChannel channel, final MessageHandler handler, final Exception arg3) {
if ((handler instanceof WebSocketAnnotationMethodMessageHandler || handler instanceof SubProtocolWebSocketHandler) && SimpMessageType.MESSAGE.equals(message.getHeaders().get(SIMP_MESSAGE_TYPE))) {
message.getHeaders().get(OPENTRACING_SCOPE, Scope.class).close();
message.getHeaders().get(OPENTRACING_SPAN, Span.class).finish();
// MessageHeaders are immutable
// message.getHeaders().remove(OPENTRACING_SCOPE);
}
}
@Override
public Message<?> beforeHandle(final Message<?> message, final MessageChannel channel, final MessageHandler handler) {
if ((!(handler instanceof WebSocketAnnotationMethodMessageHandler) && !(handler instanceof SubProtocolWebSocketHandler)) || !SimpMessageType.MESSAGE.equals(message.getHeaders().get(SIMP_MESSAGE_TYPE)))
return message;
final Span span = message.getHeaders().get(OPENTRACING_SPAN, Span.class);
final Scope scope = tracer.scopeManager().activate(span);
return MessageBuilder.fromMessage(message).setHeader(OPENTRACING_SCOPE, scope).build();
}
@Override
public void afterMessageHandled(Message<?> message, MessageChannel channel,
MessageHandler handler, Exception arg3) {
if ((handler instanceof WebSocketAnnotationMethodMessageHandler ||
handler instanceof SubProtocolWebSocketHandler) &&
SimpMessageType.MESSAGE.equals(message.getHeaders().get(SIMP_MESSAGE_TYPE))) {
message.getHeaders().get(OPENTRACING_SCOPE, Scope.class).close();
message.getHeaders().get(OPENTRACING_SPAN, Span.class).finish();
}
}
@Override
public Message<?> beforeHandle(Message<?> message, MessageChannel channel,
MessageHandler handler) {
if ((handler instanceof WebSocketAnnotationMethodMessageHandler ||
handler instanceof SubProtocolWebSocketHandler) &&
SimpMessageType.MESSAGE.equals(message.getHeaders().get(SIMP_MESSAGE_TYPE))) {
Span span = message.getHeaders().get(OPENTRACING_SPAN, Span.class);
Scope scope = tracer.scopeManager().activate(span);
message = MessageBuilder.fromMessage(message)
.setHeader(OPENTRACING_SCOPE, scope)
.build();
}
return message;
}
private void registerAnnotationMethodMessageHandler(Element messageBrokerElement,
RuntimeBeanReference inChannel, RuntimeBeanReference outChannel,
RuntimeBeanReference converter, RuntimeBeanReference messagingTemplate,
ParserContext context, Object source) {
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
cavs.addIndexedArgumentValue(0, inChannel);
cavs.addIndexedArgumentValue(1, outChannel);
cavs.addIndexedArgumentValue(2, messagingTemplate);
MutablePropertyValues values = new MutablePropertyValues();
String prefixAttribute = messageBrokerElement.getAttribute("application-destination-prefix");
values.add("destinationPrefixes", Arrays.asList(StringUtils.tokenizeToStringArray(prefixAttribute, ",")));
values.add("messageConverter", converter);
RootBeanDefinition beanDef = new RootBeanDefinition(WebSocketAnnotationMethodMessageHandler.class, cavs, values);
if (messageBrokerElement.hasAttribute("path-matcher")) {
String pathMatcherRef = messageBrokerElement.getAttribute("path-matcher");
beanDef.getPropertyValues().add("pathMatcher", new RuntimeBeanReference(pathMatcherRef));
}
Element resolversElement = DomUtils.getChildElementByTagName(messageBrokerElement, "argument-resolvers");
if (resolversElement != null) {
values.add("customArgumentResolvers", extractBeanSubElements(resolversElement, context));
}
Element handlersElement = DomUtils.getChildElementByTagName(messageBrokerElement, "return-value-handlers");
if (handlersElement != null) {
values.add("customReturnValueHandlers", extractBeanSubElements(handlersElement, context));
}
registerBeanDef(beanDef, context, source);
}
@Override
protected SimpAnnotationMethodMessageHandler createAnnotationMethodMessageHandler() {
return new WebSocketAnnotationMethodMessageHandler(
clientInboundChannel(), clientOutboundChannel(), brokerMessagingTemplate());
}
@Override
protected SimpAnnotationMethodMessageHandler createAnnotationMethodMessageHandler() {
return new WebSocketAnnotationMethodMessageHandler(
clientInboundChannel(), clientOutboundChannel(), brokerMessagingTemplate());
}
@Override
protected SimpAnnotationMethodMessageHandler createAnnotationMethodMessageHandler() {
return new WebSocketAnnotationMethodMessageHandler(clientInboundChannel(),
clientOutboundChannel(), brokerMessagingTemplate());
}