cancel
Showing results for 
Search instead for 
Did you mean: 

An operation AddEntryToMultivaluedProperty generates an error

adam_bo_
Star Contributor
Star Contributor

The operation AddEntryToMultivaluedProperty generates the error in the method "run". There is a problem in the line:

List<Serializable> array = p.getValue() != null ? Arrays.asList((Serializable[]) p.getValue()) : null;

It returns an exception:

Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to [Ljava.io.Serializable;

In general, the problem is casting ArrayList returned by p.getValue() to Serializable[].

Schema:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.nuxeo.org/ecm/schemas/mytest"
xmlns:nxs="http://www.nuxeo.org/ecm/schemas/mytest">
<xs:include schemaLocation="base.xsd" />
<xs:element name="industries" type="nxs:stringList"/>
</xs:schema>

Document definition:

<?xml version="1.0" encoding="UTF-8"?>
<component name="org.nuxeo.mytest.default.types">
<require>org.nuxeo.ecm.core.schema.TypeService</require>
<require>org.nuxeo.ecm.core.CoreExtensions</require>
<require>org.nuxeo.ecm.platform.search.CoreExtensions</require>
<require>org.nuxeo.ecm.platform.search.default.types</require>
<require>org.nuxeo.ecm.platform.types.TypeService</require>
<extension target="org.nuxeo.ecm.core.schema.TypeService" point="schema">
<schema name="myschema" prefix="myschema" src="schemas/myschema.xsd" />
</extension>
<extension target="org.nuxeo.ecm.core.schema.TypeService" point="doctype">
<doctype name="MyDocument" extends="Document">
<schema name="common" />
<schema name="dublincore"/>
<schema name="uid"/>
<schema name="myschema" />
</doctype>
</extension>
<extension target="org.nuxeo.ecm.core.lifecycle.LifeCycleService" point="types">
<types>
<type name="MyDocument">default</type>
</types>
</extension>
<extension target="org.nuxeo.ecm.platform.types.TypeService" point="types">
<type id="MyDocument">
<label>MyDocument</label>
<icon>/icons/file.gif</icon>
<bigIcon>/icons/file_100.png</bigIcon>
<category>SimpleDocument</category>
<default-view>view_documents</default-view>
<layouts mode="any">
<layout>heading</layout>
</layouts>
<layouts mode="edit">
<layout>heading</layout>
</layouts>
<layouts mode="view">
<layout>heading</layout>
</layouts>
</type>
<type id="Folder">
<subtypes>
<type>MyDocument</type>
</subtypes>
</type>
</extension>
</component>

PHP code:

$doc["industries"] = "electrical";
$result = $session->newRequest("AddEntryToMultivaluedProperty")
->set('input', 'doc:'.$mydoc->getPath())
->set('params', 'xpath', 'myschema:industries')
->set('params', 'value', $doc["industries"])
->sendRequest();
6 REPLIES 6

Florent_Guillau
World-Class Innovator
World-Class Innovator

p.getValue() should always return an array when p is a multi-value property. What is your property exactly?

adam_bo_
Star Contributor
Star Contributor

It is nxs

Florent_Guillau
World-Class Innovator
World-Class Innovator

It works in my tests. Nuxeo normalizes simples lists to arrays very early. The following test, modified from TestSQLRepositoryProperties, succeeds:

@Test
public void testStringArray() throws Exception {
    String[] values = { "foo", "bar" };
    doc.setPropertyValue("tp:stringArray", values);
    // doc.setPropertyValue("tp:stringArray", (Serializable) Arrays.asList(values)); // works too
    assertTrue(Arrays.equals(values, (Object[]) doc.getPropertyValue("tp:stringArray")));
    doc = session.saveDocument(doc);
    assertTrue(Arrays.equals(values, (Object[]) doc.getPropertyValue("tp:stringArray")));
}

Where tp:stringArray is defined as:

<xs:element name="stringArray" type="nxs:stringArrayType" />
<xs:simpleType name="stringArrayType">
  <xs:list itemType="xs:string" />
</xs:simpleType>

Yes, it works, but it is not the same case. Could you try call the operation ? You can also try execute the equivalent code

I understand that you're saying that p.getValue() returns an ArrayList but what I'm saying is that should not be the case and it does not happen in unit tests. Please provide a reproduction case so that we can understand what is happening.

I checked it in debugger that it crashes in the line i wroted. The same means the error description, but as you wish I provide the code.

Getting started

Attention: Blogs & Forums are in READ-ONLY mode from Oct 9-19 as we transition to our new platform. Learn more.

Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.