2012-06-11 5 views
0

Je travaille sur une application Web Java qui expose un service Web. Ce service Web effectue des appels à distance à deux autres services Web Java, sur le même serveur Tomcat. Si j'essaie d'appeler des méthodes à partir des deux autres services, j'obtiens une pile d'erreurs qui entraîne une erreur NoSuchMethodError dans le code généré automatiquement. J'utilise Netbeans 6.9, sun java 1.6 et apache tomcat 6.0.26. J'ai testé les services Web individuellement et ils fonctionnent bien.appel de service Web tomcat6 du service Web methodnotfounderror

Nous vous remercions de votre temps.

Permettez-moi d'être plus précis

J'ai l'application Web RecommendationWeb avec le service Web RecommendationManager:

@WebService() 
public class RecommendationManager { 
    public ArrayList<Long> getRecommendation(long userId, int NumOfRecommendations) { 
     List<RecommendedItem> recommendations = this.myHModel.getRecommendations(userId, NumOfRecommendations); 
     ArrayList<Long> result = new ArrayList<Long>(); 
     Iterator itr = recommendations.iterator(); 
     while(itr.hasNext()) { 
      RecommendedItem recItem = (RecommendedItem) itr.next(); 
      result.add(new Long(recItem.getItemID())); 
     } 
     return result; 
    } 
} 

et la ETL_Procedures application web avec le service Web ETL_WS:

@WebService() 
public class ETL_WS { 
    public ArrayList<Long> getCorrespondingActiveCouponsForRecommendation(ArrayList<Long> itemCategories, int numOfRecoms) { 
    int sumOfAllRecommendedCategories = 0; 
    Iterator itr = itemCategories.iterator(); 
    ArrayList<Coupon> coupons = new ArrayList<Coupon>(); 
    ArrayList<Long> recommendedCoupons = new ArrayList<Long>(); 
    HashMap productOccurences = new HashMap(); 
    while(itr.hasNext()) { 
     Long item = (Long) itr.next(); 
     int val = 0; 
     ArrayList<Coupon> temp = (ArrayList<Coupon>) couponMap.getCoupon(item); 
     if(temp != null) { 
      Iterator itr_a = temp.iterator(); 
      while(itr_a.hasNext()) { 
       val += 1; 
       sumOfAllRecommendedCategories += 1; 
       Coupon tmp_coupon = (Coupon) itr_a.next(); 
       if(tmp_coupon.isActive()) 
        coupons.add(tmp_coupon); 
      } 
      productOccurences.put(item, new Integer(val)); 
     } 
    } 
    long currentCat = coupons.get(0).getItem_id(); 
    int categoryRecs = 0; 
    Integer currentOccurence = (Integer) productOccurences.get(new Long(currentCat)); 
    int maxCategoryItems = (currentOccurence.intValue()/sumOfAllRecommendedCategories); 
    int tempRecItems = 0; 
    int listIndex = 0; 
    while(tempRecItems < numOfRecoms && listIndex < coupons.size()) { 
     if(categoryRecs < maxCategoryItems && currentCat == coupons.get(listIndex).getItem_id()) { 
      recommendedCoupons.add(coupons.get(listIndex).getItem_id()); 
      listIndex += 1; 
      tempRecItems += 1; 
      categoryRecs += 1; 
     }else if(categoryRecs < maxCategoryItems && currentCat != coupons.get(listIndex).getItem_id()) { 
      recommendedCoupons.add(coupons.get(listIndex).getItem_id()); 
      currentCat = coupons.get(listIndex).getItem_id(); 
      currentOccurence = (Integer) productOccurences.get(new Long(currentCat)); 
      maxCategoryItems = (currentOccurence.intValue()/sumOfAllRecommendedCategories); 
      categoryRecs = 1; 
      listIndex += 1; 
      tempRecItems += 1; 
     }else { 
      recommendedCoupons.add(coupons.get(listIndex).getItem_id()); 
      currentCat = coupons.get(listIndex).getItem_id(); 
      currentOccurence = (Integer) productOccurences.get(new Long(currentCat)); 
      maxCategoryItems = (currentOccurence.intValue()/sumOfAllRecommendedCategories); 
      categoryRecs = 1; 
      listIndex += 1; 
      tempRecItems += 1; 
     } 
    } 

    return recommendedCoupons; 
} 
} 

Ces deux méthodes sont appelées dans l'application Web Recommended_Interface à partir du service Web INTERFACE_LAYER:

@WebService() 
public class INTERFACE_LAYER { 
    public ArrayList<Long> requestRecommendation(long userID, int noOfRecoms) { 
    ArrayList<Long> recommendedCoupons = null; 
    ArrayList<Long> recommendedItems = (ArrayList<Long>) getRecommendation(userID, noOfRecoms); 
     recommendedCoupons = (ArrayList<Long>) getCorrespondingActiveCouponsForRecommendation(recommendedItems, noOfRecoms); 
    return recommendedCoupons; 
} 

private static java.util.List<java.lang.Long> getRecommendation(long arg0, int arg1) { 
    ws.recommender.RecommendationManagerService service = new ws.recommender.RecommendationManagerService(); 
    ws.recommender.RecommendationManager port = service.getRecommendationManagerPort(); 
    return port.getRecommendation(arg0, arg1); 
} 

private static java.util.List<java.lang.Long> getCorrespondingActiveCouponsForRecommendation(java.util.List<java.lang.Long> arg0, int arg1) { 
    ws.etl.ETLWSService service = new ws.etl.ETLWSService(); 
    ws.etl.ETLWS port = service.getETLWSPort(); 
    return port.getCorrespondingActiveCouponsForRecommendation(arg0, arg1); 
} 
} 
+1

Vous devrez peut-être poster un peu plus de détails (c.-à-d. Journaux) afin d'obtenir une réponse significative! – Davos555

Répondre

0

La raison de ne pas fonctionner était la valeur de retour des méthodes ArrayList du service Web. Quand je l'ai changé en String, ça a marché.