2014-11-12 7 views
4

Java EE에서 JAX-WS 서비스를 구현하는 동안 다음 예외가 발생합니다 7 응용 프로그램.JAX-WS 서비스에 액세스하는 동안 org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:272)에서 java.lang.NullPointerException이 발생했습니다

Warning: Internal Server error: /Test-war/Test.xhtml 
java.lang.NullPointerException 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:272) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) 
    at java.lang.Thread.run(Thread.java:745) 

예외 메시지는 GlassFish 서버에만 해당됩니다 (4.1 사용).


테스트 시나리오 :

@Named 
@ViewScoped  
public class TestManagedBean implements Serializable 
{ 
    private String test; 
    private static final long serialVersionUID=1L; 

    public TestManagedBean() {} 

    @PostConstruct 
    private void init() { 
     TestBean_Service testBean_Service=new TestBean_Service(); 
     TestBean testBean = testBean_Service.getTestBeanPort(); 
     System.out.println("testBean sum = "+testBean.getSum(5, 10)); 
    } 

    public String getTest() { 
     return test; 
    } 
} 

멤버 변수 test 그냥 쓸모가 :

CDI는 빈을 관리. 이것은 테스트 목적으로 만 사용됩니다. @PostConstruct로 표시 빈의 메소드가 호출 될 수 있도록 XHTML 페이지에서

, 그냥,

<h:outputText value="#{testManagedBean.test}"/> 

과 같이이 test 필드에 액세스 할 수 있습니다.

브라우저의 주소 표시 줄에 적절한 URL을 입력 할 때 예외가 발생합니다.


testBean.getSum(int, int)이 경우 빈이 너무 같은 시험의 이유로 싱글 EJB로 변경 될 때 성공적으로 호출되는 원격 EJB 방법,

import client.web.services.TestBean; 
import client.web.services.TestBean_Service; 
import javax.annotation.PostConstruct; 
import javax.ejb.Singleton; 
import javax.ejb.Startup; 
import javax.ejb.TransactionAttribute; 
import javax.ejb.TransactionAttributeType; 

@Startup 
@Singleton 
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
public class TestManagedBean 
{ 
    public TestManagedBean() {} 

    @PostConstruct 
    private void init() { 
     TestBean_Service testBean_Service=new TestBean_Service(); 
     TestBean testBean = testBean_Service.getTestBeanPort(); 
     System.out.println("testBean sum = "+testBean.getSum(5, 10)); 
    } 
} 

인의 프록시 연관된 원격 EJB에서 실제로 사용 가능한 메소드 getSum(int, int)이 성공적으로 호출되고이를 통해 제공된 두 매개 변수의 합계를 리턴합니다.

XHTML 페이지를 통해 서비스에 액세스 할 때 GlassFish가 java.lang.NullPointerException에 대해 어떻게 생각합니까?

답변

9

이것은 GlassFish 4.1의 버그로, 서버의 grizzly-kernel 구성 요소 (GlassFish Grizzly Embedded Server가 HTTP 요청을 처리함)에 영향을 미칩니다. 이 경우 here${glassfishHome}/glassfish/modules (osgi-cache을 서버를 시작/다시 시작하기 전에 #{glassfishHome}/glassfish/domains/yourDomain 아래에 표시하는 것을 잊지 마세요)와 같이 GlassFish 서버 (4.1)의 nucleus-grizzly-all.jar jar 파일을 바꿔야합니다.

이 게시물 이전에 해당 링크를 방문했지만 GlassFish Server 4.1에 따라 상태가 "해결되었습니다"라는 메시지가 나 다른 것으로 생각되었습니다.

참고 : 누군가 이미 몇 시간 전에 동일한 답변을 게시했지만 신뢰할 수있는 사용자가 아마도 링크 전용 답변을 고려하여 답변을 삭제했습니다. 링크 전용 답변이지만이 경우 서버의 새 항아리를 교체하는 것 이외의 다른 문제를 해결할 방법이 없으며 2014 년 11 월 19 일에이 질문을받은 후에 항아리조차 제공되었습니다. 이 답변이 삭제되지 않기를 바랍니다.

+0

나는 osgi-cache를 가지고 있지 않다. 나는 그와 같은 것을 찾지 못했다. 그러나 그것 대신에, 그것은 작동한다 :-) – Krystian

+0

여러 묶음을 포함하고있는'osgi-cache'의'felix' 폴더는 대개 (우리가'felix' 폴더는 일반적으로 (전체 경로가 보이는 윈도우에 관해서) - C : \ Program Files \ glassfish-4에 위치합니다.1 \ glassfish \ domains \ domain1 \ osgi-cache'에 있습니다. 관리자 권한이 필요하기 때문에'Program Files'에 GlassFish를 설치하지 않습니다. 'felix' 폴더는 서버가 시작/재시작 될 때 자동으로 생성됩니다. – Tiny

+0

일반적으로 모듈 사이에 약간의 비호 환성을 가져올 수있는'C : \ Program Files \ glassfish-4.1 \ glassfish \ domains \ domain1 \ generated' (windows)에있는'generated' 폴더도 삭제합니다. – Tiny