私は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>
私の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";
}
}
および構成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>
Java.lang.NoClassDefFoundError:org/Apache/commons/discovery/tools/DiscoverSingleton
これは、言及されたクラス(またはそのクラスを含むJARファイル)がwebappの実行時クラスパスにないことを意味します。
パッケージ名が示すように、このクラスは http://commons.Apache.org/discovery からダウンロードできるApache Commons Discoveryの一部です。 JARファイルをWebアプリケーションの/WEB-INF/lib
(Webアプリケーションのランタイムクラスパスでカバーされている)にドロップすると、このエラーは消えます。
この問題にはJSF/JSPとは何もないことに注意してください。ましてやJava EEです。これは単なる基本的なJavaです。例外の根本的な原因もそれを示唆しており、それはJava.lang
パッケージのものです。
テストの実行時に、指定されたクラスがプロジェクトのクラスパスにありません。
解決策は、pomに次の依存関係を追加することです。
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
<scope>test</scope>
</dependency>