WELD-001408 Unsatisfied dependencies
Ich habe ein sehr bekannter Fehler, aber ich kann es nicht lösen.
Ich bin versucht zu laufen arqullian test für meine Anwendung.
Ich habe alles getan, was gemäß der offiziellen Dokumentation.
Die lange Suche nach Lösung für das problem gegeben, nichts.
16:49:42,713 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.deployment.unit."test.war".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."test.war".WeldService: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Sender] with qualifiers [@Default] at injection point [[field] @Inject com.test.test2.ejb.AppManagerBean.sender]
at org.jboss.as.weld.services.WeldService.start(WeldService.java:83)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_13]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_13]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_13]
Caused by: org.jboss.weld.exceptions.DeploymentException:
WELD-001408 Unsatisfied dependencies for type [Sender] with qualifiers [@Default]
at injection point [[field] @Inject com.test.test2.ejb.AppManagerBean.sender]
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:275)
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:244)
at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:107)
at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:127)
at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:346)
at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:331)
at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:366)
at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:83)
at org.jboss.as.weld.services.WeldService.start(WeldService.java:76)
... 5 more
Meine test-Klasse:
package com.highstreetlabs.wlcome.rest;
import com.google.android.gcm.server.Result;
import com.google.android.gcm.server.Sender;
import com.test.test2.ejb.AppManager;
import com.test.test2.ejb.Storage;
import com.test.test2model.Customer;
import com.test.test2.rest.model.ProximityModel;
import com.test.test2.util.EntityManagerProducer;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.json.simple.parser.ParseException;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.ejb.EJB;
import javax.inject.Inject;
@RunWith(Arquillian.class)
public class CustomerCollectionResourceTest {
@Deployment
public static WebArchive createTestArchive() {
return ShrinkWrap.create(WebArchive.class, "test.war")
.addClasses(CustomerCollectionResource.class, EntityManagerProducer.class,
AppManager.class, Storage.class,
ParseException.class, Sender.class)
.addPackage(Customer.class.getPackage())
.addPackage(Result.class.getPackage())
.addPackage(NotFoundException.class.getPackage())
.addPackage(CustomerPhotoResource.class.getPackage())
.addPackage(ProximityModel.class.getPackage())
.addAsResource("import.sql")
.addAsManifestResource(EmptyAsset.INSTANCE, "META-INF/beans.xml")
.addAsManifestResource("test-ds.xml", "test-ds.xml");
}
@Inject
CustomerCollectionResource resource;
@EJB
AppManager manager;
@Test
public void testList() throws Exception {
resource = new CustomerCollectionResource();
resource.list(null);
}
}
AppManagerBean.java
import com.google.android.gcm.server.Constants;
import com.google.android.gcm.server.Message;
import com.google.android.gcm.server.Result;
import com.google.android.gcm.server.Sender;
import com.google.common.base.Strings;
import com.test.test2.json.JacksonObjectMapperProvider;
import com.test.test2.model.*;
import com.test.test2.rest.HttpStatusException;
import com.test.test2.rest.NotFoundException;
import com.test.test2.rest.model.ProximityModel;
import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ejb.Asynchronous;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.persistence.*;
import javax.persistence.criteria.*;
import javax.ws.rs.core.Response;
import java.io.IOException;
import java.util.List;
/**
* Stateless EJB bean containing entire business logic implementation
*/
@Local(AppManager.class)
@Stateless
public class AppManagerBean implements AppManager {
public static final String
GCM_ENTER_ACTION = "enter",
GCM_EXIT_ACTION = "exit",
PARAM_DATA_JSON = "proximityModel",
PARAM_CUSTOMER_ID = "customerId",
PARAM_ACTION = "action";
@Inject
EntityManager em;
@Inject
Sender sender;
....
}
Und schließlich die Klasse für den test CustomerCollectionResource
@Path("customer/")
@RequestScoped
public class CustomerCollectionResource {
final static int CACHEABLE_SECONDS = 0;
@EJB
private AppManager manager;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response list(@QueryParam("email") String email) {
final List<Customer> entities = manager.listCustomers(email);
if(entities.size() == 0)
throw new NotFoundException("There is no any customer");
ListModel<ListItem> result = new ListModel<ListItem>(entities.size());
result.itemType = ListItem.MEDIA_TYPE;
final UriBuilder itemLink = UriBuilder.fromResource(CustomerResource.class);
for (Customer entity : entities) {
result.add(new ListItem(entity.getName(), itemLink.build(entity.getId())));
}
CacheControl cc = new CacheControl();
cc.setMaxAge(CACHEABLE_SECONDS);
cc.setPrivate(true);
return Response.ok(result).cacheControl(cc).build();
}
}
Sender-Produzent
public class GcmSenderProducer {
@Resource String senderId;
@Produces public Sender getSender() {
return new Sender(senderId);
}
}
und Absender? Wo ist der sender? Auch, da Sie mit einem web-Archiv, bin ich nicht sicher, was Ihre app-server ist aber gesetzt beans.xml in WEB-INF. Eine höhere chance hat, richtig ist.
hinzufügen Erzeuger-code. als ich umgezogen bin beans.xml web-inf - es ändert sich nichts.
Server: jboss as 7. Absender-code
Ich glaube nicht, dass es in web-inf etwas ändern würde, aber das wird als der am besten geeignete Ort, um es zu setzen. Können Sie versuchen explizit hinzufügen
Vielleicht haben die producer-Methode der Klasse hat eine Bohne sein? Versuchen Sie, es
hinzufügen Erzeuger-code. als ich umgezogen bin beans.xml web-inf - es ändert sich nichts.
Server: jboss as 7. Absender-code
Ich glaube nicht, dass es in web-inf etwas ändern würde, aber das wird als der am besten geeignete Ort, um es zu setzen. Können Sie versuchen explizit hinzufügen
GcmSenderProducer
zu Ihrem Archiv? Da alle Ihre package-Namen sind entfernt, es ist schwer zu sagen, ob es aufgenommen wird. Beachten Sie, dass Sie noch ein seltsames Verhalten, da Sender
ist wahrscheinlich eine externe lib, aber Sie sind einschließlich in Ihren KRIEG.Vielleicht haben die producer-Methode der Klasse hat eine Bohne sein? Versuchen Sie, es
@Stateless
oder so
InformationsquelleAutor milgoff | 2013-07-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, ich denke auch, dass die GcmSenderProducer fehlt, so dass die Absender-Klasse kann nicht injiziert werden propperly da es aussieht wie es hat keine no-arg Konstruktor und ich denke, die Konstruktor.
InformationsquelleAutor shillner