The route is taking properties from a POJO and building up a message
to use to send an email.  I add the from, to & subject headers in the
route which are just string values.  The message body is created using
a Velocity template which extracts some values from the POJO.

I included some tracers in the route and here is the info that is
logged by Camel immediately before calling the SMTP endpoint (I've
anonymised some of the data):

2018-01-05 11:42:09,265 []
org.apache.camel.processor.interceptor.Tracer  INFO -
ID-iusa16025-local-1515152339856-0-11 >>> (emailNotifications)
log[body] --> smtp://localhost <<< Pattern:InOnly,
Headers:{breadcrumbId=ID-iusa16025-local-1515152339856-0-11,
Content-Type=application/json, downloadSuccessful=false,
from=nore...@xxx.com, JMSCorrelationID=null,
JMSCorrelationIDAsBytes=null, JMSDeliveryMode=2,
JMSDestination=queue://emailQueue, JMSExpiration=0,
JMSMessageID=ID:iusa16025.local-64140-1515152341226-7:1:2:1:1,
JMSPriority=4, JMSRedelivered=false, JMSReplyTo=null,
JMSTimestamp=1515152529152, JMSType=null, JMSXGroupID=null,
JMSXUserID=null, subject=EDM Image Manager Alert, to=x...@yyy.com},
BodyType:String, Body:Hi,

Image https://i.xxx.com/zzz.png for template Sample Template failed to
upload to the CDN.

XXX Image Manager team.

The error message logged is this:

2018-01-05 11:42:09,312 []
org.apache.camel.processor.DefaultErrorHandler ERROR - Failed delivery
for (MessageId: ID-iusa16025-local-1515152339856-0-13 on ExchangeId:
ID-iusa16025-local-1515152339856-0-11). Exhausted after delivery
attempt: 1 caught: org.apache.camel.TypeConversionException: Error
during type conversion from type: java.lang.String to the required
type: java.lang.String with value queue://emailQueue due
com.fasterxml.jackson.databind.JsonMappingException: No serializer
found for class java.util.Vector$1 and no properties discovered to
create BeanSerializer (to avoid exception, disable
SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain:
org.apache.activemq.command.ActiveMQQueue["reference"]->javax.naming.Reference["all"])

Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor
                                                    Elapsed (ms)
[emailNotifications] [emailNotifications] [activemq://emailQueue
                                                  ] [       153]
[emailNotifications] [convertBodyTo4    ]
[convertBodyTo[com.yesmail.edmimagebridge.model.SingleImageModel]
        ] [         2]
[emailNotifications] [setHeader1        ] [setHeader[subject]
                                                  ] [         0]
[emailNotifications] [setHeader2        ] [setHeader[to]
                                                  ] [         4]
[emailNotifications] [setHeader3        ] [setHeader[from]
                                                  ] [         0]
[emailNotifications] [to9               ] [velocity:errorEmailBody.vm
                                                  ] [       101]
[emailNotifications] [log10             ] [log
                                                  ] [         0]
[emailNotifications] [to10              ] [smtp://localhost
                                                  ] [        46]

Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
org.apache.camel.TypeConversionException: Error during type conversion
from type: java.lang.String to the required type: java.lang.String
with value queue://emailQueue due
com.fasterxml.jackson.databind.JsonMappingException: No serializer
found for class java.util.Vector$1 and no properties discovered to
create BeanSerializer (to avoid exception, disable
SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain:
org.apache.activemq.command.ActiveMQQueue["reference"]->javax.naming.Reference["all"])

The message suggests that I should disable
SerializationFeature.FAIL_ON_EMPTY_BEANS but I'm not sure how to
achieve that.  I'm researching that just now and I was looking at
doing something like this:

JacksonDataFormat df = new JacksonDataFormat(java.util.Vector.class);
df.disableFeature(SerializationFeature.FAIL_ON_EMPTY_BEANS);

in beforeStart method of my CamelContextLifecycle class.

Reply via email to