You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@karaf.apache.org by "Jean-Baptiste Onofré (Jira)" <ji...@apache.org> on 2020/10/02 05:25:00 UTC

[jira] [Resolved] (KARAF-2355) Encoding issue for Redis key using xml blueprint

     [ https://issues.apache.org/jira/browse/KARAF-2355?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jean-Baptiste Onofré resolved KARAF-2355.
-----------------------------------------
    Resolution: Won't Fix

> Encoding issue for Redis key using xml blueprint
> ------------------------------------------------
>
>                 Key: KARAF-2355
>                 URL: https://issues.apache.org/jira/browse/KARAF-2355
>             Project: Karaf
>          Issue Type: Bug
>    Affects Versions: 2.3.1
>         Environment: Karaf 2.3.1
> Camel 2.11.0
> JDK 1.7
>            Reporter: Djee
>            Priority: Major
>              Labels: blueprint, karaf
>
> When trying to use the spring-camel-redis feature with the first xml blueprint, I met the issue of a wrong encoding for the keys. For example, the key "test" will be registered in Redis as \xac\xed\x00\x05t\x00\x04test.
> ----
> <?xml version="1.0" encoding="UTF8"?>
> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
>     <camelContext xmlns="http://camel.apache.org/schema/blueprint" id="monAutreContXML">
>         <route>
> 		<from uri="stream:file?fileName=./inboxRedis/test&amp;scanStream=true"/>
> 			<setHeader headerName="CamelRedis.Key">
> 				<constant>test</constant>
> 			</setHeader>
> 		<to uri="spring-redis://ip.of.server?command=SET"/>
> 		<to uri="stream:out"/>
>         </route>
>     </camelContext>
> </blueprint>
> ----
>  After some researches, it looks like it comes from the lack of a StringRedisSerializer in a RedisTemplate. But, when I tried to create one in the second blueprint :
> ----
> <?xml version="1.0" encoding="UTF8"?>
> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
> 	<bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
> 		<property name="hostName" value="ip.of.server" />
> 		<property name="port" value="6379"/>
> 	</bean>
> 	
> 	<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
> 	<bean id="RedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
> 		<property name="connectionFactory" ref="redisConnectionFactory"/>
> 		<property name="keySerializer" ref = "stringRedisSerializer"/>
> 		<property name="hashKeySerializer" ref = "stringRedisSerializer"/>
> 		<property name="valueSerializer" ref = "stringRedisSerializer"/>
> 		<property name="hashValueSerializer" ref = "stringRedisSerializer"/>
> 	</bean>
> 		<camelContext xmlns="http://camel.apache.org/schema/blueprint" id="monAutreContXML">
> 			<route>
> 			<from uri="stream:file?fileName=./inboxRedis/test&amp;scanStream=true"/>
> 				<setHeader headerName="CamelRedis.Key">
> 					<constant>myKey</constant>
> 				</setHeader>
> 			<to uri="stream:out"/>
> 			<to uri="spring-redis://ip.of.server?command=SET&amp;redisTemplate=#RedisTemplate"/></route>
> 		</camelContext> 
> </blueprint>
> ----
> I got the following error :
> ----
> org.osgi.service.blueprint.container.ComponentDefinitionException: Error setting property: PropertyDescriptor <name: keySerializer, getter: class org.springfram
> ework.data.redis.core.RedisTemplate.getKeySerializer(), setter: [class org.springframework.data.redis.core.RedisTemplate.setKeySerializer(interface org.springfr
> amework.data.redis.serializer.RedisSerializer)]
>         at org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:941)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:907)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:888)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:820)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)[7:org.apache.aries.blueprint.core:1.1.0]
>         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)[:1.7.0_21]
>         at java.util.concurrent.FutureTask.run(FutureTask.java:166)[:1.7.0_21]
>         at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:183)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:668)[7:org.apache.aries.blueprint.
> core:1.1.0]
>         at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:370)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:261)[7:org.apache.aries.blueprint.core:1.1.0]
>         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)[:1.7.0_21]
>         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)[:1.7.0_21]
>         at java.util.concurrent.FutureTask.run(FutureTask.java:166)[:1.7.0_21]
>         at org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)[7:org.apache.aries.blueprint.core:1.1.0]
>         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)[:1.7.0_21]
>         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)[:1.7.0_21]
>         at java.util.concurrent.FutureTask.run(FutureTask.java:166)[:1.7.0_21]
>         at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)[:1.7.0_21]
>         at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)[:1.7.0_21]
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_21]
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_21]
>         at java.lang.Thread.run(Thread.java:722)[:1.7.0_21]
> Caused by: java.lang.Exception: Unable to convert value org.springframework.data.redis.serializer.StringRedisSerializer@1512df87 to type org.springframework.dat
> a.redis.serializer.RedisSerializer<java.lang.Object>
>         at org.apache.aries.blueprint.container.AggregateConverter.convert(AggregateConverter.java:184)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.container.BlueprintRepository.convert(BlueprintRepository.java:402)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.utils.ReflectionUtils$PropertyDescriptor.convert(ReflectionUtils.java:394)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.utils.ReflectionUtils$MethodPropertyDescriptor.internalSet(ReflectionUtils.java:628)[7:org.apache.aries.blueprint.core:1.1
> .0]
>         at org.apache.aries.blueprint.utils.ReflectionUtils$PropertyDescriptor.set(ReflectionUtils.java:378)[7:org.apache.aries.blueprint.core:1.1.0]
>         at org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:939)[7:org.apache.aries.blueprint.core:1.1.0]
>         ... 26 more
> ----
> Here is the list of bundles installed and with only this blueprint in the deploy directory :
> ----
> START LEVEL 100 , List Threshold: 50
>    ID   State         Blueprint      Spring    Level  Name
> [  62] [Active     ] [            ] [       ] [   50] camel-core (2.11.0)
> [  63] [Active     ] [Created     ] [       ] [   50] camel-karaf-commands (2.11.0)
> [  78] [Active     ] [            ] [       ] [   50] geronimo-jta_1.1_spec (1.1.1)
> [  79] [Active     ] [            ] [       ] [   50] camel-spring (2.11.0)
> [  80] [Active     ] [Created     ] [       ] [   50] camel-blueprint (2.11.0)
> [ 109] [Active     ] [            ] [       ] [   50] Commons Codec (1.6.0)
> [ 110] [Active     ] [            ] [       ] [   50] Apache ServiceMix :: Bundles :: commons-beanutils (1.8.3.1)
> [ 111] [Active     ] [            ] [       ] [   50] Commons Collections (3.2.1)
> [ 112] [Active     ] [            ] [       ] [   50] Commons Configuration (1.8.0)
> [ 113] [Active     ] [            ] [       ] [   50] Commons Digester (2.1)
> [ 114] [Active     ] [            ] [       ] [   50] Commons JXPath (1.3)
> [ 115] [Active     ] [            ] [       ] [   50] Apache ServiceMix :: Bundles :: jdom (1.1.0.4)
> [ 116] [Active     ] [            ] [       ] [   50] Commons Lang (2.6)
> [ 117] [Active     ] [            ] [       ] [   50] Apache ServiceMix :: Bundles :: ant (1.7.0.6)
> [ 118] [Active     ] [            ] [       ] [   50] Commons Daemon (1.0.5)
> [ 119] [Active     ] [            ] [       ] [   50] Apache ServiceMix :: Bundles :: commons-httpclient (3.1.0.7)
> [ 120] [Active     ] [            ] [       ] [   50] Commons Math (2.2)
> [ 121] [Active     ] [            ] [       ] [   50] Commons Net (3.2.0)
> [ 122] [Active     ] [            ] [       ] [   50] Jackson JSON processor (1.9.12)
> [ 123] [Active     ] [            ] [       ] [   50] Data mapper for Jackson JSON processor (1.9.12)
> [ 124] [Active     ] [            ] [       ] [   50] Apache ServiceMix :: Bundles :: jetty (6.1.26.4)
> [ 125] [Active     ] [            ] [       ] [   50] Apache ServiceMix :: Bundles :: hadoop-core (1.1.1.1)
> [ 126] [Active     ] [            ] [       ] [   50] camel-hdfs (2.11.0)
> [ 127] [Active     ] [            ] [       ] [   50] Apache ServiceMix :: Specs :: JCR API 2.0 (2.2.0)
> [ 128] [Active     ] [            ] [       ] [   50] Jackrabbit JCR Commons (2.5.2)
> [ 129] [Active     ] [            ] [       ] [   50] Jackrabbit WebDAV Library (2.5.2)
> [ 130] [Active     ] [            ] [       ] [   50] Commons JEXL (2.0.1)
> [ 131] [Active     ] [            ] [       ] [   50] Commons VFS Core (2.0)
> [ 132] [Active     ] [            ] [       ] [   50] Apache ServiceMix :: Bundles :: xmlresolver (1.2.0.5)
> [ 133] [Active     ] [            ] [       ] [   50] Apache ServiceMix :: Bundles :: jsch (0.1.49.1)
> [ 142] [Active     ] [            ] [       ] [   50] Commons Pool (1.6.0)
> [ 143] [Active     ] [            ] [       ] [   50] Spring Data Redis Support (1.0.3.RELEASE)
> [ 144] [Active     ] [            ] [       ] [   50] Apache ServiceMix :: Bundles :: jedis (2.1.0.1)
> [ 145] [Active     ] [            ] [       ] [   50] camel-spring-redis (2.11.0)
> [ 147] [Active     ] [            ] [       ] [   50] camel-http (2.11.0)
> [ 158] [Active     ] [            ] [       ] [   50] camel-stream (2.11.0)
> [ 170] [Active     ] [Failure     ] [       ] [   80] camel-test.xml (0.0.0)
> [ 172] [Active     ] [            ] [       ] [   50] camel-ftp (2.11.0)
> ----



--
This message was sent by Atlassian Jira
(v8.3.4#803005)