Note that there are some explanatory texts on larger screens.

plurals
  1. POCan find imported Spring beans from JAR, but not from WAR
    primarykey
    data
    text
    <p>My application consists of three Maven projects (I am omitting other modules)): FrameworkBase (JAR), FrameworkBaseImpl (JAR), FrameworkRestService (WAR).</p> <p>FrameworkRestService is a plugin to FrameworkBaseImpl, drawing its class/interface definitions from FrameworkBase, which FrameworkBaseImpl implements/extends. (I had to split FrameworkBase to avoid Maven curcular dependencies). </p> <p>FrameworkBaseImpl has a main, which invokes Jetty, passing the FrameworkRestService war.</p> <p>I am trying to have Spring inject a RestService instance as a field member in the (sole) instance of FrameworkMain class of FrameworkBaseImpl. My Spring points to FrameworkRestService class inside FrameworkRestService project as implementing the restService bean.</p> <p>And here is the problem: Although Spring seems to find the imported framework_rest_service.context file in the WAR that contains the bean it fails injecting it (no bean named restService is found). But if I convert FrameworkRestService into a JAR - it magically succeeds! I am stuck for 2 days on it! Please help!</p> <p>FrameworkBase pom.xml:</p> <pre><code>&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;artifactId&gt;framework.base&lt;/artifactId&gt; &lt;packaging&gt;jar&lt;/packaging&gt; &lt;name&gt;framework.base&lt;/name&gt; &lt;url&gt;http://maven.apache.org&lt;/url&gt; &lt;properties&gt; &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt; &lt;/properties&gt; &lt;parent&gt; &lt;groupId&gt;controlapps&lt;/groupId&gt; &lt;artifactId&gt;controlapp&lt;/artifactId&gt; &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; &lt;relativePath&gt;../controlapp/pom.xml&lt;/relativePath&gt; &lt;/parent&gt; &lt;/project&gt; </code></pre> <p>FrameworkBase RestService:</p> <pre><code>package com.company.controlapps.framework.base; public class RestService { public FrameworkMain frameworkMain; /* Setters for Spring */ public void setFrameworkMain(FrameworkMain frameworkMain) {this.frameworkMain = frameworkMain;} } </code></pre> <p>FrameworkBase FrameworkMain:</p> <pre><code>package com.company.controlapps.framework.base; public interface FrameworkMain { ... } </code></pre> <p>FrameworkBaseImpl pom.xml:</p> <pre><code>&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;artifactId&gt;framework.base.impl&lt;/artifactId&gt; &lt;packaging&gt;jar&lt;/packaging&gt; &lt;name&gt;framework.base.impl&lt;/name&gt; &lt;url&gt;http://maven.apache.org&lt;/url&gt; &lt;properties&gt; &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt; &lt;/properties&gt; &lt;parent&gt; &lt;groupId&gt;controlapps&lt;/groupId&gt; &lt;artifactId&gt;controlapp&lt;/artifactId&gt; &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; &lt;relativePath&gt;../controlapp/pom.xml&lt;/relativePath&gt; &lt;/parent&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;controlapps&lt;/groupId&gt; &lt;artifactId&gt;framework.base&lt;/artifactId&gt; &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;controlapps&lt;/groupId&gt; &lt;artifactId&gt;framework.restservice&lt;/artifactId&gt; &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; &lt;scope&gt;runtime&lt;/scope&gt; &lt;type&gt;war&lt;/type&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;/project&gt; </code></pre> <p>FrameworkBaseImpl FrameworkMainImpl:</p> <pre><code>package com.company.controlapps.framework.base.impl; public class FrameworkMainImpl implements FrameworkMain { .... protected RestService restService; public void setRestService(RestService restService) {this.restService = restService;} } public static void main(String[] args) { context = new ClassPathXmlApplicationContext(SPRING_CONTEXT_FILENAME); FrameworkMainImpl frameworkMain = (FrameworkMainImpl) context.getBean("frameworkMain"); ... } </code></pre> <p>FrameworkBaseImpl spring context.xml:</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&gt; &lt;import resource="classpath*:framework_restservice_context.xml"/&gt; &lt;bean id="frameworkMain" class="com.company.controlapps.framework.base.impl.FrameworkMainImpl" &gt; &lt;property name="restService" ref="restService" /&gt; &lt;/bean&gt; &lt;/beans&gt; </code></pre> <p>FrameworkRestService FrameworkRestService pom.xml:</p> <pre><code>&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;artifactId&gt;framework.restservice&lt;/artifactId&gt; &lt;packaging&gt;war&lt;/packaging&gt; &lt;name&gt;framework.restservice&lt;/name&gt; &lt;url&gt;http://maven.apache.org&lt;/url&gt; &lt;properties&gt; &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt; &lt;jersey.version&gt;1.12&lt;/jersey.version&gt; &lt;/properties&gt; &lt;parent&gt; &lt;groupId&gt;controlapps&lt;/groupId&gt; &lt;artifactId&gt;controlapp&lt;/artifactId&gt; &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; &lt;relativePath&gt;../controlapp/pom.xml&lt;/relativePath&gt; &lt;/parent&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;controlapps&lt;/groupId&gt; &lt;artifactId&gt;framework.base&lt;/artifactId&gt; &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.sun.jersey&lt;/groupId&gt; &lt;artifactId&gt;jersey-server&lt;/artifactId&gt; &lt;version&gt;${jersey.version}&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.sun.jersey&lt;/groupId&gt; &lt;artifactId&gt;jersey-json&lt;/artifactId&gt; &lt;version&gt;${jersey.version}&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.sun.jersey&lt;/groupId&gt; &lt;artifactId&gt;jersey-server-linking&lt;/artifactId&gt; &lt;version&gt;${jersey.version}&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.sun.jersey.contribs&lt;/groupId&gt; &lt;artifactId&gt;jersey-spring&lt;/artifactId&gt; &lt;version&gt;${jersey.version}&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.aspectj&lt;/groupId&gt; &lt;artifactId&gt;aspectjrt&lt;/artifactId&gt; &lt;version&gt;1.5.4&lt;/version&gt; &lt;scope&gt;compile&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;javax.servlet&lt;/groupId&gt; &lt;artifactId&gt;servlet-api&lt;/artifactId&gt; &lt;version&gt;2.5&lt;/version&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j&lt;/artifactId&gt; &lt;version&gt;1.2.17&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;/project&gt; </code></pre> <p>FrameworkRestService spring framework_restservice_context.xml:</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&gt; &lt;bean id="restService" class="com.radware.controlapps.framework.restservice.FrameworkRestService"&gt; &lt;property name="frameworkMain" ref="frameworkMain" /&gt; &lt;/bean&gt; &lt;/beans&gt; </code></pre> <p>FrameworkRestService FrameworkRestService.java snippet:</p> <pre><code>package com.company.controlapps.framework.restservice; @Path("myresource") public class FrameworkRestService extends RestService { ... @Context UriInfo uriInfo; @Context Request request; @GET @Produces(MediaType.APPLICATION_JSON) public MyResource getMyResource() { ... frameworkMain.doSomething(); .... } </code></pre> <p>Sorry for the long question. :-)</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload