View Javadoc

1   /*
2    * $Id: InboundEndpointMimeTypeCheckingMessageProcessor.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  
12  package org.mule.endpoint.inbound;
13  
14  import org.mule.api.MessagingException;
15  import org.mule.api.MuleEvent;
16  import org.mule.api.MuleMessage;
17  import org.mule.api.config.MuleProperties;
18  import org.mule.api.endpoint.InboundEndpoint;
19  import org.mule.api.processor.MessageProcessor;
20  import org.mule.api.transport.PropertyScope;
21  import org.mule.config.i18n.CoreMessages;
22  import org.mule.util.ObjectUtils;
23  
24  import javax.activation.MimeType;
25  import javax.activation.MimeTypeParseException;
26  
27  /**
28   * Verify that the inbound mime type is acceptable by this endpoint.
29   */
30  public class InboundEndpointMimeTypeCheckingMessageProcessor implements MessageProcessor
31  {
32      private InboundEndpoint endpoint;
33  
34      public InboundEndpointMimeTypeCheckingMessageProcessor(InboundEndpoint endpoint)
35      {
36          this.endpoint = endpoint;
37      }
38  
39      public MuleEvent process(MuleEvent event) throws MessagingException
40      {
41          String endpointMimeType = endpoint.getMimeType();
42          if (endpointMimeType != null)
43          {
44              MuleMessage message = event.getMessage();
45              String contentType = message.getProperty(MuleProperties.CONTENT_TYPE_PROPERTY, PropertyScope.INBOUND);
46              if (contentType == null)
47              {
48                  contentType = message.getProperty(MuleProperties.CONTENT_TYPE_PROPERTY, PropertyScope.OUTBOUND);
49              }
50              if (contentType == null)
51              {
52                  message.setProperty(MuleProperties.CONTENT_TYPE_PROPERTY, endpointMimeType, PropertyScope.INBOUND);
53              }
54              else
55              {
56                  try
57                  {
58                      MimeType mt = new MimeType(contentType);
59                      String messageMimeType = mt.getPrimaryType() + "/" + mt.getSubType();
60                      if (!messageMimeType.equals(endpointMimeType))
61                      {
62                          throw new MessagingException(
63                              CoreMessages.unexpectedMIMEType(messageMimeType, endpointMimeType), event);
64                      }
65                  }
66                  catch (MimeTypeParseException ex)
67                  {
68                      throw new MessagingException(CoreMessages.illegalMIMEType(contentType), event, ex);
69                  }
70              }
71          }
72  
73          return event;
74      }
75  
76      @Override
77      public String toString()
78      {
79          return ObjectUtils.toString(this);
80      }
81  }