java.lang.NoClassDefFoundError: org / apache / commons / discovery / tools / DiscoverSingleton - PullRequest
17 голосов
/ 06 октября 2011

Я создал регистрационную форму в jsp файле с jsf, и я пытаюсь соединить ее с веб-сервисом, чтобы передать эти элементы в базу данных.

Когда я нажимаю кнопку отправки, я получаю сообщение об ошибке. Я не думаю, что проблема касается кода подключения, но я не уверен.

Кто-нибудь может сказать мне кое-что, что может мне чем-то помочь?

ошибка:

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>

мой класс Бобов "формавар":

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>

Ответы [ 2 ]

21 голосов
/ 06 октября 2011

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

Это просто означает, что упомянутый класс (или JAR-файл, содержащий класс) отсутствует в пути к классам во время выполнения веб-приложения.

Как видно из названия пакета, класс является частью Apache Commons Discovery, доступной для загрузки по адресу http://commons.apache.org/discovery. Если вы просто перетащите свои JAR-файлы в /WEB-INF/lib вашего веб-приложения (которое рассматривается по пути к классам веб-приложения), эта ошибка должна исчезнуть.

Обратите внимание, что эта проблема не имеет ничего общего с JSF / JSP , не говоря уже о Java EE. Это просто базовая Java. Коренная причина исключения также намекает на это; это из пакета java.lang.

15 голосов
/ 13 марта 2014

Указанные классы отсутствуют в пути к классам проекта во время выполнения теста.

Решение состоит в том, чтобы добавить следующую зависимость к вашему pom:

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