2013-03-01 3 views
2

Я пытался создать новый метод в моем сгенерированном классе Endpoint, и я нашел это странное поведение: я могу добавить метод к сгенерированному классу, но я не может добавить два из них, независимо от того, какой из двух я добавляю. Это код моего сгенерированного класса, где я добавил код для двух добавленных методов:Не удается создать больше, чем метод в классе конечных точек в облачных конечных точках Google

package it.raffaele.bills; 

import java.util.HashMap; 
import java.util.LinkedList; 
import java.util.List; 

import javax.annotation.Nullable; 
import javax.inject.Named; 
import javax.jdo.PersistenceManager; 
import javax.jdo.Query; 
import javax.persistence.EntityExistsException; 
import javax.persistence.EntityNotFoundException; 

import com.google.api.server.spi.config.Api; 
import com.google.api.server.spi.response.CollectionResponse; 
import com.google.appengine.api.datastore.Cursor; 
import com.google.appengine.datanucleus.query.JDOCursorHelper; 

@Api(name = "utenteendpoint") 
public class UtenteEndpoint { 

    /** 
    * This method lists all the entities inserted in datastore. 
    * It uses HTTP GET method and paging support. 
    * 
    * @return A CollectionResponse class containing the list of all entities 
    * persisted and a cursor to the next page. 
    */ 
    @SuppressWarnings({ "unchecked", "unused" }) 
    public CollectionResponse<Utente> listUtente(
      @Nullable @Named("cursor") String cursorString, 
      @Nullable @Named("limit") Integer limit) { 

     PersistenceManager mgr = null; 
     Cursor cursor = null; 
     List<Utente> execute = null; 

     try { 
      mgr = getPersistenceManager(); 
      Query query = mgr.newQuery(Utente.class); 
      if (cursorString != null && cursorString != "") { 
       cursor = Cursor.fromWebSafeString(cursorString); 
       HashMap<String, Object> extensionMap = new HashMap<String, Object>(); 
       extensionMap.put(JDOCursorHelper.CURSOR_EXTENSION, cursor); 
       query.setExtensions(extensionMap); 
      } 

      if (limit != null) { 
       query.setRange(0, limit); 
      } 

      execute = (List<Utente>) query.execute(); 
      cursor = JDOCursorHelper.getCursor(execute); 
      if (cursor != null) 
       cursorString = cursor.toWebSafeString(); 

      // Tight loop for fetching all entities from datastore and accomodate 
      // for lazy fetch. 
      for (Utente obj : execute) 
       ; 
     } finally { 
      mgr.close(); 
     } 

     return CollectionResponse.<Utente> builder().setItems(execute) 
       .setNextPageToken(cursorString).build(); 
    } 

    /** 
    * This method gets the entity having primary key id. It uses HTTP GET method. 
    * 
    * @param id the primary key of the java bean. 
    * @return The entity with primary key id. 
    */ 
    public Utente getUtente(@Named("id") Long id) { 
     PersistenceManager mgr = getPersistenceManager(); 
     Utente utente = null; 
     try { 
      utente = mgr.getObjectById(Utente.class, id); 
     } finally { 
      mgr.close(); 
     } 
     return utente; 
    } 

    /** 
    * This inserts a new entity into App Engine datastore. If the entity already 
    * exists in the datastore, an exception is thrown. 
    * It uses HTTP POST method. 
    * 
    * @param utente the entity to be inserted. 
    * @return The inserted entity. 
    */ 
    public Utente insertUtente(Utente utente) { 
     PersistenceManager mgr = getPersistenceManager(); 
     try { 
      if (containsUtente(utente)) { 
       throw new EntityExistsException("Object already exists"); 
      } 
      mgr.makePersistent(utente); 
     } finally { 
      mgr.close(); 
     } 
     return utente; 
    } 

    /** 
    * This method is used for updating an existing entity. If the entity does not 
    * exist in the datastore, an exception is thrown. 
    * It uses HTTP PUT method. 
    * 
    * @param utente the entity to be updated. 
    * @return The updated entity. 
    */ 
    public Utente updateUtente(Utente utente) { 
     PersistenceManager mgr = getPersistenceManager(); 
     try { 
      if (!containsUtente(utente)) { 
       throw new EntityNotFoundException("Object does not exist"); 
      } 
      mgr.makePersistent(utente); 
     } finally { 
      mgr.close(); 
     } 
     return utente; 
    } 

    /** 
    * This method removes the entity with primary key id. 
    * It uses HTTP DELETE method. 
    * 
    * @param id the primary key of the entity to be deleted. 
    * @return The deleted entity. 
    */ 
    public Utente removeUtente(@Named("id") Long id) { 
     PersistenceManager mgr = getPersistenceManager(); 
     Utente utente = null; 
     try { 
      utente = mgr.getObjectById(Utente.class, id); 
      mgr.deletePersistent(utente); 
     } finally { 
      mgr.close(); 
     } 
     return utente; 
    } 


/********************************ADDED CODE*********************************************/ 

    @SuppressWarnings({"cast", "unchecked"}) 
     public List<Bill> getUserBillsByTag(@Named("tag") String tag){ 
     PersistenceManager mgr = getPersistenceManager(); 
      Utente utente = null; 
      List<Bill> list = new LinkedList<Bill>(); 
      try { 
       Query q = mgr.newQuery(Utente.class); 
       q.setFilter("nfcID == '" + tag +"'"); 
       List<Utente> utenti = (List<Utente>) q.execute(); 
       if (!utenti.isEmpty()){ 
        for (Utente u : utenti){ 
         list.addAll(u.getBollettini()); 
         break; //fake loop. 
        } 

       }else{ 
        //handle error 

       } 


      } finally { 
       mgr.close(); 
      } 
      return list; 


     } 


    @SuppressWarnings({"cast", "unchecked"}) 
    public List<Bill> getUserBills(@Named("id") Long id){ 
     Utente utente = getUtente(id); 
     System.out.println(utente); 
     List<Bill> list = utente.getBollettini(); 
     return list; 
    } 


/*******************************************************************************/  


    private boolean containsUtente(Utente utente) { 
     PersistenceManager mgr = getPersistenceManager(); 
     boolean contains = true; 
     try { 
      mgr.getObjectById(Utente.class, utente.getId()); 
     } catch (javax.jdo.JDOObjectNotFoundException ex) { 
      contains = false; 
     } finally { 
      mgr.close(); 
     } 
     return contains; 
    } 

    private static PersistenceManager getPersistenceManager() { 
     return PMF.get().getPersistenceManager(); 
    } 

} 

Вы знаете, как помочь мне? Я что-то упускаю?

+0

Вы сказали «не может добавить», но вы можете мне сказать, что на самом деле произошло? –

+0

Да, конечно: если я добавлю другой пользовательский метод, генерация клиентской библиотеки конечных точек не удастся. Учитывая, что текущая версия API не возвращает подробных ошибок, почти невозможно понять, почему. – Raffo

ответ

7

Ваши методы имеют то же описание api (path="utenteendpoint/{param}"). Дайте одну из них другой путь:

@ApiMethod(path="utenteendpoint/tag/{tag}/") 
public List<Bill> getUserBillsByTag(@Named("tag") String tag) { ... } 

@ApiMethod(path="utenteendpoint/user/{id}/") 
public List<Bill> getUserBills(@Named("id") Long id) { ... } 
+0

Метод, который вы цитируете, является конфиденциальным и не влияет на код выше. Прежде всего, он создается самим набором инструментов Google и, как описано в моем вопросе, внутри раздела кода, который я обозначил, есть два метода, о которых я говорю. Добавление только одного из двух в порядке для успешного завершения процесса компиляции. Добавление обоих этих объектов - нет. – Raffo

+0

Извините, я изменил свой ответ. – Nipper