You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@brooklyn.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2016/06/22 15:48:58 UTC

[jira] [Commented] (BROOKLYN-305) Rebind fails when entity attribute contains special unicode character ""

    [ https://issues.apache.org/jira/browse/BROOKLYN-305?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15344563#comment-15344563 ] 

ASF GitHub Bot commented on BROOKLYN-305:
-----------------------------------------

GitHub user aledsage opened a pull request:

    https://github.com/apache/brooklyn-server/pull/214

    BROOKLYN-305: handle invalid xml chars in attribute vals

    I'm not convinced by this approach (calling a special method `XmlUtil.xpathHandlingIllegalChars()`, which retries the xpath having escaped the illegal characters). It works well enough for us because we are just making very basic use of xpath - it is primarily to just extact the entity id from the xml file, before we try to fully deserialize it.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/aledsage/brooklyn-server fix/xml-deserialize-illegal-chars

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/brooklyn-server/pull/214.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #214
    
----
commit e15697f42eb103fb393ab391f53bcd1d7ebd4d38
Author: Aled Sage <al...@gmail.com>
Date:   2016-06-22T12:24:01Z

    Improve/test performance of XmlUtil.xpath

commit 7981326612d20a0d6bd9b7d972620f5e2e0b4fc3
Author: Aled Sage <al...@gmail.com>
Date:   2016-06-22T12:24:30Z

    Adds XmlSerializerTest

commit 17d496a9d73f2079349ba01cc8f296fa303efc40
Author: Aled Sage <al...@gmail.com>
Date:   2016-06-22T14:09:02Z

    BROOKLYN-305: Handle invalid xml chars in attribute vals

----


> Rebind fails when entity attribute contains special unicode character "&#x1b;"
> ------------------------------------------------------------------------------
>
>                 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 {{&#x1b;}} and written to the xml file).
> On restarting Brooklyn, it failed to restart. This is because {{&#x1b;}} 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/&#x1b;/X/g' {} \;
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)