Получить и назначить jcr: mixinTypes многозначное свойство в магнолии - PullRequest
2 голосов
/ 30 января 2020

Я получаю сообщение об ошибке, когда пытаюсь получить многозначное свойство в магнолии, так как я присваиваю его типу String. Как правильно прочитать однозначное и многозначное свойство (поскольку оба присутствуют)?

javax.jcr.ValueFormatException: свойство / wcmstest / de / search / jcr: mixinTypes является многозначным свойство, поэтому его значения можно получить только в виде массива в org. apache .jackrabbit.core.PropertyImpl.internalGetValue (PropertyImpl. java: 483) в org. apache .jackrabbit.core.PropertyImpl.getValue ( PropertyImpl. java: 510) в орг. apache .jackrabbit.core.PropertyImpl.getString (PropertyImpl. java: 520) по адресу info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString (DelegatePropertyWrapper. java: 162) в info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString (DelegatePropertyWrapper. java: 162) в info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString (DelegatePropertyWrapper. java: 162) в info.olia. .wrapper.DelegatePropertyWrapper.getString (DelegatePropertyWrapper. java: 162) в info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString (DelegatePropertyWrapper. java: 162) в ch.uz h.module.versioning.CreateNestedMap.nestedMap (CreateNestedMap. java: 32) в ch.uzh.module.versioning.ContextLoggerCommand.execute (ContextLoggerCommand. java: 78) в info.magnolia.commands.MgnlCommandized.exte ( MgnlCommand. java: 80) на info.magnolia.commands.MgnlCommand.execute (MgnlCommand. java: 69) на info.magnolia.commands.chain.ChainBase.execute (ChainBase. java: 101) на info .magnolia.commands.DelegateCommand.execute (DelegateCommand. java: 66):

Это код, который я использую:

 HashMap<String, Object> map = new LinkedHashMap<>();
 PropertyIterator pi;
 try {
    pi = node.getProperties();
    //Get properties for the root node
    while(pi.hasNext())
    {
        Property p = pi.nextProperty();
        String name = p.getName();
        String val = p.getString();

        map.put(name,val);

    }//end of while for properties of root node
 } catch (RepositoryException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
 }

1 Ответ

0 голосов
/ 31 января 2020

Спасибо @reporter и некоторым методам проб и ошибок. Вот это working solution.

           HashMap<String, Object> map = new LinkedHashMap<>();

           PropertyIterator pi;
            try {
                pi = node.getProperties();
                //Get properties for the root node
                while(pi.hasNext())
                    {
                       Property p = pi.nextProperty();
                       String name = p.getName();
                       String val;
                       //determine if property is multi-value
                       if (p.isMultiple()) {
                            //multi-value property           
                            val=p.getValues().toString();

                        } else {
                            //single-value property
                            val = p.getValue().getString();

                        }
                        map.put(name,val);

                    }//end of while for properties of root node
            } catch (RepositoryException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
...