Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/07/2013, 03:18
DoHITB
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
fallo comunicación JAVA - PHP

Buenas.

Llevo rato devanándome los sesos y no encuentro el error que me surge... vamos a ver:

Tengo una pequeña función PHP que codifica un stream de manera simétrica (es decir, luego le puedo aplicar el descifrado con la misma key y funciona).

Esta función puede (normalmente lo hace) devolver caracteres ASCII por encima de 127 (por tanto los trato como UTF-8).

Para ver un ejemplo rápido, aquí un poco de código:

Código PHP:
Ver original
  1. $GCall = new GL('myUser', 'myKey');//instancio la clase
  2.  
  3. $GCall->getToken();//operación intermedia, para obtener autenticación
  4.  
  5. file_put_contents($tempPath, $GCall->query($q));//el resultado de $GCall->query($q) es una cadena codificada, que a fin de cuentas es una consulta a una base de datos (el resultado codificado es un XML)
  6.  
  7. /*
  8. funcionamiento: $GCall->decrypt($url) recibe la URL del fichero codificado - en este caso el que está situado en $tempPath
  9. hace un file_get_contents($url), para obtener el contenido codificado
  10. lo decodifica y lo devuelve
  11. */
  12. file_put_contents($finalPath, $GCall->decrypt('http://miweb.com/temp.dat'));//colocamos en $finalPath el contenido decodificado
  13.  
  14. echo(file_get_contents($finalPath));

Esto me funciona perfectamente; testeado un sinfín de veces.

Dejo un extracto del texto codificado:

Código:
(Codificación ISO-8859-1)
@Bzvr5„mt|jsr@$:4E0(gwdshlppC7ƒ|h69&CA>Muxƒugwu$|pnwyR0pv}
Hasta aquí todo marcha como la seda...

El problema empieza ahora:

Desde JAVA, llamo al codificador, le paso una query, pero al decodificar no lo hace de la manera esperada.

Obviamente el proceso es algo distinto:

Código:
Cuando la llamada es desde JAVA, mi función PHP lo detecta (mediante un parámetro pasado) y el resultado intermedio lo guarda en un fichero con un nombre de conveniencia (es decir, tiene un formato específico).

Al llamar al decodificador, si es una llamada JAVA, obtengo el contenido del fichero anterior, lo decodifico, y lo guardo en un fichero final (también con un nombre de conveniencia).
Sin embargo, el fichero intermedio es diferente...

Código:
(Codificación ISO-8859-1)
@Bzvr5„mt|jsr@$:4E0(gwdshlppC7ƒ|h69&CA>Muxƒugwu$|pnwyR

(Codificación UTF-8)
@Bzvr5„mt|jsr@$:4E0(gwdshlppC7ƒ|h6
Y de ahí ya el XML resultante (como pensaréis) es ilegible...

Veo que el problema es de codificación en mi PHP; cuál es el problema es algo que ya escapa a mí... llevo tantas horas ofuscado con esto que ya no veo que hacer... quizás vosotros veis la solución en un par de minutos...

No se si hará falta algo más de info., en cualquier caso pedid y veré que puedo hacer.

Un saludo