lunes, 11 de mayo de 2015

Solventar error CORBA MARSHAL 1330446343

Error CORBA MARSHAL 1330446343 generado al realizar una llamara RMI a una interfas remota que retorna un objeto personalizado.

Causa: Las versiones del objeto retornado en el cliente o en el servidor son diferentes

Solución: Realizar una limpieza del proyecto, comprobar que los dos proyecto tanto el servidor como el cliente tienen como dependencia el proyecto que contiene las interfaces remotas y el DTO que se desea intercambiar.

Implementación en codigo:

Servidor:

PersonaServiceImpl: Debe de implementar la interfas remota  MensajeServiceRemote del proyecto de dependencias.

public class PersonaServiceImpl implements MensajeServiceRemote, Serializable{

private static final long serialVersionUID = 7143324113539318787L;
public OrdenCompra enviarMensaje(OrdenCompra orden) {
orden.setId(orden.getId()+1);
orden.setNombreSocio(orden.getNombreSocio()+" procesado");
orden.setNumeroOrden(orden.getNumeroOrden()+" procesado");
return orden;
}
}


_________________________________________________________________________________

Proyecto dependencia Interfaces y DTOs:
Debe contener la interfas remota y el DTO que se va a intercambiar entre el cliente y servidor

Interfas:

@Remote
public interface MensajeServiceRemote {
OrdenCompra enviarMensaje(OrdenCompra orden);
}

DTO:

public class OrdenCompra implements Serializable {

private static final long serialVersionUID = -7986978429487671468L;

private Long id;
private String numeroOrden;
private String nombreSocio;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNumeroOrden() {
return numeroOrden;
}
public void setNumeroOrden(String numeroOrden) {
this.numeroOrden = numeroOrden;
}
public String getNombreSocio() {
return nombreSocio;
}
public void setNombreSocio(String nombreSocio) {
this.nombreSocio = nombreSocio;
}

}

___________________________________________________________________________

Proyecto Cliente RMI

Clase de prueba:

public class ClientePersonaService {
public static void main(String[] args) {
System.out.println("Se esta llamando a la clase pertienente");
System.out.println("Iniciando llamada al EJB desde el cliente\n");
Context jndi = null;
try {
jndi = new InitialContext();
MensajeServiceRemote mensajeService = (MensajeServiceRemote) jndi.lookup("java:global/proyectoweb/PersonaServiceImpl!co.com.sp.interfaces.MensajeServiceRemote");
OrdenCompra orden = new OrdenCompra();
orden.setId((long)1);
orden.setNombreSocio("Servio Pantoja");
orden.setNumeroOrden("11111");
orden = mensajeService.enviarMensaje(orden);
System.out.println(orden.getId()+" "+orden.getNombreSocio()+" "+orden.getNumeroOrden()+" "+" Procesado cliente");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Tener en cuenta que el jndi.lookup("java:global/proyectoweb/PersonaServiceImpl!co.com.sp.interfaces.MensajeServiceRemote");
Debe ser el Jndi de la interfas que se quiere invocar como servicio.


No hay comentarios:

Publicar un comentario