gpt4 book ai didi

java - 我的 RMI 服务器中的对象为空

转载 作者:行者123 更新时间:2023-12-01 12:58:39 25 4
gpt4 key购买 nike

我在 RMI 上发送对象,但是我发现一个空值。

Client.java:

service.InterfaceMathML stub = (service.InterfaceMathML) Naming.lookup("rmi://localhost:1099/BK");

System.out.println("id : " +this.MTI_creerFichier.getId()); // Show 10


int ValRetour = stub.Create(this.MTI_creerFichier, this.MTI_creerFichier.getId(), "CreateFichier");

我的界面:

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface InterfaceMathML extends Remote{
public int Create(Object unObject,String user, String unType)throws RemoteException;
}

我的服务器:

public int Create(Object unObject, String user, String unType) throws RemoteException {
// TODO Auto-generated method stub

switch(unType)
{
case "CreateFichier" :
System.out.println("Create Fichier");
System.out.println((CreateFichier)unObject.getId()); // show Null
ystem.out.println(user); // show userTest
FichierImpl = new JDBCDAO_Fichier();
this.validation = FichierImpl.Validation_ADD((CreateFichier)unObject, user);
if ( this.validation == 1) { this.entier = FichierImpl.add((CreateFichier)unObject, user); }
else { this.entier = this.validation; }
break;

那么为什么我的对象在服务器上不能为空?

请帮忙。

编辑在我的 MAINTestServer.java 中(在我的服务器 RMI 上)

 od = new MathMLServiceImpl() CreateFichier fi  = new  CreateFichier();
fi.setLogin("test"); fi.setDossierParent("dossierparenttest");
fi.setNomFichier("nomfichiertest");
fi.setContenuFichier("essaie");

int val = od.Create(fi, "test", "CreateFichier"); System.out.println(val);

上类了

我的 RMI 服务器

public static void main(String[] args) {
// TODO Auto-generated method stub
String url = "rmi://localhost:1099/BK";

try {
LocateRegistry.createRegistry(1099);
MathMLServiceImpl od = new MathMLServiceImpl();

// je met a dispo un objet dans un url
Naming.rebind("rmi://localhost:1099/BK", od);
System.out.println("Service pret");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

我的客户端RMI:我使用多态性来启动类来检测我的类:

Class<?> actionClass = Class.forName("metierToInte." + nomDto + "Action");
System.out.println(actionClass);


Constructor<?> actionConstructe = actionClass.getConstructor(dto.getClass()); //dto.getClass()
System.out.println("constructeur : " + actionConstructe.toString());
ActionInteToMetier uneActione = (ActionInteToMetier) actionConstructe.newInstance(dto);


System.out.println("action : " + uneActione.toString());
//System.out.println("action : " + uneActione.toString());
uneActione.executer();

这是工作,例如我的类“CreateFichierAction”,我可以发送字符串,这是工作,但不是我的对象

this.MTI_creerFichier =  creerFichier;
service.InterfaceMathML stub = (service.InterfaceMathML) Naming.lookup("rmi://localhost:1099/BK");

System.out.println("id : " +this.MTI_creerFichier.getId()); // Show 10
int ValRetour = stub.Create(this.MTI_creerFichier, this.MTI_creerFichier.getLogin(), "CreateFichier");
System.out.println("valeur retour rmi " + ValRetour);

来源:CreerFichier

package dto.metierToInte;

import java.io.Serializable;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "CreateFichier")
public class CreateFichier
extends Fichier
implements Serializable
{

private static final long serialVersionUID = 1L;
@XmlAttribute(name = "id")
protected int id;

public String getId() {
return id;
}
}

这可以工作,但是,如果我的 RMI 客户端不行

最佳答案

你的对象不为空,只是你从中获取的 id 为空

System.out.println((CreateFichier)unObject.getId());

如果 unObject 为 null,那么您一定遇到了 NullPointerException。所以检查 getId() 部分。

关于java - 我的 RMI 服务器中的对象为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23681373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com