public static void handle(String service, MuleMessage responseMessage, BaseMessage request) {
   BaseMessage reply = null;
   if (responseMessage.getExceptionPayload() == null) {
     reply = (BaseMessage) responseMessage.getPayload();
   } else {
     Throwable t = responseMessage.getExceptionPayload().getException();
     t = (t.getCause() == null) ? t : t.getCause();
     reply = new EucalyptusErrorMessageType(service, request, t.getMessage());
   }
   String corrId = reply.getCorrelationId();
   EventRecord.here(
           EuareReplyQueue.class,
           EventType.MSG_REPLY,
           reply.getCorrelationId(),
           reply.getClass().getSimpleName())
       .debug();
   try {
     Context context = Contexts.lookup(corrId);
     Channel channel = context.getChannel();
     Channels.write(channel, reply);
     Contexts.clear(context);
   } catch (NoSuchContextException e) {
     LOG.trace(e, e);
   }
 }
 public void handle(BaseMessage responseMessage) {
   EventRecord.here(
           EuareReplyQueue.class,
           EventType.MSG_REPLY,
           responseMessage.getCorrelationId(),
           responseMessage.getClass().getSimpleName())
       .debug();
   LOG.debug("HERE: " + responseMessage);
   String corrId = responseMessage.getCorrelationId();
   try {
     Context context = Contexts.lookup(corrId);
     Channel channel = context.getChannel();
     Channels.write(channel, responseMessage);
     Contexts.clear(context);
   } catch (NoSuchContextException e) {
     LOG.warn("Received a reply for absent client:  No channel to write response message.", e);
     LOG.debug(responseMessage);
   }
 }
예제 #3
0
 @Override
 public void handleUpstream(final ChannelHandlerContext ctx, final ChannelEvent e)
     throws Exception {
   final MappingHttpMessage request = MappingHttpMessage.extractMessage(e);
   final BaseMessage msg = BaseMessage.extractMessage(e);
   if ((request != null) && (msg != null)) {
     final User user = Contexts.lookup(request.getCorrelationId()).getUser();
     if (user.isSystemAdmin() || ServiceOperations.isUserOperation(msg)) {
       ctx.sendUpstream(e);
     } else {
       Contexts.clear(Contexts.lookup(msg.getCorrelationId()));
       ctx.getChannel()
           .write(
               new MappingHttpResponse(
                   request.getProtocolVersion(), HttpResponseStatus.FORBIDDEN));
     }
   } else {
     ctx.sendUpstream(e);
   }
 }
예제 #4
0
    @Override
    public void handleUpstream(
        final ChannelHandlerContext channelHandlerContext, final ChannelEvent channelEvent)
        throws Exception {
      if (channelEvent instanceof MessageEvent && componentIdClass != null) {
        final BaseMessage message = BaseMessage.extractMessage(channelEvent);
        final ComponentMessage componentMessage =
            message == null
                ? null
                : Ats.inClassHierarchy(message.getClass()).get(ComponentMessage.class);
        if (message != null
            && (componentMessage == null || !componentIdClass.equals(componentMessage.value()))) {
          LOG.warn(
              String.format(
                  "Message %s does not match pipeline component %s",
                  message.getClass(), componentIdClass.getSimpleName()));

          final MappingHttpMessage mappingHttpMessage =
              MappingHttpMessage.extractMessage(channelEvent);
          final BaseMessage baseMessage = BaseMessage.extractMessage(channelEvent);
          if (baseMessage != null) {
            Contexts.clear(Contexts.lookup(baseMessage.getCorrelationId()));
          }
          channelHandlerContext
              .getChannel()
              .write(
                  new MappingHttpResponse(
                      mappingHttpMessage == null
                          ? HttpVersion.HTTP_1_1
                          : mappingHttpMessage.getProtocolVersion(),
                      HttpResponseStatus.BAD_REQUEST));
          return;
        }
      }
      channelHandlerContext.sendUpstream(channelEvent);
    }