Please use MiniSolrCloudCluster instead of EmbeddedSolrServer for unit/integration tests.
On Mon, Apr 11, 2016 at 2:26 PM, Rohana Rajapakse < rohana.rajapa...@gossinteractive.com> wrote: > Thanks Shawn, > > I am now pointing solrHomeFolder to lucene-solr-master\solr\server\solr > which contains the correct solr.xml file. > Tried the following two ways to create an EmbeddedSolrServer: > > > 1. CoreContainer corecon = > CoreContainer.createAndLoad(Paths.get(solrHomeFolder)); > corecon.load(); > SolrClient svr = new EmbeddedSolrServer(corecon, corename); > > > 2. SolrClient svr = new EmbeddedSolrServer(Paths.get(solrHomeFolder), > corename); > > > They both throws the same exception (java.lang.NoClassDefFoundError: > Could not initialize class org.apache.solr.servlet.SolrRequestParsers). > org.apache.solr.servlet.SolrRequestParsers class is present in the > solr-core-7.0.0-SNAPSHOT.jar and this jar is present in the WEB-INF\lib > folder (in solr server) and also included as a dependency jar in the > pom.xml of the test project. > > Here is the full stack trace of the exception: > > java.lang.NoClassDefFoundError: Could not initialize class > org.apache.solr.servlet.SolrRequestParsers > at > org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.<init>(EmbeddedSolrServer.java:112) > at > org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.<init>(EmbeddedSolrServer.java:70) > at > com.gossinteractive.solr.DocPhraseUpdateProcessorTest.createEmbeddedSolrServer(DocPhraseUpdateProcessorTest.java:141) > at > com.gossinteractive.solr.DocPhraseUpdateProcessorTest.setUp(DocPhraseUpdateProcessorTest.java:99) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:497) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) > at > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46) > at > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41) > at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173) > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > at > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) > at org.junit.runners.ParentRunner.run(ParentRunner.java:220) > 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:467) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) > > > I have debugged this a bit and found that this exception is thrown on the > following line in EmbeddedServer.class > > _parser = new SolrRequestParsers(null); > > Also, the coreContainer object has no cores at this point. > > > Wonder if I should update my code from master (it is now about two weeks > old). > > Thanks for any help. > > Rohana > > > -----Original Message----- > From: Shawn Heisey [mailto:apa...@elyograg.org] > Sent: 08 April 2016 16:46 > To: solr-user@lucene.apache.org > Subject: Re: EmbeddedSolr for unit tests in Solr 6 > > On 4/8/2016 7:51 AM, Rohana Rajapakse wrote: > > Thanks. I know it exists, but don't know how to use it. > > > > I am trying to use EmbeddedSolrServer(Path solrHome, String > > defaultCoreName) > > > > What should be the "solrHome"? Should it be the actual solr home (i.e. > lucene-solr-master\solr\server\solr) in the solr server, or can it be any > temporary folder? > > > > I create it with: new EmbeddedSolrServer((new > File("testdata/solr")).toPath(), "tmpcore"); and get the following > Exception (I use solr-Solr-7.0.0): > > > > org.apache.solr.common.SolrException: Should not have found > > solr/@persistent . Please upgrade your solr.xml: > https://cwiki.apache.org/confluence/display/solr/Format+of+solr.xml > > at > org.apache.solr.core.SolrXmlConfig.failIfFound(SolrXmlConfig.java:167) > > at > org.apache.solr.core.SolrXmlConfig.checkForIllegalConfig(SolrXmlConfig.java:149) > > at > org.apache.solr.core.SolrXmlConfig.fromConfig(SolrXmlConfig.java:61) > > at > org.apache.solr.core.SolrXmlConfig.fromInputStream(SolrXmlConfig.java:129) > > at > org.apache.solr.core.SolrXmlConfig.fromFile(SolrXmlConfig.java:111) > > at > org.apache.solr.core.SolrXmlConfig.fromSolrHome(SolrXmlConfig.java:139) > > at > org.apache.solr.core.SolrXmlConfig.fromSolrHome(SolrXmlConfig.java:144) > > at > org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.<init>(EmbeddedSolrServer.java:70) > > at > com.gossinteractive.solr.DocPhraseUpdateProcessorTest.createEmbeddedSolrServer(DocPhraseUpdateProcessorTest.java:140) > > at > > com.gossinteractive.solr.DocPhraseUpdateProcessorTest.setUp(DocPhraseU > > pdateProcessorTest.java:98) > > You said you were using EmbeddedSolrServer with 4.x, so I assumed you knew > what you were doing. > > You are getting that Exception because the solr home you pointed to > contains a solr.xml file in the old solr.xml format. This format is > supported by all of 4.x, but support was dropped in 5.0. The message is > pretty clear -- it says that you need to upgrade your solr.xml, and even > points at some documentation. Here's a wiki page about the old format, > with a link to another page about the new format: > > http://wiki.apache.org/solr/Solr.xml%20%28supported%20through%204.x%29 > > Suggestion: Rather than create a File object and convert it to a Path, use > NIO2 methods directly: > > Paths.get("testdata/solr") > > Thanks, > Shawn > > > > Registered Office: 24 Darklake View, Estover, Plymouth, PL6 7TL. > Company Registration No: 3553908 > > This email contains proprietary information, some or all of which may be > legally privileged. It is for the intended recipient only. If an addressing > or transmission error has misdirected this email, please notify the author > by replying to this email. If you are not the intended recipient you may > not use, disclose, distribute, copy, print or rely on this email. > > Email transmission cannot be guaranteed to be secure or error free, as > information may be intercepted, corrupted, lost, destroyed, arrive late or > incomplete or contain viruses. This email and any files attached to it have > been checked with virus detection software before transmission. You should > nonetheless carry out your own virus check before opening any attachment. > GOSS Interactive Ltd accepts no liability for any loss or damage that may > be caused by software viruses. > > > -- Regards, Shalin Shekhar Mangar.