Hi all,
after many experiments of using camel-avro, I decided to send an email to the
list as I'm getting ClassCastException errors, even with simple schemas.
Java class from AVRO Schema file (avsc) generation works fine and the resulting
class builds and is included in the end project, but I can't really make it
work.
Using Avro 1.7.5, and trying to send messages over jetty (using camel-avro and
camel-jetty resp), and using this schema:
{ "namespace" : "serialisationtests.generated",
"type" : "record",
"name" : "TestPacket",
"fields" : [
{ "name": "firstname", "type": "string" },
{ "name": "lastname", "type": "string" },
{ "name": "date", "type" : "string" },
{ "name": "features", "type": {"type": "array", "items": "string"}},
{ "name": "properties", "type": {"type": "map", "values": "string"}}
]
}
I then use camel-dataset to produce such objects and then pass them through
avro marshalling to a jetty listener.
This is the exception I'm getting when trying to run mvn test:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running serialisationtests.test.SerialisationTest
[ main] SerialisationTest INFO
********************************************************************************
[ main] SerialisationTest INFO Testing:
testReceivedDirectJettyMessages(serialisationtests.test.SerialisationTest)
[ main] SerialisationTest INFO
********************************************************************************
[ main] SpringCamelContext INFO Apache
Camel 2.12.0.redhat-610336 (CamelContext: camel-1) is starting
[ main] ManagedManagementStrategy INFO JMX is
enabled
[ main] DefaultTypeConverter INFO Loaded
186 type converters
[ main] set://myDataSet?produceDelay=0 INFO
Endpoint[dataset://myDataSet?produceDelay=0] expecting 6000 messages
[ main] SpringCamelContext INFO
StreamCaching is not in use. If using streams then its recommended to enable
stream caching. See more details at http://camel.apache.org/stream-caching.html
[ main] SpringCamelContext INFO Route:
route1 started and consuming from: Endpoint[dataset://myDataSet?produceDelay=0]
[ main] JettyHttpComponent WARN You use
localhost interface! It means that no external connections will be available.
Don't you want to use 0.0.0.0 instead (all network interfaces)?
Endpoint[http://localhost:8888/myservice]
[ main] JettyHttpComponent INFO Using
default Jetty continuation timeout for:
Endpoint[http://localhost:8888/myservice]
[ main] Server INFO
jetty-8.1.9.v20130131
[ main] AbstractConnector INFO Started
SelectChannelConnector@localhost:8888
[ main] SpringCamelContext INFO Route:
route2 started and consuming from: Endpoint[http://localhost:8888/myservice]
[ main] SpringCamelContext INFO Total 2
routes, of which 2 is started.
[ main] SpringCamelContext INFO Apache
Camel 2.12.0.redhat-610336 (CamelContext: camel-1) started in 2.611 seconds
[ main] MockEndpoint INFO
Asserting: Endpoint[mock://result-jetty] is satisfied
[hread #0 - dataset://myDataSet] DefaultErrorHandler ERROR Failed
delivery for (MessageId: ID-pippin-46409-1391532031804-0-1 on ExchangeId:
ID-pippin-46409-1391532031804-0-2). Exhausted after delivery attempt: 1 caught:
java.lang.ClassCastException: java.util.ArrayList$Itr cannot be cast to
org.apache.avro.generic.IndexedRecord
Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId ProcessorId Processor
Elapsed (ms)
[route1 ] [route1 ] [dataset://myDataSet?produceDelay=0
] [ 81]
[route1 ] [marshal1 ] [marshal[ref:avro]
] [ 69]
Exchange
---------------------------------------------------------------------------------------------------------------------------------------
Exchange[
Id ID-pippin-46409-1391532031804-0-2
ExchangePattern InOnly
Headers {breadcrumbId=ID-pippin-46409-1391532031804-0-1,
CamelDataSetIndex=0, CamelRedelivered=false, CamelRedeliveryCounter=0}
BodyType java.util.ArrayList.Itr
Body java.util.ArrayList$Itr@104ff98
]
Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
java.lang.ClassCastException: java.util.ArrayList$Itr cannot be cast to
org.apache.avro.generic.IndexedRecord
at
org.apache.avro.generic.GenericData.getField(GenericData.java:576)[avro-1.7.5.jar:1.7.5]
at
org.apache.avro.generic.GenericData.getField(GenericData.java:591)[avro-1.7.5.jar:1.7.5]
at
org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:112)[avro-1.7.5.jar:1.7.5]
at
org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:104)[avro-1.7.5.jar:1.7.5]
at
org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:66)[avro-1.7.5.jar:1.7.5]
at
org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:58)[avro-1.7.5.jar:1.7.5]
at
org.apache.camel.dataformat.avro.AvroDataFormat.marshal(AvroDataFormat.java:124)[camel-avro-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
org.apache.camel.processor.MarshalProcessor.process(MarshalProcessor.java:81)[camel-core-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)[camel-core-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)[camel-core-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[camel-core-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
org.apache.camel.processor.Pipeline.process(Pipeline.java:118)[camel-core-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
org.apache.camel.processor.Pipeline.process(Pipeline.java:80)[camel-core-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[camel-core-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:105)[camel-core-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:87)[camel-core-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
org.apache.camel.component.dataset.DataSetConsumer.sendMessages(DataSetConsumer.java:89)[camel-core-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
org.apache.camel.component.dataset.DataSetConsumer$1.run(DataSetConsumer.java:70)[camel-core-2.12.0.redhat-610336.jar:2.12.0.redhat-610336]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)[:1.6.0_29]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.6.0_29]
at java.lang.Thread.run(Thread.java:701)[:1.6.0_29]
[hread #0 - dataset://myDataSet] DefaultErrorHandler ERROR Failed
delivery for (MessageId: ID-pippin-46409-1391532031804-0-3 on ExchangeId:
ID-pippin-46409-1391532031804-0-4). Exhausted after delivery attempt: 1 caught:
java.lang.ClassCastException: java.util.ArrayList$Itr cannot be cast to
org.apache.avro.generic.IndexedRecord
Any suggestions/solutions appreciated.
Thanks
Kostas Margaritis