Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NoClassDefFoundError:org/omg/CORBA/COMM_创建简单spring boor rmi应用程序时客户端出现故障_Java_Spring_Spring Boot_Spring Remoting - Fatal编程技术网

java.lang.NoClassDefFoundError:org/omg/CORBA/COMM_创建简单spring boor rmi应用程序时客户端出现故障

java.lang.NoClassDefFoundError:org/omg/CORBA/COMM_创建简单spring boor rmi应用程序时客户端出现故障,java,spring,spring-boot,spring-remoting,Java,Spring,Spring Boot,Spring Remoting,我正在使用服务器上的RmiServiceExporter和客户端上的RmiProxyFactoryBean创建spring引导应用程序 [main] o.s.remoting.rmi.RmiServiceExporter: Binding service 'ServerServiceIF' to RMI registry: RegistryImpl[UnicastServerRef [liveRef: [endpoint:[localhost:1099](local),objID:[0:0:0,

我正在使用服务器上的RmiServiceExporter和客户端上的RmiProxyFactoryBean创建spring引导应用程序

[main] o.s.remoting.rmi.RmiServiceExporter: Binding service 'ServerServiceIF' to RMI registry: RegistryImpl[UnicastServerRef [liveRef: [endpoint:[localhost:1099](local),objID:[0:0:0, 0]]]]
然后我启动我的客户端,它也是spring boot应用程序,客户端上的服务接口连接到本地主机上的地址

rmi://localhost:1099/ServerServiceIF
但当我尝试调用这个接口的方法时,我得到了

Exception in thread "main" java.lang.NoClassDefFoundError: org/omg/CORBA/COMM_FAILURE
    at org.springframework.remoting.rmi.RmiClientInterceptorUtils.isCorbaConnectFailure(RmiClientInterceptorUtils.java:187)
    at org.springframework.remoting.rmi.RmiClientInterceptorUtils.isConnectFailure(RmiClientInterceptorUtils.java:174)
    at org.springframework.remoting.rmi.RmiClientInterceptor.isConnectFailure(RmiClientInterceptor.java:283)
    at org.springframework.remoting.rmi.RmiClientInterceptor.doInvoke(RmiClientInterceptor.java:349)
    at org.springframework.remoting.rmi.RmiClientInterceptor.invoke(RmiClientInterceptor.java:260)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
    at com.sun.proxy.$Proxy38.auth(Unknown Source)
    at com.cw.client.ClientApplication.main(ClientApplication.java:29)
Caused by: java.lang.ClassNotFoundException: org.omg.CORBA.COMM_FAILURE
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
    ... 9 more
以下是我的服务器和客户端:

ServerApplication.java

package com.cw.server;

import com.cw.appif.ServerServiceIF;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.remoting.rmi.RmiServiceExporter;

@SpringBootApplication 
public class ServerApplication {

@Bean
ServerServiceIF serverServiceIF() {
    return new ServerService();
}

@Bean
RmiServiceExporter exporter(ServerServiceIF implementation) {

    // Expose a service via RMI. Remote object URL is:
    // rmi://<HOST>:<PORT>/<SERVICE_NAME>
    // 1099 is the default port

    Class<ServerServiceIF> serviceInterface = ServerServiceIF.class;
    RmiServiceExporter exporter = new RmiServiceExporter();
    exporter.setServiceInterface(serviceInterface);
    exporter.setService(implementation);
    exporter.setServiceName(serviceInterface.getSimpleName());
    exporter.setRegistryPort(1099);
    return exporter;
}

public static void main(String[] args) {
    SpringApplication.run(ServerApplication.class, args);
}
package com.cw.client;

import com.cw.appif.ServerServiceIF;
import com.cw.exceptions.AuthException;
import com.cw.models.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.remoting.rmi.RmiProxyFactoryBean;

@SpringBootApplication
public class ClientApplication {

    private static User user;

    @Bean
    RmiProxyFactoryBean service() {
        RmiProxyFactoryBean rmiProxyFactory = new RmiProxyFactoryBean();
        rmiProxyFactory.setServiceUrl("rmi://localhost:1099/ServerServiceIF");
        rmiProxyFactory.setServiceInterface(ServerServiceIF.class);
        return rmiProxyFactory;
    }

    public static void main(String[] args) {
        try {
            ServerServiceIF service = SpringApplication.run(ClientApplication.class, args).
                    getBean(ServerServiceIF.class);
            user    = new User("Denis","1234","e@mail.co");
            service.auth(user);
            System.out.println("User authed");
        } catch (AuthException e) {
            e.printStackTrace();
        }
    }
 }
我的服务器服务接口和服务器上的实现:

package com.cw.appif;

import com.cw.exceptions.AuthException;
import com.cw.models.User;


public interface ServerServiceIF{

    boolean auth(User user) throws AuthException;

}

package com.cw.server;

import com.cw.appif.ServerServiceIF;
import com.cw.exceptions.AuthException;
import com.cw.models.User;

import java.util.List;

public class ServerService implements ServerServiceIF{

    static List<User> clients;

    @Override
    public boolean auth(User user) throws AuthException {
        clients.add(user);
        System.out.println("hi");
        return true;
    }
}
package com.cw.appif;
导入com.cw.exceptions.AuthException;
导入com.cw.models.User;
公共接口ServerServiceIF{
布尔身份验证(用户用户)抛出身份验证异常;
}
包com.cw.server;
导入com.cw.appif.ServerServiceIF;
导入com.cw.exceptions.AuthException;
导入com.cw.models.User;
导入java.util.List;
公共类ServerService实现ServerServiceIF{
静态列表客户端;
@凌驾
公共布尔身份验证(用户用户)引发身份验证异常{
clients.add(用户);
System.out.println(“hi”);
返回true;
}
}
我的想法如下:

1) 可能是因为我在客户端和服务器上使用的接口完全相同,但客户端找不到类,因为路径不同

2) 当我调试我的客户端服务->h->advised->targetSource->targetClass时为空。可以吗?我将在下面的调试中上传我的项目结构和这个变量的截图


找到了问题。在将corba添加到类路径之后,我发现类用户必须是可序列化的。添加
实现了Serializable
serialVersionUID
解决了这个问题,现在一切都正常了。

如果您使用的是Java 9,您必须将Corba类添加到类路径中。哦,我明白了。但据我所知,我不能使用corba异常。我将添加它并更新帖子