apache / apache/dubbo-admin

Unexpected character ('.' (code 46)): Expected space separating root-level values

Open
#978 7 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
4.1k
Forks
2.2k
Avg merge
10d 12h
Merged PRs (30d)
4

Description

- [x] I have searched the [issues](https://github.com/apache/dubbo-admin/issues) of this repository and believe that this is not a duplicate.
- [x] I have checked the [REAMDE](https://github.com/apache/dubbo-admin/blob/develop/README.md) of this repository and believe that this is not a duplicate.

### Environment

* Dubbo Admin version: 0.5.0
* Registry center detail (type and version): zookeeper 3.8.0
* Operating System version: macos 13
* Java version: jdk17

### Steps to reproduce this issue

经测试,dubbo-admin注册到zookeeper后,消费者解析dubboAdmin的信息会序列化失败,导致启动失败
当清空zookeeper存储的信息,dubbo-admin不启动,则一切正常。

image

Pls. provide [GitHub address] to reproduce this issue.

### Expected Result

What do you expected from the above steps?

### Actual Result

What actually happens?

If there is an exception, please attach the exception trace:

```

java.lang.RuntimeException: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('.' (code 46)): Expected space separating root-level values
at [Source: (byte[])"10.233.123.163"; line: 1, column: 8]
at org.apache.dubbo.common.function.ThrowableFunction.execute(ThrowableFunction.java:54) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.common.function.ThrowableFunction.execute(ThrowableFunction.java:69) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.zookeeper.ZookeeperServiceDiscovery.doInServiceDiscovery(ZookeeperServiceDiscovery.java:185) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.zookeeper.ZookeeperServiceDiscovery.getInstances(ZookeeperServiceDiscovery.java:144) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.client.ServiceDiscoveryRegistry.subscribeURLs(ServiceDiscoveryRegistry.java:320) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.client.ServiceDiscoveryRegistry.doSubscribe(ServiceDiscoveryRegistry.java:226) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.client.ServiceDiscoveryRegistry.subscribe(ServiceDiscoveryRegistry.java:186) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.ListenerRegistryWrapper.subscribe(ListenerRegistryWrapper.java:88) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.integration.DynamicDirectory.subscribe(DynamicDirectory.java:184) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.client.ServiceDiscoveryRegistryDirectory.subscribe(ServiceDiscoveryRegistryDirectory.java:129) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.integration.RegistryProtocol.doCreateInvoker(RegistryProtocol.java:574) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.integration.InterfaceCompatibleRegistryProtocol.getServiceDiscoveryInvoker(InterfaceCompatibleRegistryProtocol.java:65) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.client.migration.MigrationInvoker.refreshServiceDiscoveryInvoker(MigrationInvoker.java:437) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.client.migration.MigrationInvoker.migrateToApplicationFirstInvoker(MigrationInvoker.java:245) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.client.migration.MigrationRuleHandler.refreshInvoker(MigrationRuleHandler.java:76) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.client.migration.MigrationRuleHandler.doMigrate(MigrationRuleHandler.java:60) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.client.migration.MigrationRuleListener.onRefer(MigrationRuleListener.java:249) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.integration.RegistryProtocol.interceptInvoker(RegistryProtocol.java:539) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.integration.RegistryProtocol.doRefer(RegistryProtocol.java:509) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.registry.integration.RegistryProtocol.refer(RegistryProtocol.java:491) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.rpc.protocol.ProtocolSecurityWrapper.refer(ProtocolSecurityWrapper.java:107) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.qos.protocol.QosProtocolWrapper.refer(QosProtocolWrapper.java:85) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper.refer(ProtocolListenerWrapper.java:74) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.rpc.cluster.filter.ProtocolFilterWrapper.refer(ProtocolFilterWrapper.java:71) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.rpc.protocol.ProtocolSerializationWrapper.refer(ProtocolSerializationWrapper.java:52) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.rpc.Protocol$Adaptive.refer(Protocol$Adaptive.java) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.config.ReferenceConfig.createInvokerForRemote(ReferenceConfig.java:605) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.config.ReferenceConfig.createProxy(ReferenceConfig.java:439) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:297) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:231) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.config.utils.SimpleReferenceCache.get(SimpleReferenceCache.java:132) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.config.deploy.DefaultModuleDeployer.lambda$referServices$6(DefaultModuleDeployer.java:396) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at java.util.concurrent.ConcurrentHashMap$ValuesView.forEach(ConcurrentHashMap.java:4780) ~[?:?]
at org.apache.dubbo.config.deploy.DefaultModuleDeployer.referServices(DefaultModuleDeployer.java:376) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.config.deploy.DefaultModuleDeployer.startSync(DefaultModuleDeployer.java:167) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.config.deploy.DefaultModuleDeployer.start(DefaultModuleDeployer.java:139) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onContextRefreshedEvent(DubboDeployApplicationListener.java:113) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:102) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:47) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-6.0.4.jar:6.0.4]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-6.0.4.jar:6.0.4]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-6.0.4.jar:6.0.4]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:413) ~[spring-context-6.0.4.jar:6.0.4]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:370) ~[spring-context-6.0.4.jar:6.0.4]
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) ~[spring-context-6.0.4.jar:6.0.4]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:587) ~[spring-context-6.0.4.jar:6.0.4]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.0.2.jar:3.0.2]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-3.0.2.jar:3.0.2]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) ~[spring-boot-3.0.2.jar:3.0.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-3.0.2.jar:3.0.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) ~[spring-boot-3.0.2.jar:3.0.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) ~[spring-boot-3.0.2.jar:3.0.2]
at com.cynray.bff.admin.AdminApplication.main(AdminApplication.java:16) ~[classes/:?]
Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('.' (code 46)): Expected space separating root-level values
at [Source: (byte[])"10.233.123.163"; line: 1, column: 8]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2418) ~[jackson-core-2.14.1.jar:2.14.1]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:749) ~[jackson-core-2.14.1.jar:2.14.1]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:673) ~[jackson-core-2.14.1.jar:2.14.1]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportMissingRootWS(ParserMinimalBase.java:721) ~[jackson-core-2.14.1.jar:2.14.1]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._verifyRootSpace(UTF8StreamJsonParser.java:1781) ~[jackson-core-2.14.1.jar:2.14.1]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._parseFloat(UTF8StreamJsonParser.java:1740) ~[jackson-core-2.14.1.jar:2.14.1]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._parseUnsignedNumber(UTF8StreamJsonParser.java:1504) ~[jackson-core-2.14.1.jar:2.14.1]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:905) ~[jackson-core-2.14.1.jar:2.14.1]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:793) ~[jackson-core-2.14.1.jar:2.14.1]
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4817) ~[jackson-databind-2.14.1.jar:2.14.1]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4723) ~[jackson-databind-2.14.1.jar:2.14.1]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3771) ~[jackson-databind-2.14.1.jar:2.14.1]
at org.apache.curator.x.discovery.details.JsonInstanceSerializer.deserialize(JsonInstanceSerializer.java:86) ~[curator-x-discovery-5.4.0.jar:?]
at org.apache.curator.x.discovery.details.ServiceDiscoveryImpl.queryForInstance(ServiceDiscoveryImpl.java:325) ~[curator-x-discovery-5.4.0.jar:?]
at org.apache.curator.x.discovery.details.ServiceDiscoveryImpl.queryForInstances(ServiceDiscoveryImpl.java:393) ~[curator-x-discovery-5.4.0.jar:?]
at org.apache.curator.x.discovery.details.ServiceDiscoveryImpl.queryForInstances(ServiceDiscoveryImpl.java:307) ~[curator-x-discovery-5.4.0.jar:?]
at org.apache.dubbo.registry.zookeeper.ZookeeperServiceDiscovery.lambda$getInstances$2(ZookeeperServiceDiscovery.java:144) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
at org.apache.dubbo.common.function.ThrowableFunction.execute(ThrowableFunction.java:52) ~[dubbo-3.2.0-beta.5.jar:3.2.0-beta.5]
... 52 more
```

Contributor guide

Open the contributing guide

Research direction

Read ZookeeperServiceDiscovery.getInstances at line 144 and doInServiceDiscovery at line 185, then inspect the registered data that Curator's JsonInstanceSerializer attempts to deserialize. Reproduce with Dubbo Admin 0.5.0, ZooKeeper 3.8.0, and JDK 17; done means a consumer starts after Admin registration without the Jackson parse exception.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, json
Domain
backend, distributed-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.