Ich möchte nicht serialisierbaren Objekt zu Camel-Cache und erhalten. In der Routenkonfiguration des Caches setze ich den Parameter objectCache wie unten gezeigt auf true.Apache Camel Cache-Konfiguration funktioniert nicht
from("cache://MyCache"
+ "?maxElementsInMemory=5" +
"&memoryStoreEvictionPolicy=" +
"MemoryStoreEvictionPolicy.FIFO" +
"&overflowToDisk=false" +
"&timeToLiveSeconds=300" +
"&objectCache=true" +
"&diskExpiryThreadIntervalSeconds=30").to("mock:endpoint");
Es gibt kein Problem beim Einfügen in den Cache mit folgendem Code.
from("direct:addToCache").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
MyObject ad = (MyObject) exchange.getIn().getBody();
String key= ad.getId();
WebServiceResponse value= ad.getWebServiceResponse();
exchange.getIn().setHeader(CacheConstants.CACHE_OPERATION, CacheConstants.CACHE_OPERATION_ADD);
exchange.getIn().setHeader(CacheConstants.CACHE_KEY, key);
exchange.getIn().setBody(value);
}
}).to("cache://MyCache");
Aber beim Abrufen Element aus dem Cache folgenden Ausnahme ausgelöst.
org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: com.aaa.model.WebServiceResponse to the required type: java.io.InputStream with value [email protected]
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:185)
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:156)
at org.apache.camel.component.cache.CacheProducer.createElementFromBody(CacheProducer.java:132)
at org.apache.camel.component.cache.CacheProducer.performCacheOperation(CacheProducer.java:82)
at org.apache.camel.component.cache.CacheProducer.process(CacheProducer.java:71)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
at org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:68)
at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:412)
at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:380)
at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:270)
at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:380)
Während CacheProducerClass.createElementFromBody Verfahren Debugging, merke ich, dass Object Parameter als unwahr gesetzt. Alle anderen Parameter werden als die Default-Werte festgelegt. (MaxElementsInMemory = 1000 und memoryStoreEvictionPolicy = MemoryStoreEvictionPolicy.LFU)
com.aaa.model.WebServiceResponse-Klasse ist nicht serialisierbar.
Haben Sie eine Idee zu diesem Problem? Warum Cache-Parameter nicht mit den Werten in der Cache-Definition überschrieben werden?