亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法調用方法:java.lang.IllegalArgumentException:參數類型不匹配

無法調用方法:java.lang.IllegalArgumentException:參數類型不匹配

牧羊人nacy 2023-06-14 10:44:40
我試圖通過對已通過其 JNDI 引用查找的 EJB 進行反射來調用方法。它需要三個參數:一個 EndUser 對象(自定義對象)、一個 Set(自定義類)和一個布爾值。第一個對象導致調用失敗并顯示“無法調用方法:java.lang.IllegalArgumentException:參數類型不匹配”。只要第一個參數不為空,就會發生這種情況。將其設置為 null 會使錯誤消失。實際調用:  public Relation createRelation(final Relation relation, final HashSet<Contact> contacts) {        final EndUser user = new EndUser();        Object[] args = new Object[]{user, contacts, false};        try {            return (Relation) EjbUtils.invoke("registerEndUser", REGISTRATION_SERVICE_JNDI, args);        } catch (final Throwable throwable) {            LOGGER.error("Could not invoke method", throwable);            return null;        }}EjbUtils 方法: public static Object invoke(final String methodName, final String ejbName, final Object... args) throws Throwable {        final String jndiName = getEjbJndi(ejbName);        final Object remoteObject = lookup(jndiName);        final Method[] methods = remoteObject.getClass().getMethods();        for (final Method method : methods) {            if (methodName.equals(method.getName()) && args.length == method.getParameterCount()) {                try {                    return method.invoke(remoteObject, args);                } catch (IllegalAccessException e) {                    final String message = String.format("Could not invoke method %s on %s: %s", methodName, ejbName, e.getMessage());                    LOGGER.error(message);                    throw new IllegalStateException(message, e);                } catch (InvocationTargetException e) {                    throw e.getCause();                }            }        }        throw new IllegalArgumentException("Method not found");    }我試圖調用的方法:    public Relation registerEndUser(final EndUser relation, final Set<Contact> contacts, boolean sendMail)            throws RegistrationServiceException, RegistrationServiceWarning {        return registerRelation(relation, contacts, sendMail);    }沒有拋出異常并且調用了該方法,這應該表明參數的類型正確。調試時我可以看到找到了正確的方法,并且所需的參數類型與我提供的相同。關于如何找出實際問題的任何想法?
查看完整描述

1 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

我已經能夠找到原因。我使用遠程查找和反射的原因是我在另一個 EAR 中調用 EJB。結果,EndUser類已由不同的類加載器創建,因此未被識別為所需類的實例。

查看完整回答
反對 回復 2023-06-14
  • 1 回答
  • 0 關注
  • 373 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號