Невозможно перерегистрировать пользовательские NodeTypes, если у него есть обязательное обновление (удаление) свойства типа узла в apache Jackrabbit 2.17.5 - PullRequest
0 голосов
/ 30 октября 2018

Начало: допустим, у меня есть несколько пользовательских типов узлов, как показано ниже.

    <test = 'http://abcd.com/test'>
    <nt='http://www.jcp.org/jcr/nt/1.0'>
    <mix='http://www.jcp.org/jcr/mix/1.0'>

    [test:base] > nt:base
    - name (string) mandatory version
    - data (long) mandatory version
    - category (string) version multiple
    - version (string) version

    [test:file] > nt:file
    - filename (string) mandatory

    [test:template] > test:base
    + * (test:file) version

After that I changed the above custom properties as :

    <test = 'http://abcd.com/test'>
    <nt='http://www.jcp.org/jcr/nt/1.0'>
    <mix='http://www.jcp.org/jcr/mix/1.0'>

    [test:base] > nt:base
    - name (string) mandatory version
    - category (string) version multiple
    - version (string) version

    [test:file] > nt:file
    - filename (string) mandatory

    [test:template] > test:base
    + * (test:file) version

Здесь я удалил свойство "data" и попытался заново зарегистрироваться, используя CndImporter.registerNodeTypes (...);

Теперь, когда я снова пытаюсь зарегистрировать типы узлов, я получаю сообщение об ошибке:

Caused by: javax.jcr.RepositoryException: The following node type change contains non-trivial changes.Up until now only trivial changes are supported. (see javadoc for org.apache.jackrabbit.spi.commons.nodetype.NodeTypeDefDiff):
org.apache.jackrabbit.spi.commons.nodetype.NodeTypeDefDiff[
    nodeTypeName={http://abcd.com/test}base,
    mixinFlagDiff=NONE,
    supertypesDiff=NONE,
    propertyDifferences=[
        org.apache.jackrabbit.spi.commons.nodetype.NodeTypeDefDiff$PropDefDiff[itemName={}version, type=TRIVIAL, operation=MODIFIED],
        org.apache.jackrabbit.spi.commons.nodetype.NodeTypeDefDiff$PropDefDiff[itemName={}data, type=MAJOR, operation=REMOVED],
        org.apache.jackrabbit.spi.commons.nodetype.NodeTypeDefDiff$PropDefDiff[itemName={}name, type=TRIVIAL, operation=MODIFIED],
        org.apache.jackrabbit.spi.commons.nodetype.NodeTypeDefDiff$PropDefDiff[itemName={}category, type=TRIVIAL, operation=MODIFIED]
    ],
    childNodeDifferences=[
    ]
]

    at org.apache.jackrabbit.core.nodetype.NodeTypeRegistry.checkForConflictingContent(NodeTypeRegistry.java:947)
    at org.apache.jackrabbit.core.nodetype.NodeTypeRegistry.reregisterNodeType(NodeTypeRegistry.java:435)
    at org.apache.jackrabbit.core.nodetype.NodeTypeRegistry.reregisterNodeType(NodeTypeRegistry.java:384)
    at org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl.registerNodeTypes(NodeTypeManagerImpl.java:596)
    at org.apache.jackrabbit.commons.cnd.CndImporter.registerNodeTypes(CndImporter.java:162)
    at org.apache.jackrabbit.commons.cnd.CndImporter.registerNodeTypes(CndImporter.java:110)

1 Ответ

0 голосов
/ 31 октября 2018

Да, это по замыслу. Удаление определения свойства может привести к тому, что содержимое вашего репо станет недействительным.

Что может сработать, так это изменение определения свойства на необязательное.

...