2015-08-03 4 views
0

Я пытаюсь разработать некоторую серверную программу. Итак, я тестирую программу с помощью junit4. Однако неожиданно возникла ошибка при вводе автоуведомленных зависимостей. Я не знаю, как решить эту проблему. Пожалуйста, помогите мне.Как решить проблему «впрыска автоуведомленных зависимостей»?

Это контекстно-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.0.xsd"> 

    <context:component-scan base-package="kr.ac.jbnu.sql.soremore" /> 

    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
     <property name="viewClass" 
      value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

    <bean id="RDMLDBMgmt" class="kr.ac.jbnu.sql.soremore.service.rdml.RDMLDBMgmtImpl" /> 

</beans> 

Это интерфейс.

package kr.ac.jbnu.sql.soremore.service; 

import java.util.ArrayList; 

import javax.jcr.Node; 
import javax.jcr.RepositoryException; 

import kr.ac.jbnu.sql.soremore.model.RDML; 

public interface IRDMLDBMgmt { 
    public boolean storeRDML(RDML rdml) throws RDMLDBException, RevisionControlException, RepositoryException, Exception ; 
    public RDML retrieveRecentRDML(String id) throws RevisionControlException, Exception; 
    public ArrayList<String> retrieveRDMLHistory(String id) throws RevisionControlException, Exception; 
    public RDML retrieveRDML(String keyword) throws RDMLDBException, RepositoryException, Exception; 
} 

Это код реализации интерфейса.

package kr.ac.jbnu.sql.soremore.service.rdml; 

import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.LinkedList; 
import java.util.List; 

import javax.jcr.Node; 
import javax.jcr.NodeIterator; 
import javax.jcr.PathNotFoundException; 
import javax.jcr.Repository; 
import javax.jcr.RepositoryException; 
import javax.jcr.Session; 
import javax.jcr.SimpleCredentials; 
import javax.jcr.UnsupportedRepositoryOperationException; 
import javax.jcr.ValueFormatException; 
import javax.jcr.query.Query; 
import javax.jcr.query.QueryManager; 
import javax.jcr.query.QueryResult; 
import javax.jcr.version.Version; 
import javax.jcr.version.VersionHistory; 
import javax.jcr.version.VersionIterator; 
import javax.jcr.version.VersionManager; 
import javax.xml.parsers.ParserConfigurationException; 

import kr.ac.jbnu.sql.soremore.controller.SoremoreController; 
import kr.ac.jbnu.sql.soremore.model.RDML; 
import kr.ac.jbnu.sql.soremore.service.IRDMLDBMgmt; 
import kr.ac.jbnu.sql.soremore.service.RDMLDBException; 
import kr.ac.jbnu.sql.soremore.service.RevisionControlException; 

import org.apache.jackrabbit.commons.JcrUtils; 
import org.apache.log4j.Logger; 
import org.jdom2.Attribute; 
import org.jdom2.Document; 
import org.jdom2.Element; 
import org.jdom2.output.XMLOutputter; 
import org.springframework.stereotype.Service; 

@Service 
public class RDMLDBMgmtImpl implements IRDMLDBMgmt { 
    static Logger logger = Logger.getLogger(SoremoreController.class.getName()); 
    static private int docNumber = 0; 
    private Repository repository; 
    private Session session; 
    private Node root; 
    private Node baseWP = null; 
    private Node inputedWP = null; 
    private List<String> remainedBaseWorkProductItemIds; 
    private List<String> remainedInputedWorkProductItemIds; 
    private VersionManager vm; 
    private QueryManager queryManager; 

    public RDMLDBMgmtImpl() throws ParserConfigurationException, 
      UnsupportedRepositoryOperationException, RepositoryException { 
     super(); 
     try { 
      repository = JcrUtils.getRepository(); 
      session = repository.login(new SimpleCredentials("admin", "admin" 
        .toCharArray())); 
      root = session.getRootNode(); 
      vm = session.getWorkspace().getVersionManager(); 
      queryManager = session.getWorkspace().getQueryManager(); 
     } catch (RepositoryException e) { 

      e.printStackTrace(); 
     } 
     remainedBaseWorkProductItemIds = new LinkedList<String>(); 
     remainedInputedWorkProductItemIds = new LinkedList<String>(); 
    } 

    @Override 
    public boolean storeRDML(RDML rdml) throws RDMLDBException, 
      RevisionControlException, RepositoryException, Exception { 
     Document rdmlAsDocument = rdml.getRdmlAsDocument(); 
     String id = rdml.getIdFromDocument(rdmlAsDocument); 

     RDML curRdml = retrieveRecentRDML(id); 
     if (curRdml != null && curRdml.getRdmlAsNode() != null) 
      baseWP = curRdml.getRdmlAsNode(); 
     else 
      baseWP = null; 

     inputedWP = convertDocToNode(rdmlAsDocument, id); 
     // version 정보 갱신 
     if (baseWP == null) { 
      initialVersioning(inputedWP); 
     } else { 
      versionUp(); 
     } 

     return true; 
    } 

    // 수정필요 Node -> RDML 어떻게? 
    // Node이름 가져올 수 있나???????? 
    @Override 
    public RDML retrieveRecentRDML(String id) throws RevisionControlException, 
      Exception { 
     NodeIterator workproducts = root.getNodes("WorkProduct"); 
     Node workProduct = null; 
     RDML rdml = new RDML(); 
     rdml.setRdmlID(id); 

     while (workproducts.hasNext()) { 
      workProduct = workproducts.nextNode(); 
      String rdmlID = workProduct.getProperty("jcr:id").getValue() 
        .getString(); 
      if (rdmlID.equals(id)) { 
       rdml.setRdmlAsNode(workProduct); 
       Document doc = convertNodeToDoc(workProduct); 
       rdml.setRdmlAsDocument(doc); 
       break; 
      } 
     } 

     // RDML 반환 
     return rdml; 
    } 

    // retrieveRecent 반환값 RDML로 바꾼 후 수정 필요 
    @Override 
    public ArrayList<String> retrieveRDMLHistory(String id) 
      throws RevisionControlException, Exception { 
     // TODO Auto-generated method stub 
     ArrayList<String> HistroyResult = new ArrayList<String>(); 

     Node curNode = convertDocToNode(retrieveRecentRDML(id) 
       .getRdmlAsDocument(), id); 
     VersionHistory history = session.getWorkspace().getVersionManager() 
       .getVersionHistory(curNode.getPath()); 
     VersionIterator versionIterator = history.getAllVersions(); 
     while (versionIterator.hasNext()) { 
      Version version = (Version) versionIterator.next(); 
      String a = "version found : " + version.getName() + " - " 
        + version.getNode(version.getPath()).getName() + " - " 
        + version.getCreated().getTime(); 
      HistroyResult.add(a); 
     } 
     return HistroyResult; 
    } 

    public RDML retrieveRDML(String keyword) throws RDMLDBException, 
      RepositoryException, Exception { 
     String sql = "select * from [nt:base] where [jcr:content] = '"+keyword+"'"; 
     Query query = queryManager.createQuery(sql, Query.JCR_SQL2); 
     QueryResult result = query.execute(); 

     NodeIterator nodes = result.getNodes(); 
     while(nodes.hasNext()){ 
      Node node = nodes.nextNode(); 
      if(node.getProperty("jcr:id")!=null) 
       System.out.println(node.getProperty("jcr:id").getString()); 
     } 
     return null; 
    } 

    private String extractContent(Element element) throws Exception { 
     String content = ""; 
     content = element.getValue(); 
     return content; 
    } 

    private List<Element> extractWorkProductItems(Document RD) { 
     Element workProduct = RD.getRootElement(); 
     List<Element> workProductItems = workProduct 
       .getChildren("WorkProductItem"); 
     return workProductItems; 
    } 

    private void initialVersioning(Node WorkProduct) throws Exception { 
     WorkProduct.addMixin("mix:versionable"); 
     NodeIterator WorkProductItems = WorkProduct.getNodes("WorkProductItem"); 
     while (WorkProductItems.hasNext()) { 
      Node WorkProductItem = WorkProductItems.nextNode(); 
      WorkProductItem.addMixin("mix:versionable"); 
     } 
     session.save(); 
    } 

    private void versionUp() throws Exception { 
     NodeIterator WorkProductItems = inputedWP.getNodes("WorkProductItem"); 
     if (WorkProductItems == null) { 
      workProductVersionUp(); 
     } else { 
      workProductItemVersionUp(); 
     } 
    } 

    // If workproductItem is not exist, compare base workproduct's contents and 
    // inputed workproduct's contents. Then change the version. 
    private void workProductVersionUp() throws RepositoryException { 
     String base = baseWP.getProperty("jcr:content").getValue().getString(); 
     String input = inputedWP.getProperty("jcr:content").getValue() 
       .getString(); 
     if (base.equals(input)) { 
      inputedWP.remove(); 
      System.out.println("recent workproduct version persist"); 

     } else { 
      // ��� 
      if (baseWP.getProperty("jcr:deleted").getValue().getString() 
        .equals("false")) { 
       vm.checkout(baseWP.getPath()); 
       baseWP.getProperty("jcr:content").setValue(input); 
       session.save(); 
       vm.checkin(baseWP.getPath()); 
       inputedWP.remove(); 
       System.out.println("workproduct version is changed"); 
      } else { 
       System.out.println("This workproduct has deleted"); 
      } 
     } 
    } 

    private void workProductItemVersionUp() throws Exception { 
     setAllBaseWorkProductItemId(); 
     setAllInputWorkProductItemId(); 

     vm.checkout(baseWP.getPath()); 
     NodeIterator inputWPIs = inputedWP.getNodes("WorkProductItem"); 
     while (inputWPIs.hasNext()) { 
      Node inputWPI = inputWPIs.nextNode(); 

      // get inputed workproductItem's id 
      String inputWPIid = inputWPI.getProperty("jcr:id").getValue() 
        .getString(); 

      // get inputed workproductItem's contents 
      String inputWPIcontent = inputWPI.getProperty("jcr:content") 
        .getValue().getString(); 

      // get base workproductItem with same id 
      Node baseWPI = getBaseWorkProductItem(inputWPIid, "WorkProductItem"); 

      // compare base workproductItem and inputed workproductItem 
      if (baseWPI != null) { 
       // get base workproductItem's contents 
       String baseWPIcontent = baseWPI.getProperty("jcr:content") 
         .getValue().getString(); 

       // compare workproductItems contents. 
       if (!isDeleted(baseWPI)) { 
        if (!inputWPIcontent.equals(baseWPIcontent)) { 
         vm.checkout(baseWPI.getPath()); 
         baseWPI.getProperty("jcr:content").setValue(
           inputWPIcontent); 
         session.save(); 
         vm.checkin(baseWPI.getPath()); 
         System.out.println(inputWPIid + "is changed"); 
        } 
       } else { 
        vm.checkout(baseWPI.getPath()); 

        baseWPI.getProperty("jcr:deleted").setValue("false"); 
        if (!inputWPIcontent.equals(baseWPIcontent)) { 
         baseWPI.getProperty("jcr:content").setValue(
           inputWPIcontent); 
         System.out.println(inputWPIid 
           + "is undeleted and changed"); 
        } else { 
         System.out.println(inputWPIid + "is undeleted"); 
        } 

        session.save(); 
        vm.checkin(baseWPI.getPath()); 
       } 

      } 
     } 
     addNodes("WorkProductItem"); 
     deleteNodes("WorkProductItem"); 
     inputedWP.remove(); 

     setAllBaseWorkProductItemId(); 
     session.save(); 
     vm.checkin(baseWP.getPath()); 
     System.out.println(baseWP.getPath() + " version = " 
       + vm.getBaseVersion(baseWP.getPath())); 
    } 

    private Node getBaseWorkProductItem(String id, String nodeType) 
      throws Exception { 
     NodeIterator childNodes = baseWP.getNodes(nodeType); 
     Node childNode = null; 
     while (childNodes.hasNext()) { 
      childNode = childNodes.nextNode(); 
      String childId = childNode.getProperty("jcr:id").getValue() 
        .getString(); 

      if (id.equals(childId)) { 
       remainedBaseWorkProductItemIds.remove(childId); 
       remainedInputedWorkProductItemIds.remove(childId); 
       return childNode; 
      } 
     } 
     return null; 
    } 

    private void setAllBaseWorkProductItemId() throws RepositoryException { 
     NodeIterator baseWPIs = baseWP.getNodes("WorkProductItem"); 
     remainedBaseWorkProductItemIds.clear(); 
     while (baseWPIs.hasNext()) { 
      Node baseWPI = baseWPIs.nextNode(); 
      remainedBaseWorkProductItemIds.add(baseWPI.getProperty("jcr:id") 
        .getValue().getString()); 
     } 
    } 

    private void setAllInputWorkProductItemId() throws RepositoryException { 
     NodeIterator inputedWPIs = inputedWP.getNodes("WorkProductItem"); 
     remainedInputedWorkProductItemIds.clear(); 
     while (inputedWPIs.hasNext()) { 
      Node inputedWPI = inputedWPIs.nextNode(); 
      remainedInputedWorkProductItemIds.add(inputedWPI 
        .getProperty("jcr:id").getValue().getString()); 
     } 
    } 

    private boolean isDeleted(Node node) throws Exception { 
     boolean isDeleted = node.getProperty("jcr:deleted").getValue() 
       .getString().equals("false"); 
     if (isDeleted) { 
      return false; 
     } else { 
      return true; 
     } 
    } 

    private void addNodes(String NodeType) throws Exception { 
     Iterator<String> iter = remainedInputedWorkProductItemIds.iterator(); 
     while (iter.hasNext()) { 
      String WPIid = iter.next(); 
      NodeIterator nodes = inputedWP.getNodes(NodeType); 
      Node node = null; 
      boolean isMatch = false; 
      while (nodes.hasNext()) { 
       node = nodes.nextNode(); 
       String nodeId = node.getProperty("jcr:id").getValue() 
         .getString(); 
       if (nodeId.equals(WPIid)) { 
        isMatch = true; 
        break; 
       } 
      } 

      if (isMatch) { 
       String nodeId = node.getProperty("jcr:id").getValue() 
         .getString(); 
       String nodeContent = node.getProperty("jcr:content").getValue() 
         .getString(); 

       if (!isDeleted(node)) { 
        Node newNode = baseWP.addNode(NodeType); 
        newNode.setProperty("jcr:id", nodeId); 
        newNode.setProperty("jcr:content", nodeContent); 
        newNode.setProperty("jcr:deleted", "false"); 
        newNode.addMixin("mix:versionable"); 
       } 
       System.out.println(nodeId + "is added"); 
      } 
     } 
    } 

    private void deleteNodes(String NodeType) throws Exception { 
     Iterator<String> iter = remainedBaseWorkProductItemIds.iterator(); 
     while (iter.hasNext()) { 
      String WPIid = iter.next(); 
      NodeIterator nodes = baseWP.getNodes(NodeType); 
      Node node = null; 
      boolean isMatch = false; 
      while (nodes.hasNext()) { 
       node = nodes.nextNode(); 
       String nodeId = node.getProperty("jcr:id").getValue() 
         .getString(); 
       if (nodeId.equals(WPIid)) { 
        isMatch = true; 
        break; 
       } 
      } 
      if (isMatch) { 
       DeleteNode(node); 
       System.out.println(node.getProperty("jcr:id").getValue() 
         .getString() 
         + "is deleted"); 
      } 
     } 
    } 

    private boolean DeleteNode(Node node) throws Exception { 
     vm.checkout(node.getPath()); 
     node.getProperty("jcr:deleted").setValue("True"); 
     session.save(); 
     vm.checkin(node.getPath()); 
     return true; 
    } 

    private Document convertNodeToDoc(Node WorkProduct) 
      throws ValueFormatException, IllegalStateException, 
      PathNotFoundException, RepositoryException, IOException { 
     Element rootElement = new Element("WorkProduct"); 
     Document doc = new Document(rootElement); 
     // doc.setRootElement(rootElement); 
     rootElement.setAttribute(new Attribute("ID", WorkProduct 
       .getProperty("jcr:id").getValue().getString())); 

     NodeIterator WorkProuctItems = WorkProduct.getNodes(); 
     while (WorkProuctItems.hasNext()) { 
      Node WorkProcutItemNode = WorkProuctItems.nextNode(); 
      Element workProductItem = new Element("WorkProductItem"); 
      workProductItem.addContent(new Element("Content") 
        .setText(WorkProcutItemNode.getProperty("jcr:content") 
          .getValue().toString())); 
      rootElement.addContent(workProductItem); 
     } 
     XMLOutputter xmlOutput = new XMLOutputter(); 
     xmlOutput.output(doc, 
       new FileWriter(new File("resource/Output_rdml/example_output" 
         + String.valueOf(++docNumber) + ".xml"))); 
     return doc; 
    } 

    private Node convertDocToNode(Document workProduct, String id) 
      throws IllegalStateException, Exception { 
     if (workProduct == null) 
      return null; 
     Node node = root.addNode("WorkProduct"); 
     node.setProperty("jcr:id", id); 
     node.setProperty("jcr:deleted", false); 
     List<Element> docWorkproductItems = extractWorkProductItems(workProduct); 
     for (int i = 0; i < docWorkproductItems.size(); i++) { 
      Element docWorkproductItem = docWorkproductItems.get(i); 
      String workproductItemId = docWorkproductItem 
        .getAttributeValue("id"); 
      Node nodeWorkProductItem = node.addNode("WorkProductItem"); 
      nodeWorkProductItem.setProperty("jcr:deleted", false); 
      nodeWorkProductItem.setProperty("jcr:id", workproductItemId); 
      nodeWorkProductItem.setProperty("jcr:content", 
        extractContent(docWorkproductItems.get(i))); 
     } 
     return node; 
    } 

    public void sessionLogout() { 
     session.logout(); 
    } 
} 

Это код проверки.

package kr.ac.jbnu.sql.soremore.service.rdml; 

import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 

import kr.ac.jbnu.sql.soremore.model.RDML; 
import kr.ac.jbnu.sql.soremore.service.IRDMLDBMgmt; 
import kr.ac.jbnu.sql.soremore.service.RDMLDBException; 

import org.jdom2.Document; 
import org.jdom2.JDOMException; 
import org.jdom2.input.SAXBuilder; 
import org.junit.Assert; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath*:soremore-servlet.xml" }) 
public class RDMLDBMgmtTest extends AbstractJUnit4SpringContextTests { 

    @Autowired 
    IRDMLDBMgmt rdmlDBMgmt = null; 

    @Test 
    public void storeRDML() { 
     ArrayList<RDML> rdmls = loadTestRDML(); 
     boolean isSuccessful = false; 
     for (RDML rdml : rdmls) { 
      try { 
       isSuccessful = rdmlDBMgmt.storeRDML(rdml); 
       System.out.println(); 
      } catch (RDMLDBException e) { 
       e.printStackTrace(); 
       isSuccessful = false; 
      } catch (Exception e) { 
       e.printStackTrace(); 
       isSuccessful = false; 
      } 
     } 
     Assert.assertTrue(isSuccessful); 
    } 

    @Test 
    public void queryRDML0() { 
     String[] rdmlIDs = { "RD01", "RD02" }; 
     boolean isSuccessful = false; 

     for (String rdmlID : rdmlIDs) { 
      try { 
       isSuccessful = false; 
       RDML rdml = rdmlDBMgmt.retrieveRecentRDML(rdmlID); 
       if (rdml.getRdmlAsDocument() != null) { 
        Document doc = rdml.getRdmlAsDocument(); 
        if (doc != null) { 
         isSuccessful = true; 
        } 
       } 
       Assert.assertTrue(isSuccessful); 
      } catch (RDMLDBException e) { 
       e.printStackTrace(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    @Test 
    public void queryRDML1(){ 
     String[] keywords = { "연구", "RD" }; 
     boolean isSuccessful = false; 

     for (String keyword : keywords) { 
      try { 
       isSuccessful = false; 
       RDML rdml = rdmlDBMgmt.retrieveRDML(keyword); 
       if (rdml.getRdmlAsDocument() != null) { 
        Document doc = rdml.getRdmlAsDocument(); 
        if (doc != null) { 
         isSuccessful = true; 
        } 
       } 
       Assert.assertTrue(isSuccessful); 
      } catch (RDMLDBException e) { 
       e.printStackTrace(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    public ArrayList<RDML> loadTestRDML() { 
     ArrayList<RDML> rdmls = new ArrayList<RDML>(); 
     String xmlSource = "resource/sample_rdml"; 

     File sourceDir = new File(xmlSource); 
     File[] sourceFiles = sourceDir.listFiles(); 
     for (File file : sourceFiles) { 
      RDML rdml = new RDML(); 
      rdml.setRdmlAsDocument(createDocument(file)); 
      rdmls.add(rdml); 
     } 

     return rdmls; 
    } 

    private Document createDocument(File rdmlPathAsFile) { 
     SAXBuilder jdomBuilder = new SAXBuilder(); 
     Document jdomDocument = null; 
     try { 
      jdomDocument = jdomBuilder.build(rdmlPathAsFile); 
     } catch (JDOMException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return jdomDocument; 
    } 
} 

, наконец, это стек ошибок.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'kr.ac.jbnu.sql.soremore.service.rdml.RDMLDBMgmtTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: kr.ac.jbnu.sql.soremore.service.IRDMLDBMgmt kr.ac.jbnu.sql.soremore.service.rdml.RDMLDBMgmtTest.rdmlDBMgmt; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [kr.ac.jbnu.sql.soremore.service.IRDMLDBMgmt] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1204) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:385) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:82) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:212) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:199) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:251) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:253) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:216) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:82) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:60) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:67) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:162) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: kr.ac.jbnu.sql.soremore.service.IRDMLDBMgmt kr.ac.jbnu.sql.soremore.service.rdml.RDMLDBMgmtTest.rdmlDBMgmt; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [kr.ac.jbnu.sql.soremore.service.IRDMLDBMgmt] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:555) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) 
    ... 26 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [kr.ac.jbnu.sql.soremore.service.IRDMLDBMgmt] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1261) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1009) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:904) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:527) 
    ... 28 more 
+2

Где находится 'soremore-servlet.xml' файл? Вы уверены, что вы объявляете bean-класс класса 'RDMLDBMgmtImpl'? – BobTheBuilder

ответ

1

Проблема, которая является видно из кода, вы создали боб дважды для реализации RDMLDBMgmtImpl. После того, как с отображением XML как:

<bean id="RDMLDBMgmt" class="kr.ac.jbnu.sql.soremore.service.rdml.RDMLDBMgmtImpl" /> 

И второе, вы использовали @Service аннотацию класса RDMLDBMgmtImpl.

Удалите отображение компонента из XML или удалите аннотацию. Также добавьте context:annotation-config для создания аннотации @Autowired.

Невозможно добавить комментарий из-за низких точек репутации.

+0

Спасибо за ответ. Можете ли вы мне помочь? Я удаляю отображение бобов из XML и добавляю в XML. Тем не менее, эта же ошибка возникает. Вы это знаете? – Rect

+0

Я создал папку 'config' в' src/resources' и скопировал 'soremore-servlet.xml'. Путь к классам подобен 'config/soremore-servlet.xml'. Изменено значение @ContextConfiguration, например '@ContextConfiguration (location = {"classpath: config/soremore-servlet.xml"})', и это сработало для меня. Пожалуйста, попробуйте это. Надеюсь, это может сработать и для вас. – Niranjan

+0

Большое спасибо за ответ. – Rect

Смежные вопросы