java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton

2022-09-02 09:12:36

我已经使用jsf在jsp文件中创建了一个注册表,并尝试将其与Web服务连接,以便将元素传递到数据库。

当我按下提交按钮时,我收到一个错误。我不认为问题与连接代码有关,但我不确定。

谁能告诉我一些可能以某种方式帮助我的事情?

错误:

javax.servlet.ServletException: #{formabean.submitdetails}: java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
     org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

我的表单 jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>Form</title>
        </head>
        <body>
            <div align="right" >
                <p>
                    <br>.............
<h:commandButton value="submit" type="submit" 
                                 action="#{formabean.submitdetails}" />


            </h:form>

        </body>
    </html>
</f:view>

我的豆类“formavar”:

package org.forma;

import org.imigrant.Migration.MigrationResult;
import org.imigrant.Migration.MigrationWS_PortType;
import org.imigrant.Migration.MigrationWS_Service;
import org.imigrant.Migration.MigrationWS_ServiceLocator;

/** libraries for Web Service*/
/**
 *
 * @author USER
 */
public class formavar {

    private String name;
    private String lastname;.....
 public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the surname
     */
    public String getLastname() {
        return lastname;
    }

    /**
     * @param surname the surname to set
     */
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }......
 public String submitdetails() {
        String migrationURL = "http://localhost:8080/mule-tomcat/ESB/Migration?wsdl";
        MigrationResult registrationResult = new MigrationResult();

        try {

            MigrationWS_Service service = new MigrationWS_ServiceLocator(migrationURL);
            MigrationWS_PortType port = service.getMigrationImplPort();

            registrationResult = port.registerDoc(
                null,
                this.granting,
                this.expire_date,
        this.name,
        this.lastname,.............

                    );


            return "OK";

        } catch (Exception ex) {


            return "ERROR "+ex.getMessage();
        }


        //return "OK";
    }
}

和配置 xml:

 <managed-bean>
        <managed-bean-name>formabean</managed-bean-name>
        <managed-bean-class>org.forma.formavar</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

答案 1

java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton

这只是意味着 Web 应用的运行时类路径中缺少提到的类(或包含该类的 JAR 文件)。

正如软件包名称所暗示的那样,该类是Apache Commons Discovery的一部分,可在 http://commons.apache.org/discovery 下载。如果只是将其 JAR 文件拖放到 web 应用(web 应用的运行时类路径所覆盖)中,则此错误应该会消失。/WEB-INF/lib

请注意,这个问题与 JSF/JSP 无关,更不用说 Java EE 了。它只是基本的Java。异常的根本原因也暗示了这一点;它是包装的。java.lang


答案 2

在执行测试时,项目类路径中缺少指定的类。

解决方案是将以下依赖项添加到 pom 中:

<dependency>
    <groupId>commons-discovery</groupId>
    <artifactId>commons-discovery</artifactId>
    <version>0.5</version>
    <scope>test</scope> 
</dependency>