0

現時点では、私のテストEJB projectでは、次Statelessの 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 projectでは、次のものがあります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 project実行する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)

数回の試行の後、エラーは次のようになりました。

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

いくつかの奇妙なことがあります:

  1. 最も奇妙なことは、関数全体をコピーしてtestUpload()に貼り付けるとManagedBean、関数が完全に機能することです。両方のプロジェクトですべてのライブラリをインポートしたことは 100% 確信しています。ただし、関数testUpload()は 内でのみ機能し、 では機能WAR projectしませんEJB project
  2. 上記のコードでわかるように、ダミー行を追加しようとしましたLog log = LogFactory.getLog(AmazonS3Client.class);が、その行でエラーがスローされることはありませんでした。

この問題に対処する方法を教えていただければ、非常にありがたいです:(。

4

1 に答える 1

0

この問題を解決するにはEJB ProjectEAR Project. EAR Projectを直接デプロイする代わりにをデプロイした場合にのみEJB Project、ライブラリが正しくロードされます。

この問題の原因はまだわかりません。可能であれば、誰かが私に説明を与えることができれば、私は非常に感謝しています:)

于 2013-03-30T06:17:11.987 に答える