我目前正在开发一个jsp Web应用程序,它维护两个其他Web服务的客户端。我使用的是apache-tomcat 6.0.26,Oracle(Sun)java 1.6和Netbeans 6.9(IDE)。我的问题是,当从标准Java SE应用程序调用两个Web服务时,一切正常。但是,如果我尝试从使用这两个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-WS Web服务的代码如下:
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 trace从调用开始 ArrayList recommendedProducts =(ArrayList)getRecommendation(user_id,nummOfRecs);
为什么会这样?由于异常来自的代码是自动生成的,我该怎么做才能克服它?为什么这只发生在Web应用程序而不是Java SE应用程序中?它与我目前的设置有什么关系吗?
感谢您的时间。
答案 0 :(得分:0)
其实我弄清楚出了什么问题。显然,由于返回值ArrayList对象,JAX-WS框架不起作用。当我将其更改为String对象时,没有出现任何问题。另外,我必须提到我从Oracle Java 1.6升级到1.7,但我不认为这是主要原因。