У меня возникла проблема с попыткой вставить экземпляр solr-сервера из компонента в мой код. Я получаю NullPointerException
и проверил сам экземпляр сервера и проверил, что он равен нулю. Я могу создать сервер, не введя его просто отлично.Не удается ввести Solr Server в приложение, используя Spring через @Autowired
Мой файл spring.xml объявляет боб, как это:
<bean id="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">`
<constructor-arg index="0" value="${solr.serverUrl}" />
</bean>
<context:annotation-config />
<context:component-scan base-package="my.base.package" />
где значение ${solr.serverUrl}
было подтверждено, чтобы быть правильным.
Файл web.xml имеет Слушатель контекста в нем:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
.
<servlet-class>
com.sun.jersey.spi.spring.container.servlet.SpringServlet
</servlet-class>
.
</servlet>
код, который я пытаюсь внедрить этот компонент является время @Autowired
в следующим образом:
34 @Component
35 public class GenericClassImpl implements GenericClass{
36
37 @Autowired
38 private SolrServer solrServer;
39
40 public String doQuery(String query){
41 try{
42 SolrQuery solrQuery = new SolrQuery(query);
43 QueryResponse rsp = solrServer.query(solrQuery);
44 SolrDocumentList docs = rsp.getResults();
45
46 return docs.toString();
47 }catch(Exception e){
48 e.printStackTrace();
49 }
50 }
51 }
Я попытался использовать @Qualifier("solrServer")
вместе с @Autowired
, и это тоже не сработало.
Это все делается с использованием maven, который, похоже, не имеет проблем. Выход я получаю
java.lang.NullPointerException
at ...GenericClassImpl.doQuery(GenericClassImpl.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1483)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1414)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1363)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1353)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:414)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:877)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:594)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675)
at java.lang.Thread.run(Thread.java:662)
Опять же, если я
SolrServer solrServer = new HttpSolrServer(serverUrl);
код работает просто отлично, и я могу выполнять запросы на сервере Solr. Любые идеи относительно того, что я делаю неправильно, что это не будет вводить?
код, который получает экземпляр GenericClassImpl
является
public class GenericServiceImpl implements GenericService{
protected GenericClass gc;
@GET
@Path({pathParam})
public String doGet(@PathParam({pathParam}) String pathParam,
@DefaultValue("*:*") @QueryParam("q") String query){
gc = SearchFactory.getInstance().getGenericClass(pathParam);
return gc.doQuery(query);
}
}
И SearchFactory
является
public class SearchFactory{
private static SearchFactory instance;
private SearchFactory(){}
public static SearchFactory getInstance() {
if (instance == null)
instance = new SearchFactory();
return instance;
}
public GenericClass getGenericClass(String type){
GenericClass result = null;
if(type.toLowerCase().equals("case1")){
result = new GenericClassImpl1();
return result;
}
else if(type.toLowerCase().equals("case2")){
result = new GenericClassImpl2();
return result;
}
else throw new Exception();
}
}
И GenericClassImpl1
и GenericClassImpl2
продлить GenericClassImpl
и в настоящее время пуст.
Не могли бы вы показать нам код, в котором вы получаете экземпляр GenericClassImpl? –
Я только что добавил в код, который получает экземпляр. Благодаря! – James