У нас есть сеансовый компонент без состояния (EJB 3.0), который имеет метод, который принимает varargs (переменные аргументы) в качестве входных данных. Подпись метода выглядит следующим образом: -EJB вызов метода varargs при отказе от клиента Java7
public String operation1 (String arg1, List ... arg4);
Этот EJB развернут на Weblogic 10.3.2, работающем на JRE Java.
Когда этот метод EJB вызывается из автономного клиента Java6, вызов выполняется успешно. Когда я изменяю JRE с Java6 на Java7 (без изменения какого-либо другого клиентского кода), вызов выходит из строя с помощью немаршального исключения (трассировка стека ниже).
javax.ejb.EJBException: Could not unmarshal method ID; nested exception is:
java.rmi.UnmarshalException: Method not found: 'operation1(Ljava.lang.String;Ljava.util.List...;)'; nested exception is: java.rmi.UnmarshalException: Method not found: 'operation1(Ljava.lang.String;Ljava.util.List...;)'
at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.unwrapRemoteException(RemoteBusinessIntfProxy.java:109)
at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:91)
at com.sun.proxy.$Proxy5.operation1(Unknown Source)
at com.MyEJBStandaloneClient.testOperation1(MyEJBStandaloneClient.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
EJB Code
@Stateless(mappedName = "MyBean")
public class MyBean implements MyBeanRemote{
public String operation1(String arg1,List...arg4) {
System.out.println("Input1 is:-"+arg1);
return "newString";
}
}
Удаленный класс
@Remote
public interface MyBeanRemote {
public String operation1(String arg1,List... arg4);
}
Методы без списков параметров (если таковые будут добавлены), в том же EJB успешно вызывается из клиентов Java7 & он является только методы varargs в EJB, которые имеют эту проблему.
Обратите внимание, что тот же самый вызов отлично работает даже с Java7 если сигнатура методы на классе удаленного интерфейса изменяется на следующий
public String operation1(String arg1,List[] arg4);
Но есть ли способ, чтобы заставить его работать без изменения сигнатуры методы?
Есть ли какие-либо известные проблемы вокруг этого?
Спасибо.