2012-03-20 3 views
1

У меня есть этот рабочий код:Amazon Java SDK с REST-Джерси - не может авторизовать из

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"; 
    } 
} 

Когда я развернуть и протестировать W ЕВ Service, веб показывает:


Тип: отчет Исключение

Описание: Сервер обнаружил внутреннюю ошибку(), что не позволяет ему выполнить эту просьбу.

Исключение: javax.servlet.ServletException: java.lang.NullPointerException

Первопричины: java.lang.NullPointerException


На консоли:

ADVERTENCIA: EJB5184: A Исключение системы произошло во время вызова в 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: Servlet.service() для сервлета ServletAdaptor бросили исключение


Я потерял, не знаю, что это может быть, или что я могу сделать ... может быть, создать этот другой файл Java и выполнить отдельно от этого проекта, но мне нужен AWS, работающий только в одном проекте ...

Спасибо!

ответ

0

Аннотированный @EJB coulb управляются только классами. Исключение означает, что ваш класс AWS не отвечает всем требованиям, связанным с EJB.

0

Проблема с вашим компонентом AWS EJB, который не соответствует стандартам EJB. Здесь есть хорошая статья о 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());           
}      
}  
Смежные вопросы