3

Я разрабатываю простое приложение JAX-WS.@Inject вызывает NullPointerException в JAX-WS

Один из моих конечных точек веб-служб Досталось впрыскивается объект

@WebService(
    endpointInterface = "com.kravchenko.service.ClientService", 
    targetNamespace = "http://com.kravchenko/wsdl" 
    ) 
@Named("clientServiceImpl") 
public class ClientServiceImpl implements ClientService { 

@Inject 
ClientDAO clientDAO; 


public void addClient(Client client) { 
    if (clientDAO == null) { 
     System.out.println("NULL CLIENTDAO"); 
    } 
    clientDAO.addClient(client); 
    }  
} 

Когда я звоню его метод addClient (клиент-клиент) над мылом поднимает NPE.

Мой DAO также очень просто и выглядит как

@Singleton 
public class ClientDAO { 

public Map<Long,Client> clients= new ConcurrentHashMap<Long, Client>();; 

public void addClient(Client client) { 
    clients.put(client.getId(),client); 
    } 
} 

Я попытался типа впрыска для инкубационного инъекции, но он не работает, тоже. Я также попытался удалить @Singleton и/или использовать другие аннотации, такие как @ManagedBean или @Stateful, однако NPE все еще остается. У меня есть sun-jaxws.xml с двумя конечными точками. У меня есть beans.xml в моем проекте:

<?xml version="1.0" encoding="UTF-8"?> 
<beans 
xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
        http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" 
bean-discovery-mode="all"> 
</beans> 

Все методы DAO работать, хотя, если я объявляю его как CliendDAO dao = new ClientDAO(); Но это не так, как я хочу, чтобы мой код, который будет сформирован.

мой pom.xml получил только 2 зависимостей:

<dependency> 
    <groupId>com.sun.xml.ws</groupId> 
    <artifactId>jaxws-rt</artifactId> 
    <version>2.1.3</version> 
</dependency> 
<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>7.0</version> 
</dependency> 

Любая идея, как я могу решить эту проблему, пожалуйста?

+0

мой pom.xml получил только 2 зависимостей: com.sun.xml.ws JAXWS-RT 2.1.3 javax JavaEE-апи 7,0

+0

смотреть на [это] SO пост (HTTP: // StackOverflow .com/вопросы/5661022/инъекционный-эд-атрибут-останки-нуль? RQ = 1). Кажется, что у этого пользователя была такая же проблема. Может быть, это поможет вам. ** РЕДАКТИРОВАТЬ: ** и попытаться поместить ваш 'clientDAO.addClient (клиент);' в блок 'else'. В противном случае этот код будет выполнен, даже если 'clientDAO == null'. – QBrute

+1

Не могли бы вы также опубликовать stacktrace? –

ответ

0

В принципе, мне пришлось удалить sun-jaxws.xml из папки WEB-INF. Я не знаю, что произошло, но это определенно повлияло - CDI стал включен. Теперь мой web.xml выглядит следующим образом:

 <?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 

    <display-name>soap</display-name> 
    <listener> 
     <listener-class> 
      com.sun.xml.ws.transport.http.servlet.WSServletContextListener 
     </listener-class> 
    </listener> 

    <servlet> 
    <servlet-name>wsdl</servlet-name> 
    <servlet-class> 
     com.sun.xml.ws.transport.http.servlet.WSServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>wsdl</servlet-name> 
     <url-pattern>/clients</url-pattern> 
    </servlet-mapping> 

</web-app> 

В заказ идет получить ваш проект WSDL вы можете следовать следующей ссылке: /yourServiceName

WSDL

Например: http://localhost:8080/simplesoap/clients?wsdl использованием WildFly или http://localhost:8080/clients?wsdl используя TomEE

Смежные вопросы