[
https://issues.apache.org/jira/browse/BROOKLYN-305?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15346170#comment-15346170
]
Aled Sage commented on BROOKLYN-305:
------------------------------------
[~svet] your suggestion of using XML version 1.1 works! It can parse these
characters (but not {{�}}).
Given we have not included the xml version in our existing persisted state, I
think we still want the fix I've done. But if we change our persister to write
out that xml header, then we'll avoid the need for going down that code path in
the future.
> Rebind fails when entity attribute contains special unicode character ""
> ------------------------------------------------------------------------------
>
> Key: BROOKLYN-305
> URL: https://issues.apache.org/jira/browse/BROOKLYN-305
> Project: Brooklyn
> Issue Type: Bug
> Affects Versions: 0.9.0
> Reporter: Aled Sage
>
> I had an entity with a sensor value that contained unicode character 27 (in
> the persisted state, this was converted to by xstream to {{}} and
> written to the xml file).
> On restarting Brooklyn, it failed to restart. This is because {{}} is
> an illegal character in xml. The xstream deserialization works fine, but our
> code first uses xpath to extract the entity id from the raw xml. That fails
> with the exception below:
> {noformat}
> 2016-06-22 09:17:09,555 ERROR o.a.b.l.common.BasicLauncher [main]: Subsystem
> for persistence had startup error (continuing with startup):
> org.apache.brooklyn.util.exceptions.PropagatedRuntimeException: Failure
> rebinding; 3 errors including: problem loading memento: memento X2C3QT87
> loading raw error: SAXParseException: Character reference "&#
> org.apache.brooklyn.util.exceptions.PropagatedRuntimeException:
> at
> org.apache.brooklyn.util.exceptions.Exceptions.propagate(Exceptions.java:128)
> ~[brooklyn-utils-common-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.rebind(RebindManagerImpl.java:507)
> ~[brooklyn-clocker-patches-1.2.0-20160609.1043.jar:1.2.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.ha.HighAvailabilityManagerImpl.promoteToMaster(HighAvailabilityManagerImpl.java:836)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.ha.HighAvailabilityManagerImpl.checkMaster(HighAvailabilityManagerImpl.java:810)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.ha.HighAvailabilityManagerImpl.publishAndCheck(HighAvailabilityManagerImpl.java:592)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.ha.HighAvailabilityManagerImpl.changeMode(HighAvailabilityManagerImpl.java:315)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.ha.HighAvailabilityManagerImpl.start(HighAvailabilityManagerImpl.java:255)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.launcher.common.BasicLauncher.startPersistence(BasicLauncher.java:644)
> [brooklyn-launcher-common-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.launcher.common.BasicLauncher.handlePersistence(BasicLauncher.java:506)
> [brooklyn-launcher-common-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.launcher.common.BasicLauncher.start(BasicLauncher.java:424)
> [brooklyn-launcher-common-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at org.apache.brooklyn.cli.Main$LaunchCommand.call(Main.java:461)
> [brooklyn-cli-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at org.apache.brooklyn.cli.Main$LaunchCommand.call(Main.java:196)
> [brooklyn-cli-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.cli.AbstractMain.execCli(AbstractMain.java:252)
> [brooklyn-cli-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.cli.AbstractMain.execCli(AbstractMain.java:244)
> [brooklyn-cli-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at io.cloudsoft.amp.Main.main(Main.java:39)
> [amp-launcher-3.2.1.jar:na]
> Caused by: java.util.concurrent.ExecutionException:
> org.apache.brooklyn.util.exceptions.CompoundRuntimeException: Failure
> rebinding; 3 errors including: problem loading memento: memento X2C3QT87
> loading raw error: SAXParseException: Character reference "&#
> at java.util.concurrent.FutureTask.report(FutureTask.java:122)
> ~[na:1.8.0_91]
> at java.util.concurrent.FutureTask.get(FutureTask.java:192)
> ~[na:1.8.0_91]
> at
> com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:63)
> ~[guava-16.0.1.jar:na]
> at
> org.apache.brooklyn.util.core.task.BasicTask.get(BasicTask.java:361)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.rebind(RebindManagerImpl.java:505)
> ~[brooklyn-clocker-patches-1.2.0-20160609.1043.jar:1.2.0-20160609.1043]
> ... 13 common frames omitted
> org.apache.brooklyn.util.exceptions.CompoundRuntimeException: Failure
> rebinding; 3 errors including: problem loading memento: memento X2C3QT87
> loading raw error: SAXParseException: Character reference "&#
> at
> org.apache.brooklyn.util.exceptions.Exceptions.create(Exceptions.java:393)
> ~[brooklyn-utils-common-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl.onDoneImpl(RebindExceptionHandlerImpl.java:497)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:1.2.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl.onDone(RebindExceptionHandlerImpl.java:413)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:1.2.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration.run(RebindIteration.java:267)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:1.2.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.rebindImpl(RebindManagerImpl.java:552)
> ~[brooklyn-clocker-patches-1.2.0-20160609.1043.jar:1.2.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl$3.call(RebindManagerImpl.java:502)
> ~[brooklyn-clocker-patches-1.2.0-20160609.1043.jar:1.2.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl$3.call(RebindManagerImpl.java:500)
> ~[brooklyn-clocker-patches-1.2.0-20160609.1043.jar:1.2.0-20160609.1043]
> at
> org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:519)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> ~[na:1.8.0_91]
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> ~[na:1.8.0_91]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> ~[na:1.8.0_91]
> at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_91]
> Caused by: java.lang.IllegalStateException: problem loading memento: memento
> X2C3QT87 loading raw error
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl.onLoadMementoFailed(RebindExceptionHandlerImpl.java:178)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:1.2.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.persist.BrooklynMementoPersisterToObjectStore$1VisitorWrapper.run(BrooklynMementoPersisterToObjectStore.java:455)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> ~[na:1.8.0_91]
> ... 4 common frames omitted
> Caused by: org.apache.brooklyn.util.exceptions.PropagatedRuntimeException:
> at
> org.apache.brooklyn.util.exceptions.Exceptions.propagate(Exceptions.java:128)
> ~[brooklyn-utils-common-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.util.core.xstream.XmlUtil.xpath(XmlUtil.java:51)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.persist.BrooklynMementoPersisterToObjectStore$2.visit(BrooklynMementoPersisterToObjectStore.java:297)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> at
> org.apache.brooklyn.core.mgmt.persist.BrooklynMementoPersisterToObjectStore$1VisitorWrapper.run(BrooklynMementoPersisterToObjectStore.java:452)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> ... 5 common frames omitted
> Caused by: org.xml.sax.SAXParseException: Character reference "&#
> at
> com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
> ~[na:1.8.0_91]
> at
> com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
> ~[na:1.8.0_91]
> at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
> ~[na:1.8.0_91]
> at
> org.apache.brooklyn.util.core.xstream.XmlUtil.xpath(XmlUtil.java:42)
> ~[brooklyn-core-0.10.0-20160609.1043.jar:0.10.0-20160609.1043]
> ... 7 common frames omitted
> {noformat}
> The workaround is to replace this character in the persisted state (after
> first backing it up, obviously!):
> {noformat}
> tar czf persisted-state.tgz persisted-state/
> cd persisted-state/
> find . -type f -exec sed -i.bak 's//X/g' {} \;
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)