5 Replies Latest reply on Jan 12, 2013 3:24 PM by shadogray

    NPE when running @Inject Caller<t>

    wschilpzand

      Hi,

       

        I am trying to get errai to call a rest service.  My project was created from the JBoss quick starts (GWT project), and compiles properly.

       

        My class is a view implementation.  I have created the annotated interface for the rest service and injected using @Inject. However, when I run the applicaiton, I get a NPE on the line in the button click event that makes the call to the service.  In debug, the service variable is null.  I have tried adding dependencies through the POM etc with no joy.  I haven't yet tried using the RestClient call, as CDI is much more elegant.

       

        I am using JBoss AS7 and JBoss Developer Studio 5.0.1GA.

       

        I would love for this to work, any help would be greatly appreciated.

       

      here is my view class

       

       

      {code}/*******************************************************************************

      * Copyright 2011 Google Inc. All Rights Reserved.

      *

      * All rights reserved. This program and the accompanying materials

      * are made available under the terms of the Eclipse Public License v1.0

      * which accompanies this distribution, and is available at

      * http://www.eclipse.org/legal/epl-v10.html

      *

      * Unless required by applicable law or agreed to in writing, software

      * distributed under the License is distributed on an "AS IS" BASIS,

      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      * See the License for the specific language governing permissions and

      * limitations under the License.

      *******************************************************************************/

      package org.ws.vehiclelogbook.webapp.client.ui.security;

       

       

      import java.util.Map;

       

       

      import org.jboss.errai.bus.client.api.RemoteCallback;

      import org.jboss.errai.enterprise.client.jaxrs.api.RestClient;

      import org.jboss.errai.ioc.client.api.Caller;

      import org.ws.vehiclelogbook.webapp.client.rest.LoginService;

       

       

      import com.google.gwt.core.client.GWT;

      import com.google.gwt.event.dom.client.ClickEvent;

      import com.google.gwt.place.shared.Place;

      import com.google.gwt.uibinder.client.UiBinder;

      import com.google.gwt.uibinder.client.UiField;

      import com.google.gwt.uibinder.client.UiHandler;

      import com.google.gwt.user.client.Window;

      import com.google.gwt.user.client.ui.Button;

      import com.google.gwt.user.client.ui.Composite;

      import com.google.gwt.user.client.ui.Label;

      import com.google.gwt.user.client.ui.TextBox;

      import com.google.gwt.user.client.ui.Widget;

      import com.google.inject.Inject;

       

       

      /**

      * Sample implementation of {@link LoginView}.

      */

      public class LoginViewImpl extends Composite implements LoginView {

       

       

                interface Binder extends UiBinder<Widget, LoginViewImpl> {

                }

       

                @Inject private Caller<LoginService> loginService;

       

                private static final Binder binder = GWT.create(Binder.class);

       

       

                private Presenter listener;

       

                @UiField Label lbl_error;

                @UiField TextBox txt_username;

                @UiField TextBox txt_password;

                @UiField Button btn_login;

       

       

       

                public LoginViewImpl() {

                          initWidget(binder.createAndBindUi(this));

                          lbl_error.setVisible(false);

                          RestClient.setApplicationRoot("http://localhost:8080/VehicleLogBookApp/rest");

                }

       

       

                @Override

                public void setName(String name) {

       

                }

       

       

                @Override

                public void setPresenter(Presenter listener) {

                          this.listener = listener;

                }

       

                @UiHandler("btn_login")

                void onButtonClick(ClickEvent event){

                          loginService.call(callBack).login();

                }

       

       

                RemoteCallback<Map<String, String>> callBack = new RemoteCallback<Map<String, String>>(){

                          public void callback(Map<String, String> response){

                                    Window.alert("Success: " + response.get("success"));

                          }

                };

      }

      {code}

       

      here is my WebApp.gwt.xml    

       

       

      {code:xml}<module>

      <inherits name="com.google.gwt.user.User"/>

      <inherits name="com.google.gwt.user.theme.standard.Standard"/>

      <inherits name="com.google.gwt.place.Place"/>

      <inherits name="com.google.gwt.activity.Activity"/>

      <inherits name="org.jboss.errai.common.ErraiCommon"/>

          <inherits name="org.jboss.errai.bus.ErraiBus"/>

          <inherits name="org.jboss.errai.ioc.Container"/>

          <inherits name="org.jboss.errai.enterprise.CDI"/>

          <inherits name="org.jboss.errai.enterprise.Jaxrs"/>

         <inherits name="com.smartgwt.SmartGwt"/>

      <entry-point class="org.ws.vehiclelogbook.webapp.client.WebApp"/>

      <replace-with class="org.ws.vehiclelogbook.webapp.client.ClientFactoryImpl">

        <when-type-is class="org.ws.vehiclelogbook.webapp.client.ClientFactory"/>

      </replace-with>

      </module>

      {code}

      and here is my pom.xml

       

       

      {code:xml}<?xml version="1.0" encoding="UTF-8"?>

      <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/maven-v4_0_0.xsd">

        <modelVersion>4.0.0</modelVersion>

       

        <groupId>org.ws.vehiclelogbook</groupId>

        <artifactId>VehicleLogBookWebApp</artifactId>

        <version>0.0.1-SNAPSHOT</version>

        <packaging>war</packaging>

        <name>JBoss AS Quickstarts: Errai kitchensink</name>

        <description>A starter Java EE 6 webapp project for use on JBoss AS 7 / EAP 6, generated from the jboss-javaee6-webapp archetype</description>

       

        <properties>

          <!-- Explicitly declaring the source encoding eliminates the following

            message: -->

          <!-- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered

            resources, i.e. build is platform dependent! -->

          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

       

          <!-- Define the version of JBoss' Java EE 6 APIs we want to import. Any

            dependencies from org.jboss.spec will have their version defined by this

            BOM -->

          <version.org.jboss.spec.jboss.javaee6>3.0.0.Final</version.org.jboss.spec.jboss.javaee6>

          <!-- Alternatively, comment out the above line, and un-comment the line

            below to use version 3.0.0.Final-redhat-1 which is a release certified to

            work with JBoss EAP 6. It requires you have access to the JBoss EAP 6 maven

            repository. -->

          <!-- <version.org.jboss.spec.jboss.javaee6>3.0.0.Final-redhat-1</version.org.jboss.spec.jboss.javaee6> -->

          <version.org.jboss.errai>2.0.0.Final</version.org.jboss.errai>

          <version.com.google.gwt>2.4.0</version.com.google.gwt>

          <version.org.codehaus.mojo.gwt.maven.plugin>${version.com.google.gwt}</version.org.codehaus.mojo.gwt.maven.plugin>

        </properties>

       

        <dependencyManagement>

          <dependencies>

            <!-- JBoss distributes a complete set of Java EE 6 APIs including a

              Bill of Materials (BOM). A BOM specifies the versions of a "stack" (or a

              collection) of artifacts. We use this here so that we always get the correct

              versions of artifacts. Here we use the jboss-javaee-6.0 stack (you can read

              this as the JBoss stack of the Java EE 6 APIs). You can actually use this

              stack with any version of JBoss AS that implements Java EE 6, not just JBoss

              AS 7! -->

            <dependency>

              <groupId>org.jboss.spec</groupId>

              <artifactId>jboss-javaee-6.0</artifactId>

              <version>${version.org.jboss.spec.jboss.javaee6}</version>

              <type>pom</type>

              <scope>import</scope>

            </dependency>

       

            <!-- Errai Core and ErraiBus -->

            <dependency>

              <groupId>org.jboss.errai</groupId>

              <artifactId>errai-bus</artifactId>

              <version>${version.org.jboss.errai}</version>

              <exclusions>

                <exclusion>

                  <groupId>javax.inject</groupId>

                  <artifactId>javax.inject</artifactId>

                </exclusion>

                <exclusion>

                  <groupId>javax.annotation</groupId>

                  <artifactId>jsr250-api</artifactId>

                </exclusion>

              </exclusions>

            </dependency>

            <dependency>

              <groupId>org.jboss.errai</groupId>

              <artifactId>errai-ioc</artifactId>

              <version>${version.org.jboss.errai}</version>

              <exclusions>

                <exclusion>

                  <groupId>javax.inject</groupId>

                  <artifactId>javax.inject</artifactId>

                </exclusion>

                <exclusion>

                  <groupId>javax.annotation</groupId>

                  <artifactId>jsr250-api</artifactId>

                </exclusion>

              </exclusions>

            </dependency>

            <dependency>

              <groupId>org.jboss.errai</groupId>

              <artifactId>errai-tools</artifactId>

              <version>${version.org.jboss.errai}</version>

            </dependency>

       

            <!-- Errai JAX-RS -->

            <dependency>

              <groupId>org.jboss.errai</groupId>

              <artifactId>errai-jaxrs-client</artifactId>

              <version>${version.org.jboss.errai}</version>

            </dependency>

       

            <dependency>

              <groupId>org.jboss.errai</groupId>

              <artifactId>errai-jaxrs-provider</artifactId>

              <version>${version.org.jboss.errai}</version>

            </dependency>

       

            <!-- Errai CDI Integration Modules -->

            <dependency>

              <groupId>org.jboss.errai</groupId>

              <artifactId>errai-cdi-client</artifactId>

              <version>${version.org.jboss.errai}</version>

            </dependency>

       

            <dependency>

              <groupId>org.jboss.errai</groupId>

              <artifactId>errai-javax-enterprise</artifactId>

              <version>${version.org.jboss.errai}</version>

            </dependency>

       

            <dependency>

              <groupId>org.jboss.errai</groupId>

              <artifactId>errai-weld-integration</artifactId>

              <version>${version.org.jboss.errai}</version>

            </dependency>

       

            <dependency>

              <groupId>com.google.gwt</groupId>

              <artifactId>gwt-user</artifactId>

              <version>${version.com.google.gwt}</version>

            </dependency>

       

            <dependency>

              <groupId>com.google.gwt</groupId>

              <artifactId>gwt-dev</artifactId>

              <version>${version.com.google.gwt}</version>

            </dependency>

       

            <!-- Test dependencies -->

            <dependency>

              <groupId>junit</groupId>

              <artifactId>junit</artifactId>

              <version>4.10</version>

              <type>jar</type>

              <scope>test</scope>

            </dependency>

          </dependencies>

        </dependencyManagement>

       

        <dependencies>

       

          <!-- First declare the APIs we depend on and need for compilation. All

            of them are provided by JBoss AS 7 -->

       

          <!-- Import the CDI API, we use provided scope as the API is included

            in JBoss AS 7 -->

          <dependency>

            <groupId>javax.enterprise</groupId>

            <artifactId>cdi-api</artifactId>

            <scope>provided</scope>

          </dependency>

       

          <!-- Import the JPA API, we use provided scope as the API is included

            in JBoss AS 7 -->

          <dependency>

            <groupId>org.jboss.spec.javax.transaction</groupId>

            <artifactId>jboss-transaction-api_1.1_spec</artifactId>

            <scope>provided</scope>

          </dependency>

       

          <!-- Import the Common Annotations API (JSR-250), we use provided scope

            as the API is included in JBoss AS 7 -->

          <dependency>

            <groupId>org.jboss.spec.javax.annotation</groupId>

            <artifactId>jboss-annotations-api_1.1_spec</artifactId>

            <scope>provided</scope>

          </dependency>

       

          <!-- Import the JAX-RS API, we use provided scope as the API is included

            in JBoss AS 7 -->

          <dependency>

            <groupId>org.jboss.spec.javax.ws.rs</groupId>

            <artifactId>jboss-jaxrs-api_1.1_spec</artifactId>

            <scope>provided</scope>

          </dependency>

       

          <!-- Import the JPA API, we use provided scope as the API is included

            in JBoss AS 7 -->

       

          <!-- Import the EJB API, we use provided scope as the API is included

            in JBoss AS 7 -->

          <dependency>

            <groupId>org.jboss.spec.javax.ejb</groupId>

            <artifactId>jboss-ejb-api_3.1_spec</artifactId>

            <scope>provided</scope>

          </dependency>

       

          <!-- Import the Bean Validation API, which is used both on the server

            and the client. -->

          <dependency>

            <groupId>javax.validation</groupId>

            <artifactId>validation-api</artifactId>

          </dependency>

       

          <!-- JSR-303 (Bean Validation) Implementation -->

          <!-- Provides portable constraints such as @Email -->

          <!-- Hibernate Validator is shipped in JBoss AS 7 -->

       

          <!-- GWT validation uses Hibernate Validator, and requires the sources

            at compile time. -->

       

          <!-- GWT validation also requires the validation API sources at compile

            time -->

          <dependency>

            <groupId>javax.validation</groupId>

            <artifactId>validation-api</artifactId>

            <version>1.0.0.GA</version>

            <classifier>sources</classifier>

          </dependency>

       

          <!-- The next set of dependencies are for Errai -->

          <dependency>

            <groupId>org.jboss.errai</groupId>

            <artifactId>errai-bus</artifactId>

            <exclusions>

              <exclusion>

                <groupId>javax.inject</groupId>

                <artifactId>javax.inject</artifactId>

              </exclusion>

              <exclusion>

                <groupId>javax.annotation</groupId>

                <artifactId>jsr250-api</artifactId>

              </exclusion>

            </exclusions>

          </dependency>

          <dependency>

            <groupId>org.jboss.errai</groupId>

            <artifactId>errai-ioc</artifactId>

            <exclusions>

              <exclusion>

                <groupId>javax.inject</groupId>

                <artifactId>javax.inject</artifactId>

              </exclusion>

              <exclusion>

                <groupId>javax.annotation</groupId>

                <artifactId>jsr250-api</artifactId>

              </exclusion>

            </exclusions>

          </dependency>

          <dependency>

            <groupId>org.jboss.errai</groupId>

            <artifactId>errai-tools</artifactId>

          </dependency>

       

          <!-- Errai CDI Integration Modules -->

          <dependency>

            <groupId>org.jboss.errai</groupId>

            <artifactId>errai-cdi-client</artifactId>

          </dependency>

       

          <dependency>

            <groupId>org.jboss.errai</groupId>

            <artifactId>errai-javax-enterprise</artifactId>

            <scope>provided</scope>

          </dependency>

       

          <dependency>

            <groupId>org.jboss.errai</groupId>

            <artifactId>errai-weld-integration</artifactId>

       

            <exclusions>

              <!-- errai-cdi-jetty is only required for integration testing -->

              <exclusion>

                <groupId>org.jboss.errai</groupId>

                <artifactId>errai-cdi-jetty</artifactId>

              </exclusion>

       

              <exclusion>

                <groupId>org.jboss.weld.servlet</groupId>

                <artifactId>weld-servlet</artifactId>

              </exclusion>

            </exclusions>

          </dependency>

       

          <!-- gwt-user is required at runtime because we use some of the client/server

            shared APIs such as RegExp, so scope is 'compile' rather than 'provided'. -->

          <dependency>

            <groupId>com.google.gwt</groupId>

            <artifactId>gwt-user</artifactId>

            <scope>compile</scope>

          </dependency>

       

          <dependency>

            <groupId>com.google.gwt</groupId>

            <artifactId>gwt-dev</artifactId>

            <scope>provided</scope>

          </dependency>

          <!-- End of Errai dependencies -->

       

       

          <!-- Now we declare any tools needed -->

       

          <!-- Annotation processor to generate the JPA 2.0 metamodel classes for

            typesafe criteria queries -->

          <dependency>

            <groupId>org.hibernate</groupId>

            <artifactId>hibernate-jpamodelgen</artifactId>

            <version>1.1.1.Final</version>

            <scope>provided</scope>

          </dependency>

       

          <!-- Needed for running tests (you may also use TestNG) -->

          <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <scope>test</scope>

          </dependency>

       

          <dependency>

                    <groupId>com.smartgwt</groupId>

          <artifactId>smartgwt</artifactId>

                    <version>2.5-patch</version>

          </dependency>

          <dependency>

                    <groupId>com.smartgwt</groupId>

          <artifactId>smartgwt-skins</artifactId>

          <version>2.5</version>

          </dependency>

          <dependency>

                    <groupId>org.jboss.errai</groupId>

                    <artifactId>errai-jaxrs-client</artifactId>

          </dependency>

          <dependency>

                    <groupId>org.jboss.errai</groupId>

                    <artifactId>errai-jaxrs-provider</artifactId>

          </dependency>

        </dependencies>

       

        <build>

          <plugins>

            <!-- Compiler plugin enforces Java 1.6 compatibility and activates

              annotation processors -->

            <plugin>

              <artifactId>maven-compiler-plugin</artifactId>

              <version>2.3.2</version>

              <configuration>

                <source>1.6</source>

                <target>1.6</target>

              </configuration>

            </plugin>

            <plugin>

              <artifactId>maven-war-plugin</artifactId>

              <version>2.1.1</version>

              <configuration>

                <failOnMissingWebXml>false</failOnMissingWebXml>

       

                <!-- Maven will append the version to the finalName (which is the name

                  given to the generated war, and hence the context root) -->

                <warName>${project.artifactId}</warName>

       

                <!-- We must exclude GWT client local classes from the deployment,

                  or classpath scanners such as Hibernate and Weld get confused when the webapp

                  is bootstrapping. -->

                <packagingExcludes>**/javax/**/*.*,**/client/local/**/*.class</packagingExcludes>

       

                <archive>

                  <manifestEntries>

                    <Dependencies>org.jboss.as.naming,org.jboss.as.server,org.jboss.msc</Dependencies>

                  </manifestEntries>

                </archive>

              </configuration>

            </plugin>

       

            <!-- GWT plugin to compile client-side java code to javascript and

              to run GWT development mode -->

            <plugin>

              <groupId>org.codehaus.mojo</groupId>

              <artifactId>gwt-maven-plugin</artifactId>

              <version>${version.org.codehaus.mojo.gwt.maven.plugin}</version>

              <configuration>

                <inplace>true</inplace>

                <logLevel>INFO</logLevel>

                <extraJvmArgs>-Xmx512m</extraJvmArgs>

       

                <!-- Configure GWT's development mode (formerly known as hosted

                  mode) to not start the default server (embedded jetty), but to download the

                  HTML host page from the configured runTarget. -->

                <noServer>true</noServer>

                <runTarget>http://localhost:8080/VehicleLogBookWebApp/KitchenSink.html</runTarget>

       

              </configuration>

              <executions>

                <execution>

                  <goals>

                    <goal>resources</goal>

                    <goal>compile</goal>

                  </goals>

                </execution>

                <execution>

                  <id>gwt-clean</id>

                  <phase>clean</phase>

                  <goals>

                    <goal>clean</goal>

                  </goals>

                </execution>

              </executions>

            </plugin>

            <!-- The JBoss AS plugin deploys your war to a local JBoss AS container -->

            <!-- To use, run: mvn package jboss-as:deploy -->

            <plugin>

              <groupId>org.jboss.as.plugins</groupId>

              <artifactId>jboss-as-maven-plugin</artifactId>

              <version>7.1.0.Final</version>

              <configuration>

                <filename>${project.artifactId}.${project.packaging}</filename>

              </configuration>

            </plugin>

       

            <plugin>

              <groupId>org.apache.maven.plugins</groupId>

              <artifactId>maven-clean-plugin</artifactId>

              <version>2.4.1</version>

       

              <configuration>

                <filesets>

                  <fileset>

                      <directory>${basedir}</directory>

                      <includes>

                          <include>www-test/**</include>

                          <include>.gwt/**</include>

                          <include>.errai/**</include>

                          <include>src/main/webapp/KitchenSink/**</include>

                          <include>src/main/webapp/WEB-INF/deploy/**</include>

                          <include>src/main/webapp/WEB-INF/lib/**</include>

                          <include>**/gwt-unitCache/**</include>

                          <include>**/*.JUnit/**</include>

                      </includes>

                  </fileset>

                </filesets>

              </configuration>

            </plugin>

          </plugins>

       

          <pluginManagement>

            <plugins>

       

              <!-- m2e (Maven integration for Eclipse) requires the following configuration -->

              <plugin>

                <groupId>org.eclipse.m2e</groupId>

                <artifactId>lifecycle-mapping</artifactId>

                <version>1.0.0</version>

                <configuration>

                  <lifecycleMappingMetadata>

                    <pluginExecutions>

                      <pluginExecution>

                        <pluginExecutionFilter>

                          <groupId>org.codehaus.mojo</groupId>

                          <artifactId>gwt-maven-plugin</artifactId>

                          <versionRange>[2.3.0,)</versionRange>

                          <goals>

                            <goal>resources</goal>

                          </goals>

                        </pluginExecutionFilter>

                        <action>

                          <execute />

                        </action>

                      </pluginExecution>

                    </pluginExecutions>

                  </lifecycleMappingMetadata>

                </configuration>

              </plugin>

            </plugins>

          </pluginManagement>

       

        </build>

       

        <profiles>

          <profile>

            <!-- The default profile skips all tests, though you can tune it to

              run just unit tests based on a custom pattern -->

            <!-- Seperate profiles are provided for running all tests, including

              Arquillian tests that execute in the specified container -->

            <id>default</id>

            <activation>

              <activeByDefault>true</activeByDefault>

            </activation>

            <build>

              <plugins>

                <plugin>

                  <artifactId>maven-surefire-plugin</artifactId>

                  <version>2.4.3</version>

                  <configuration>

                    <skip>true</skip>

                  </configuration>

                </plugin>

              </plugins>

            </build>

          </profile>

       

          <profile>

            <!-- We add the JBoss repository as we need the JBoss AS connectors

              for Arquillian -->

            <repositories>

              <!-- The JBoss Community public repository is a composite repository

                of several major repositories -->

              <!-- see http://community.jboss.org/wiki/MavenGettingStarted-Users -->

              <repository>

                <id>jboss-public-repository</id>

                <name>JBoss Repository</name>

                <url>http://repository.jboss.org/nexus/content/groups/public</url>

                <!-- These optional flags are designed to speed up your builds

                  by reducing remote server calls -->

                <releases>

                </releases>

                <snapshots>

                  <enabled>false</enabled>

                </snapshots>

              </repository>

            </repositories>

       

            <pluginRepositories>

              <pluginRepository>

                <id>jboss-public-repository</id>

                <name>JBoss Repository</name>

                <url>http://repository.jboss.org/nexus/content/groups/public</url>

                <releases>

                </releases>

                <snapshots>

                  <enabled>false</enabled>

                </snapshots>

              </pluginRepository>

            </pluginRepositories>

       

            <!-- An optional Arquillian testing profile that executes tests in

              your JBoss AS instance -->

            <!-- This profile will start a new JBoss AS instance, and execute the

              test, shutting it down when done -->

            <!-- Run with: mvn clean test -Parq-jbossas-managed -->

            <id>arq-jbossas-managed</id>

            <dependencies>

              <dependency>

                <groupId>org.jboss.as</groupId>

                <artifactId>jboss-as-arquillian-container-managed</artifactId>

                <scope>test</scope>

              </dependency>

            </dependencies>

          </profile>

       

          <profile>

            <!-- We add the JBoss repository as we need the JBoss AS connectors

              for Arquillian -->

            <repositories>

              <!-- The JBoss Community public repository is a composite repository

                of several major repositories -->

              <!-- see http://community.jboss.org/wiki/MavenGettingStarted-Users -->

              <repository>

                <id>jboss-public-repository</id>

                <name>JBoss Repository</name>

                <url>http://repository.jboss.org/nexus/content/groups/public</url>

                <!-- These optional flags are designed to speed up your builds

                  by reducing remote server calls -->

                <releases>

                </releases>

                <snapshots>

                  <enabled>false</enabled>

                </snapshots>

              </repository>

            </repositories>

       

            <pluginRepositories>

              <pluginRepository>

                <id>jboss-public-repository</id>

                <name>JBoss Repository</name>

                <url>http://repository.jboss.org/nexus/content/groups/public</url>

                <releases>

                </releases>

                <snapshots>

                  <enabled>false</enabled>

                </snapshots>

              </pluginRepository>

            </pluginRepositories>

       

            <!-- An optional Arquillian testing profile that executes tests in

              a remote JBoss AS instance -->

            <!-- Run with: mvn clean test -Parq-jbossas-remote -->

            <id>arq-jbossas-remote</id>

            <dependencies>

              <dependency>

                <groupId>org.jboss.as</groupId>

                <artifactId>jboss-as-arquillian-container-remote</artifactId>

                <scope>test</scope>

              </dependency>

            </dependencies>

          </profile>

       

          <profile>

            <!-- When built in OpenShift the 'openshift' profile will be used when

              invoking mvn. -->

            <!-- Use this profile for any OpenShift specific customization your

              app will need. -->

            <!-- By default that is to put the resulting archive into the 'deployments'

              folder. -->

            <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html -->

            <id>openshift</id>

            <build>

              <plugins>

                <plugin>

                  <artifactId>maven-war-plugin</artifactId>

                  <version>2.1.1</version>

                  <configuration>

                    <outputDirectory>deployments</outputDirectory>

                    <warName>ROOT</warName>

                  </configuration>

                </plugin>

              </plugins>

            </build>

          </profile>

       

        </profiles>

       

        <!-- We only need this repository for Errai components. When Errai is published

          to Maven Central, we won't require this anymore. -->

        <repositories>

          <!-- The JBoss Community public repository is a composite repository

            of several major repositories -->

          <!-- see http://community.jboss.org/wiki/MavenGettingStarted-Users -->

          <repository>

            <id>jboss-public-repository</id>

            <name>JBoss Repository</name>

            <url>http://repository.jboss.org/nexus/content/groups/public</url>

            <!-- These optional flags are designed to speed up your builds by reducing

              remote server calls -->

            <releases>

            </releases>

            <snapshots>

              <enabled>false</enabled>

            </snapshots>

          </repository>

        </repositories>

       

      </project>

      {code}

        • 1. Re: NPE when running @Inject Caller<t>
          csa

          Hi Warren,

           

          So, the problem is that the loginService was not injected into your LoginView. I assume your LoginView instance itself is injected into another bean before it's beeing used? Also, did you try marking the LoginViewImpl as @Dependent? That should definitely work.

           

          Cheers,

          Christian

          • 2. Re: NPE when running @Inject Caller<t>
            wschilpzand

            Christian,

             

              No.  The LoginView is only an interface.  From the examples in the errai documentation, if I'm calling an existing service provided by another server there is no implementation.  I've also read that using @Inject will inject a generated proxy.  Is that not the case?

             

            Warren

            • 3. Re: NPE when running @Inject Caller<t>
              csa

              Sure, but your LoginViewImpl needs to be used as a managed bean. So, it either needs to be injected somewhere or looked up using the client-side bean manager. Otherwise the caller (loginService) will not be injected.

               

              So, if you create the LoginView instance manually (calling new LoginViewImpl()), the loginService and all other possible injected fields will be null. To create a managed instance with all injection points satisified, you need to either @Inject a LoginView somewhere or create an instance of it using the bean manager: https://docs.jboss.org/author/display/ERRAI/Client-Side+Bean+Manager

               

              Christian

              • 4. Re: NPE when running @Inject Caller<t>
                csa

                <From the examples in the errai documentation, if I'm calling an existing service provided by another server there is no implementation.>

                To clarify, there's nothing wrong with the way you intend to use the Caller<T>. It's just not injected because I suspect the outer bean (the LoginView(Impl)) is not managed.

                • 5. Re: NPE when running @Inject Caller<t>
                  shadogray

                  I found it at least helpful for working RPC if

                   

                  1.)  @org.jboss.errai.bus.server.annotations.Remote on the service interface

                  2.)  @org.jboss.errai.bus.server.annotations.Service on the service implementation

                   

                  Watch out not to use any other @Remote, as there are so many to choose from, at least they didn't work for me :-)