使用JCR_GET_BY_ID时JCR多值属性的问题

时间:2014-09-26 04:15:46

标签: java apache-camel jackrabbit jcr

我将Apache Camle version 2.14.0Apache Jackrabbit 2.8.0一起使用,当节点包含camel-jcr作为JCR_GET_BY_ID multi-valued property时发现2014-09-26 10:19:21.604 [Client Event Poller] [] ERROR o.a.c.processor.DefaultErrorHandler - 215 log Failed delivery for ( MessageId: ID-CharleeCh-53350-1411701537295-3-1 on ExchangeId: ID-CharleeCh-53350-1411701537295-3-12). Exhausted after delivery attempt: 1 caught: javax.jcr.ValueFormatException: property /my-parent3/my-child31/myMuliple is a multi-valued property, so it's values can only be retrieved as an array Stacktrace javax.jcr.ValueFormatException: property /my-parent3/my-child31/myMuliple is a multi-valued property, so it's values can only be retrieved as an array at org.apache.jackrabbit.rmi.server.ServerObject.getRepositoryException(ServerObject.java:139) ~[jackrabbit-jcr-rmi-2.8.0.jar:na] at org.apache.jackrabbit.rmi.server.ServerProperty.getValue(ServerProperty.java:62) ~[jackrabbit-jcr-rmi-2.8.0.jar:na] at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_65] at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_65] at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322) ~[na:1.7.0_65] at sun.rmi.transport.Transport$1.run(Transport.java:177) ~[na:1.7.0_65] at sun.rmi.transport.Transport$1.run(Transport.java:174) ~[na:1.7.0_65] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_65] at sun.rmi.transport.Transport.serviceCall(Transport.java:173) ~[na:1.7.0_65] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556) ~[na:1.7.0_65] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811) ~[na:1.7.0_65] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670) ~[na:1.7.0_65] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) ~[na:1.7.0_65] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ~[na:1.7.0_65] at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_65] at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:275) ~[na:1.7.0_65] at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:252) ~[na:1.7.0_65] at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161) ~[na:1.7.0_65] at org.apache.jackrabbit.rmi.server.ServerProperty_Stub.getValue(Unknown Source) ~[jackrabbit-jcr-rmi-2.8.0.jar:na] at org.apache.jackrabbit.rmi.client.ClientProperty.getValue(ClientProperty.java:164) ~[jackrabbit-jcr-rmi-2.8.0.jar:na] at org.apache.camel.component.jcr.JcrProducer.process(JcrProducer.java:69) ~[camel-jcr-2.14.0.jar:2.14.0] 有问题以下: -

camel-jcr

我还有机会调查 if (JcrConstants.JCR_INSERT.equals(operation)) { ... for (String key : headers.keySet()) { Value value = converter.convertTo(Value.class, exchange, message.getHeader(key)); ... } ... } else if (JcrConstants.JCR_GET_BY_ID.equals(operation)) { ... while (properties.hasNext()) { Property property = properties.nextProperty(); Class<?> aClass = classForJCRType(property); Object value = converter.convertTo(aClass, exchange, property.getValue()); ... } } else { throw new RuntimeException("Unsupported operation: " + operation); } 源代码org.apache.camel.component.jcr.JcrProducer,并发现它使用以下内容: -

Value.class

如果我错了,请纠正我。由于代码使用的property.getValue()non-multi-valued适用于camel-jcr。这是否意味着multi-valued不支持JcrProducer

我们是否有任何支持多值的解决方法?目前我考虑用我自己的临时修复替换{{1}}。无论如何,我认为这可能不是一个正确的方式,并希望你的帮助进一步建议

1 个答案:

答案 0 :(得分:0)

我已发布到Camel User Group,发现它是当前camel-jcr:2.14.0的限制。我已修复为pull request

我希望这可以帮助其他面临同样问题的人。