java python openerp xml-rpc

Python Tuple en Java XMLRPC



openerp xml-rpc (5)

Estoy tratando de pasar la tupla de Python sobre java xmlrpc. Aquí está la biblioteca de lo que estoy usando: XMLPRC Java Libray

Estoy usando odoo framework en servidor y api . Quiero pasar un argumento que se verá así:

[(4,7), (4,8)]

Soy capaz de pasar la siguiente estructura:

[[4,7], [4,8]]

que está claramente dentro de una matriz como:

new Object[]{new Object[]{4,7},new Object[]{4,8}}

El problema es que no hay tupla en java. Lo que absorbo es cómo transformar esta estructura:

Esto [4,8] a Esto (4,8)

Es un tipo de problema de serialización que no sabe cómo resolverlo y pasar la estructura de Python esperada.


¿Hay algún problema con [[4,7],[4,8]] ? La mayoría de las operaciones de python no se diferencian de las tuplas de las listas reales. Y en Odoo aún menos. Creo que esta es la forma correcta de enviar una lista de tuplas a través de idiomas que no implementan tuplas. Tuple no es una cosa clave, de valor. Puedes tener (a, b, c) que es una tupla. Eso es algo similar a [a, b, c] . Puedes iterar en ambos. Puede obtener su valor a través de índices (si ambos estuvieran almacenados en una variable de element , obtener a de ellos sería el element[0] para ambos).

Entonces, si tiene un problema, no creo que se trate de tuplas y no contestó el comentario preguntando si hay un error en la llamada XMLRPC. Mi conjetura es que no hay error. Y si hay un error, estoy seguro de que no se trata de tuplas.


¿Intentaste usar la clase Apache commons Pair? Docs .

Acabo de hacer una prueba rápida y esto parece lo que quieres.

System.out.println(new ImmutablePair<>(1,3).toString()); (1,3)

El serializador predeterminado debe generar el par [] en el formato [(1,2), ...] que espera.


Después de buscar mucho tiempo, tengo solución. Así que decidí responder con claridad. Mi respuesta es más probable que odoo lado. Hasta ahora no encontré la manera de serializar esa estructura. Pero el marco odo aceptó la tupla de la siguiente manera:

[ [ 4, [7,8] ]

o

Arrays.asList(Arrays.asList(4, Arrays.asList(7,8)));

esto es equivalente a:

[(4,3),(4,7)]

Esperando que esto ayude a alguien.


Una idea simple es enviarlo como cadena. Al igual que en Java:

String a="[[4,7],[4,8]]";

En Python, simplemente puedes usar el método eval () para obtenerlo como una matriz de arrays. Si lo quieres como una matriz de tuplas, usa:

String a="[(4,7),(4,8)]";

Solo usa la sintaxis de python como una cadena. En python, puedes usar:

my_list=eval(a) print my_list[0]

Dará:

(4,7)

como salida para el último ejemplo.


XML-RPC es limitado. Por lo tanto, solo hay un tipo para la lista y la tupla. Si miras docs for odoo, verás que tanto las tuplas como las listas en los ejemplos de Python se transforman en Arrays.asList en Java. Entonces, si obtienes algunos errores, es muy probable que algo más esté mal.