私は現在、他の2つのWebサービスの2つのクライアントを維持するjspWebアプリケーションを開発しています。私はapache-tomcat6.0.26、Oracle(Sun)java 1.6、およびNetbeans 6.9(IDE)を使用しています。私の問題は、標準のJava SEアプリケーションから2つのWebサービスを呼び出すと、すべてが正常に機能することです。ただし、2つのWebサービスを使用するWebサービスからWebサービスメソッドを呼び出そうとすると、次のようになります。
NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/String;
WebサービスのRPCを処理するラッパークラスを使用します。
public class RecommenderEngineContainer {
public ArrayList<Long> getRecommendationResults(long user_id, int nummOfRecs) {
if(user_id < 0 || nummOfRecs < 0 || nummOfRecs > 100)
return null;
ArrayList<Long> recommendedProducts = (ArrayList<Long>) getRecommendation(user_id, nummOfRecs);
return recommendedProducts;
}
private static java.util.List<java.lang.Long> getRecommendation(long arg0, int arg1) {
ws.recommendationengine.RECOMMENDATIONENGINEWSService service = new ws.recommendationengine.RECOMMENDATIONENGINEWSService();
ws.recommendationengine.RECOMMENDATIONENGINEWS port = service.getRECOMMENDATIONENGINEWSPort();
return port.getRecommendation(arg0, arg1);
}
}
また、JAX-WSWebサービスのコードは次のとおりです。
public class RECOMMENDATION_ENGINE_WS {
private MyConnector dbManager;
private Connection dbCon = null;
private String DIRECTORY_PATH;
private String data_model_file;
private String dbTableUserPrefs = "user_preferences";
private String dbTableSimModel = "item_similarities";
private static SingletonItemSimilarityModel myHModel;
public RECOMMENDATION_ENGINE_WS() {
Context context = null;
try {
context = (Context) new InitialContext().lookup("java:comp/env");
this.DIRECTORY_PATH = (String) context.lookup("RECOM_ENGINE_DIR_PATH");
this.data_model_file = (String) context.lookup("USER_HISTORY_FILE_NAME");
}catch(NamingException e) {
System.err.println(e.getMessage());
}
}
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;
}
}
NoSuchMethod Exception stactトレースは、ArrayListの呼び出しから始まります。recommendedProducts=(ArrayList)getRecommendation(user_id、nummOfRecs);
なぜこうなった?例外の原因となるコードは自動生成されるので、それを克服するにはどうすればよいですか?なぜこれはWebアプリケーションでのみ発生し、Java SEアプリケーションでは発生しないのですか?それは私の現在の設定と関係がありますか?
お時間をいただきありがとうございます。