0

私は現在、他の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アプリケーションでは発生しないのですか?それは私の現在の設定と関係がありますか?

お時間をいただきありがとうございます。

4

1 に答える 1

0

実際、私は何が悪かったのかを理解しました。どうやらJAX-WSフレームワークは戻り値ArrayListオブジェクトのために機能しませんでした。Stringオブジェクトとして変更したところ、問題はありませんでした。また、Oracle Java 1.6から1.7にアップグレードしたことにも言及する必要がありますが、これが主な理由ではないと思います。

于 2012-06-26T06:59:11.610 に答える