現時点では、私のテスト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
いくつかの奇妙なことがあります:
- 最も奇妙なことは、関数全体をコピーして
testUpload()
に貼り付けるとManagedBean
、関数が完全に機能することです。両方のプロジェクトですべてのライブラリをインポートしたことは 100% 確信しています。ただし、関数testUpload()
は 内でのみ機能し、 では機能WAR project
しませんEJB project
。 - 上記のコードでわかるように、ダミー行を追加しようとしました
Log log = LogFactory.getLog(AmazonS3Client.class);
が、その行でエラーがスローされることはありませんでした。
この問題に対処する方法を教えていただければ、非常にありがたいです:(。