Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 使用Amazon AWS SDK时遇到NoClassDefFoundError_Java_Jsf 2_Amazon Web Services_Noclassdeffounderror - Fatal编程技术网

Java 使用Amazon AWS SDK时遇到NoClassDefFoundError

Java 使用Amazon AWS SDK时遇到NoClassDefFoundError,java,jsf-2,amazon-web-services,noclassdeffounderror,Java,Jsf 2,Amazon Web Services,Noclassdeffounderror,目前,在我的测试EJB项目中,我有以下无状态bean: @WebService(serviceName = "TestService") @Stateless() public class TestService { @WebMethod(operationName = "testUpload") public void testUpload() { // DUMMY LINE Log log = LogFactory.getLog(Amazon

目前,在我的测试
EJB项目中
,我有以下
无状态
bean:

@WebService(serviceName = "TestService")
@Stateless()
public class TestService {

    @WebMethod(operationName = "testUpload")
    public void testUpload() {
        // DUMMY LINE
        Log log = LogFactory.getLog(AmazonS3Client.class);
        // END DUMMY LINE

        File file = new File("path_to_test_file");
        AWSCredentials credentials = new BasicAWSCredentials(AMAZON_KEY_ID, AMAZON_SECRET_KEY);
        AmazonS3 conn = new AmazonS3Client(credentials);
        conn.setEndpoint("https://s3-ap-southeast-1.amazonaws.com");
        PutObjectRequest por = new PutObjectRequest(AMAZON_BUCKET_NAME, "test.txt", file);
        conn.putObject(por);
    }

}
在我的测试
WAR项目中
,我有以下
ManagedBean

@Named(value = "mrBean")
@RequestScoped
public class MrBean {
    @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/TestService/TestService.wsdl")
    private TestService_Service service;
    private TestService port;

    @PostConstruct
    public void test() {
        port = service.getTestServicePort();
        port.testUpload();
    }
}
当我部署我的
EJB项目
并运行
test.xhtml
页面时,我总是在以下行遇到错误:

AmazonS3 conn = new AmazonS3Client(credentials);
开始时,错误如下所示:

Caused by: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at com.amazonaws.services.s3.AmazonS3Client.<clinit>(AmazonS3Client.java:193)
...
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
有一些奇怪的事情:

  • 最奇怪的是,如果我复制整个
    testUpload()
    函数并粘贴到
    ManagedBean
    ,函数工作得非常好。我100%确信我已经导入了这两个项目中的所有库。但是,函数
    testUpload()
    只能在
    WAR项目中工作,而不能在
    EJB项目中工作
  • 正如您在上面的代码中所看到的,我试图添加一个伪行
    loglog=LogFactory.getLog(AmazonS3Client.class)但从未在该行抛出错误

  • 如果您能告诉我如何解决这个问题,我将不胜感激:(.

    为了解决这个问题,我必须将
    EJB项目
    打包到
    EAR项目
    中。只有当我部署
    EAR项目
    而不是直接部署
    EJB项目
    时,库才能正确加载

    我还没有找到这个问题的原因。如果可能的话,如果有人能给我一个解释,我将不胜感激:)

    Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.services.s3.AmazonS3Client