2016-04-05 13 views
1

Ich erstellte eine Webanwendung, die über Redisson-Treiber mit einem Redis-Cache-Cluster kommuniziert. Der Redisson-Treiber lädt seine Konfiguration aus einer YAML-Datei. Die Konfiguration enthält einige Attribute, die mithilfe eines Konstruktors für die Objekterstellung erstellt werden. Aus irgendeinem Grund die Konfiguration aufgrund dieser Konstruktor-Methode ruft mit dem folgenden Fehler nicht geladen werden kann:Konnte kein Java-Objekt aufgrund "Ungültiger Tag" Fehler erstellen

org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/SessionManagement]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:939) 
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1812) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: Can't construct a java object for org.redisson.connection.balancer.RoundRobinLoadBalancer; exception=Invalid tag: org.redisson.connection.balancer.RoundRobinLoadBalancer 
in 'reader', line 14, column 17: 
     loadBalancer: !<org.redisson.connection.balanc ... 
        ^

    at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:350) 
    at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) 
    at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:373) 

Hier ist die YAML-Datei:

--- 
clusterServersConfig: 
    idleConnectionTimeout: 10000 
    pingTimeout: 1000 
    connectTimeout: 1000 
    timeout: 1000 
    retryAttempts: 3 
    retryInterval: 1000 
    reconnectionTimeout: 3000 
    failedAttempts: 3 
    password: null 
    subscriptionsPerConnection: 5 
    clientName: null 
    loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {} 
    slaveSubscriptionConnectionMinimumIdleSize: 1 
    slaveSubscriptionConnectionPoolSize: 25 
    slaveConnectionMinimumIdleSize: 5 
    slaveConnectionPoolSize: 100 
    masterConnectionMinimumIdleSize: 5 
    masterConnectionPoolSize: 100 
    readMode: "SLAVE" 
    nodeAddresses: 
    - "//172.31.150.113:7000" 
    - "//172.31.150.113:7001" 
    - "//172.31.150.113:7002" 
    - "//172.31.150.113:7003" 
    - "//172.31.150.113:7004" 
    - "//172.31.150.113:7005" 
    scanInterval: 1000 
threads: 0 
codec: !<org.redisson.codec.JsonJacksonCodec> {} 
useLinuxNativeEpoll: false 
eventLoopGroup: null 

ich für das Objekt, dass die erforderlichen redisson Bibliotheken überprüft Kreationen sind auf dem Klassenpfad.
Hat jemand eine Idee, warum diese YAML-Datei nicht korrekt von Snakeyaml geladen werden kann?

+0

Ihre Konfiguration funktioniert gut mit mir, vielleicht können Sie Ihre Redisson-Version hinzufügen. –

Antwort

0

Wenn ich dieses Formular zum Laden als Javabean ohne vordefinierten Tag verwende, glaube ich, dass die Syntax zwei Ausrufezeichen und keine umgebenden Markierungen ist. das heißt

codec: !!org.redisson.codec.JsonJacksonCodec{} 

Wenn das Laden als Klasse mit Konstruktor und einem vorgegebenen Tag, dann anstelle von Klammern Klammern:

codec: !org.redisson.codec.JsonJacksonCodec[] 

Wenn das nicht hilft, auch erwägen Entsendung, welche Version von SnakeYAML Sie verwenden.

+0

Danke für die schnelle Antwort! Leider funktioniert es immer noch nicht. Ich benutze Snakeyaml 1.16. – Nel