3

私はシンプルなJAX-WSアプリケーションを開発しています。私は石鹸の上にそのaddClient(クライアントクライアント)メソッドを呼んでいるときJAX-WSで@InjectがNullPointerExceptionを発生する

は、私のWebサービスエンドポイントの一つは、NPEを上げる注射したオブジェクト

@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); 
    }  
} 

を持っています。

私の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はまだ残っています。 2つのエンドポイントを持つ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();としてそれを宣言した場合でも、それは私が私のコードを形成することにしたい方法ではありません。どのように私は、この問題を解決することができますしてください任意のアイデアを

<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> 

私のpom.xmlはわずか2依存関係を持っていますか?

+0

使用 JAXWS-RT 2.1.3 のjavax 7.0

+0

は、[このSOポスト](HTTPを見てみたJavaEE-API:// stackoverflowの.com/questions/5661022/inject-ed-attribute-remaining-null?rq = 1)。このユーザーにも同じ問題があったようです。多分あなたを助けるでしょう。 ** EDIT:**あなたの 'clientDAO.addClient(client);'を 'else'ブロックに入れてみましょう。それ以外の場合は、 'clientDAO == null'でもコードが実行されます。 – QBrute

+1

Stacktraceも投稿できますか? –

答えて

0

基本的に、WEB-INFフォルダからsun-jaxws.xmlを削除する必要がありました。私は何が起こったのか分かりませんが、それは間違いなく影響を与えました - 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

たとえば

:?WildFly またはhttp://localhost:8080/clients?wsdlを使用してhttp://localhost:8080/simplesoap/clients?wsdl com.sun.xml.ws:私のpom.xmlはわずか2依存関係を持っているTomEE

関連する問題