tomcat - JAX-WS:来自另一个 Web 服务的 Web 服务调用

标签 tomcat servlets jax-ws

我目前正在开发一个 jsp 网络应用程序,该应用程序维护另外两个网络服务的两个客户端。我正在使用 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 webservice的代码如下:

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 异常统计跟踪从调用开始 ArrayList recommendedProducts = (ArrayList) getRecommendation(user_id, nummOfRecs);

为什么会这样?由于异常来自的代码是自动生成的,我该怎么做才能克服它?为什么这只发生在 Web 应用程序中而不发生在 Java SE 应用程序中?跟我现在的设置有关系吗?

感谢您的宝贵时间。

最佳答案

其实我知道出了什么问题。显然,由于返回值 ArrayList 对象,JAX-WS 框架无法正常工作。当我将其更改为 String 对象时,没有出现任何问题。另外,我不得不提到我从 Oracle Java 1.6 升级到 1.7,但我认为这不是主要原因。

关于tomcat - JAX-WS:来自另一个 Web 服务的 Web 服务调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11120719/

相关文章:

java - 解码具有大文本元素的 xml 文件时出现 Axis2/JAX-WS 错误

java - 如何防止浏览器访问 CXF 安全 Web 服务

java - 部署一个基于 Spring 的 WAR,其 JAR 依赖项已外部化

apache - AJP 连接器不工作? (404 错误)

jsf - session 失效后单击浏览器后退按钮时防止 ViewExpiredException

java - 仅获取 1 个随机行的值并将这些值设置为一个类

java - 从 servlet 到达 xml

tomcat - 当我阅读未实现所有规范时,这是什么意思?

java - 来自 tomcat 7 的电子邮件编码

java - 使用 Java JAX-WS 返回字符串数组?