2012-03-20 4 views
1

나는이 작업 코드가 있습니다아마존 자바 SDK는 - 정식 없습니다

package javaapplication7; 

import com.amazonaws.auth.PropertiesCredentials; 
import com.amazonaws.services.s3.AmazonS3; 
import com.amazonaws.services.s3.AmazonS3Client; 
import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class JavaApplication7 { 

    public static void main(String[] args){ 
     try { 
      AmazonS3 s3 = new AmazonS3Client(new PropertiesCredentials(
        JavaApplication7.class.getResourceAsStream("/AwsCredentials.properties"))); 
      System.out.println("OWNER: " + s3.getS3AccountOwner().toString()); 
     } catch (IOException ex) { 
      Logger.getLogger(JavaApplication7.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

그리고 아무런 문제가, 내가 콘솔에 기록 된 소유자를 볼 수 있습니다. 웹 서비스 프로젝트에서

내가 가진 :

Principal.java

package WSAV.resources; 

import WSAV.entities.AWS; 
import javax.ejb.EJB; 
import javax.ejb.Stateless; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 

@Stateless 
@Path("/amazonws") 
public class Principal { 

    @EJB 
    private AWS aws; 

    @GET 
    @Path("/AWS") 
    @Produces({"text/html", "text/plain"}) 
    public String getTest() { 
     return aws.test(); 
    } 
} 

AWS.java 내가 배포하고 테스트

package WSAV.entities; 

import com.amazonaws.auth.PropertiesCredentials; 
import com.amazonaws.services.s3.AmazonS3; 
import com.amazonaws.services.s3.AmazonS3Client; 
import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.ejb.Singleton; 

@Singleton 
public class AWS { 

    public AWS() { 
    } 

    public String test() { 

     try { 
      AmazonS3 s3 = new AmazonS3Client(new PropertiesCredentials(
        AWS.class.getResourceAsStream("/AwsCredentials.properties"))); 
     } catch (IOException ex) { 
      Logger.getLogger(AWS.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    return "testing"; 
    } 
} 

승 EB 서비스, 웹은 보여줍니다


유형 : 예외 보고서

설명 : 는 서버가이 요청을 이행하지 내부 오류()가 발생했습니다.

예외 : javax.servlet.ServletException : java.lang.NullPointerException이

근본 원인 :

ADVERTENCIA : EJB5184 : 콘솔 화면에 java.lang.NullPointerException이


EJB AWS에서 호출하는 동안 시스템 예외가 발생했습니다. 메서드 : public java.lang.String WSAV.entities.AWS.test() ADVERTENCIA : javax.ejb.TransactionRolledbackLocalExcepti 중 : 콩에서 발생한 예외

{...}

ADVERTENCIA : EJB5184 : 시스템 예외 EJB의 주, 메소드 호출시에 발생 공개 java.lang.String의 WSAV.resources.Principal.getTest () ADVERTENCIA : javax.ejb.EJBTransactionRolledbackException

{...}

는 ADVERTENCIA : StandardWrapperValve는 [ServletAdaptor] PWC1406 : 서블릿 ServletAdaptor 용의 Servlet.service()는 예외

01,231,789 던져

내가 무엇을 할 수 있는지 또는 무엇을 할 수 있는지 모르겠다. 아마도이 다른 Java 파일을 만들고이 프로젝트와 별도로 실행하지만 AWS는 단지 하나의 프로젝트에서만 작동해야한다.

감사!

답변

0

@EJB로 주석 달기는 관리 클래스 만 가능합니다. 예외는 사용자의 AWS 클래스가 모든 EJB 관련 요청을 충족시키지 못함을 의미합니다.

0

문제는 EJB 표준을 준수하지 않는 AWS EJB bean에 있습니다. 여기에 REST와 EJB 3.1에 관한 좋은 기사가있다. http://netbeans.dzone.com/articles/how-to-combine-rest-and-ejb-31

나는 코드 주위 조정할 동일한 단계를 사용했다. 희망이 당신을 위해 작동합니다.

AWS.java

@Singleton 
public class AWS { 

private AmazonS3 s3Client; 

@PostConstruct 
public void init() { 

    try { 
     s3Client= new AmazonS3Client(new PropertiesCredentials( 
       AWS.class.getResourceAsStream("/AwsCredentials.properties"))); 
    } catch (IOException ex) { 
     Logger.getLogger(AWS.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

public AmazonS3 getS3Client() { 
return s3Client; 
} 

} 

Principal.java

@Stateless      
@Path("/amazonws")      
public class Principal {      

@EJB      
private AWS aws;      

@GET      
@Path("/AWS")      
@Produces({"text/html", "text/plain"})      
public String getTest() {      
    AmazonS3 s3=aws.getS3Client(); 
    return s3.getS3AccountOwner().toString());           
}      
}