JMockit找不到EJB,得到NoSuchMethodException代替

问题描述 投票:1回答:1

试图嘲弄一个消息驱动bean的,但有麻烦的@EJB被注入。该@Resource作品“精”(至少不打破它)。如果我注释掉MyMDB的@EJB线正常工作。也许一件容易的事情我错过了,但我不能找到它...

此外,我发现用@Inject替代@EJB将使它的工作,但我想知道为什么,因为我们有很多这样的代码,它不与@EJB工作。使用JDK7和JMockit v1.39

我得到的错误是:

java.lang.RuntimeException: java.lang.NoSuchMethodException: com.sun.proxy.$Proxy7.lookup()
Caused by: java.lang.NoSuchMethodException: com.sun.proxy.$Proxy7.lookup()
    at java.lang.Class.getMethod(Class.java:1678)

my mdb.Java:

import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJB;
import javax.ejb.MessageDriven;
import javax.jms.ConnectionFactory;
import javax.jms.Message;
import javax.jms.MessageListener;

@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "/queue/myqueue") })
public class MyMDB implements MessageListener {

    @Resource(mappedName = "java:/JmsBT")
    ConnectionFactory connectionFactory;

    @EJB
    ParConfigI parConfig;

    @Override
    public void onMessage(Message message) {
        System.out.println("onMessage called");
    }
}

my mdb test.Java

import javax.jms.ConnectionFactory;
import javax.jms.Message;

import org.junit.Test;

import mockit.Injectable;
import mockit.Mocked;
import mockit.Tested;

public class MyMDBTest {
    @Tested
    MyMDB sut;

    @Injectable
    ConnectionFactory jmsbt;

    @Injectable
    ParConfigI parConfigI;

    @Mocked
    Message mockedMessage;

    @Test
    public void testSmall() {
        sut.onMessage(mockedMessage);
    }
}

par config i.Java

import javax.ejb.Local;

@Local
public interface ParConfigI {
    public void testmethod();
}
unit-testing ejb jmockit
1个回答
1
投票

的问题是,JMockit试图读取在lookup注释的@EJB属性,但是该属性仅在EJB 3.1+(Java EE 6中加入)存在,而不是在EJB 3.0(Java EE 5中)。因此,NoSuchMethodException

JMockit 1.40是解决这个,但是Java EE 6的已自2010年初所以可用,从古老的Java EE 5的升级也将解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.