2011-12-15 8 views
1

glassfish 3.x.xのJAX-WSエンドポイントで次のCDIが動作しないのはなぜですか?エンドポイントからサービスにアクセスするときは、NPEを取得します。JAX-WSエンドポイントのCDI注入が機能しないNPE

@WebService 
public class JaxWsTestEndpoint { 

    @Inject 
    private MyService service; 

    @WebMethod 
     public String sayHello(String name) { 
     System.out.println("injected service:" + service); 
     service.callService(); 
     return "Hello, " + name + "."; 
    } 
} 

次のようにクラス "サービス" が定義されています

@Named("myService") 
public class MyService { 
    public MyService() { 
     System.out.println("init myService."); 
    } 

    public void callService() { 
      System.out.println("calling Service."); 
    } 
} 

私はWEB-INF内の空のbeans.xmlファイルを持っているに。私は完全な空の内容と空でそれを試しました

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> 

</beans> 

タグ。しかし、何らかの形で、JAX-WSエンドポイントのサービスフィールドは、デプロイ後およびWebサービス要求の受信中にNULLのままであり、その結果、サービスを呼び出すときにNPEが発生します。私はここで何が欠けていますか?

+0

それはそれはGlassFishのバグだことも可能です。私が持っていると思いますそれを試してみてください。スペックによれば、それはうまくいくはずです。あなたはWARまたはEARを配備していますか? – LightGuard

答えて

1

WEB-INFディレクトリからsun-jaxws.xmlを削除できます。この方法は私を助けました!

1

はい私は、sun-jaxws.xmlを削除し、WSServletの代わりにwebserviceを直接指し示すweb.xmlを変更することで動作させました。

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd ">

<!-- This listener parses a sun specific configuration file (sun-jaxws.xml), which provides the web service 
endpoints and connects the WSServlet instance to the services' implementation classes --> 
<!--<listener> 
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> 
</listener> --> 

<!-- Delegate requests whose URLs end with the path '/StakeholderWebService' to a WSServlet instance provided by container, which in turn is linked to the JWS runtime --> 
<servlet> 
    <servlet-name>StakeholderWebService</servlet-name> 
<!--  <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> --> 
    <servlet-class>com.werner.stakeholder.webservices.StakeholderWebServiceImpl</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>StakeholderWebService</servlet-name> 
    <url-pattern>/stakeholderWebService</url-pattern> 
</servlet-mapping> 
<session-config> 
    <session-timeout>120</session-timeout> 
</session-config> 

関連する問題