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

时间:2011-10-06 15:05:50

标签: java jsp jsf jsp-tags

我在jsp文件中使用jsf创建了一个注册表单,我尝试将其与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>

我的Bean类“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";
    }
}

和config 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>

2 个答案:

答案 0 :(得分:20)

  

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

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

当包名称提示时,该类是Apache Commons Discovery的一部分,可在http://commons.apache.org/discovery下载。如果您只是将其JAR文件放在webapp的/WEB-INF/lib中(由webapp的运行时类路径覆盖),那么此错误应该会消失。

请注意,此问题与没有有关,更不用说Java EE了。它只是基本的Java。异常的根本原因也暗示;这是java.lang包。

答案 1 :(得分:15)

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

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

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