Oracle - Trabajar en metodo con clase java en pl/sql

 
Vista:

Trabajar en metodo con clase java en pl/sql

Publicado por Nelson Quintanilla (2 intervenciones) el 05/09/2011 16:29:55
hola que tal

tengo un problema que ya llevo investigando 1 semana en google y en varias paginas como devjoker.com , pero sin encontrar del por que me sale el siguiente error, he creado RESOLVE JAVA SOURCE NAMED en pl/sql donde ingrese una clase con 3 metodos, pero necesito solo usar un metodo que se llama replace de ese metodo replace ingreso 2 tipos de datos un stringbuffer donde ingreso un tag de xml y datos dentro de ese tag y otro donde envio un valor int en duro un cero=0 ajja, la cosa que al invocarlo desde pl/sql me sale un error

ORA-00932: tipos de dato inconsistentes: se esperaba an IN argument at position 1 that is an instance of an Oracle type convertible to an instance of a user defined Java class se ha obtenido an Oracle type that could not be converted to a java class.

a continuacion el codigo java


CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "GeneraXML" as
import java.io.BufferedWriter;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.lang.StringBuffer;

public class GeneraXML
{
public static void main(String[] args)
throws Exception
{
try
{
if (args.length != 2)
{
System.out.println("Error en Parametros de Entrada\n");

return;
}
}
catch (Exception e)
{
System.out.println("Los Parametros Requeridos para la Ejecución son:\n>GeneraXML xmlentrada xmlsalida");
}

String xmlEntrada = args[0];
String xmlSalida = args[1];
FileInputStream file = new FileInputStream(xmlEntrada);
byte[] b = new byte[file.available()];
try
{
file.read(b); } catch (Exception e) {
System.out.println(String.valueOf(String.valueOf(" Archivo ").concat(String.valueOf(xmlEntrada))).concat(Stri ng.valueOf("NO Existe.........\n")));
}file.close();
StringBuffer buffer = new StringBuffer(new String(b));

replace(buffer, 1);
try {
PrintWriter escribir = new PrintWriter(new BufferedWriter(new FileWriter(xmlSalida)));
escribir.println(buffer);
escribir.close(); } catch (EOFException e) {
System.out.println("Archivo NO Generado...........\n");
}
}

public static void replace(StringBuffer xml,int index) throws Exception {
String itemi = "<Imagen>";
String itemf = "</Imagen>";


StringBuffer xml2 = new StringBuffer(xml);
int index1 = xml2.indexOf(itemi, index);
int index2 = xml2.indexOf(itemf, index1);
if ((index1 < 0) || (index2 < 0))
return ;
int start = index1 + itemi.length();
String path = xml.substring(start, index2);
System.out.println(String.valueOf("procesando a:").concat(String.valueOf(path)));
try
{
String img = readImagen(path);
xml.replace(start, index2, img);
replace(xml, start + img.length() + itemf.length()); } catch (Exception e) {
System.out.println(String.valueOf(String.valueOf(" Archivo de Foto").concat(String.valueOf(path))).concat(String .valueOf(" NO Existe.........\n")));
}

return ;
}
private static final String readImagen(String path) throws Exception {
FileInputStream imagen = new FileInputStream(path);
byte[] b = new byte[imagen.available()];
imagen.read(b);
String str = getString(b);

return URLEncoder.encode(str, "UTF-8");
}

public static String getString(byte[] _bytes) {
StringBuffer buffer = new StringBuffer(_bytes.length);
for (int i = 0; i < _bytes.length; ++i)
{
buffer.append((char)_bytes[i]);
}

return buffer.toString();
}
}
/


y el codigo de la funcion que invoca a la clase y el metodo.

CREATE OR REPLACE FUNCTION GenerarXML (Datoxml NVARCHAR2,intbuffer NUMBER)
RETURN VARCHAR2
AS
LANGUAGE JAVA
NAME 'GeneraXML.replace(java.lang.StringBuffer,int) return java.lang.String';

y los parametros son <imagen>imagen.jpg</imagen> y 0.

si alguien me pudiera ayudar se agradaceria, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder