Servlets Servlet是';启动时未加载

Servlets Servlet是';启动时未加载,servlets,deployment,jboss,maven-plugin,sip,Servlets,Deployment,Jboss,Maven Plugin,Sip,我试图通过SIPServlet初始化一些类。为此,我在mss-2.0.0.FINAL-jboss-as-7.1.2服务器上使用了sip.xml Sip.xml: <?xml version="1.0" encoding="UTF-8"?> <sip-app xmlns="http://www.jcp.org/xml/ns/sipservlet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

我试图通过SIPServlet初始化一些类。为此,我在mss-2.0.0.FINAL-jboss-as-7.1.2服务器上使用了sip.xml

Sip.xml:

<?xml version="1.0" encoding="UTF-8"?>  
    <sip-app xmlns="http://www.jcp.org/xml/ns/sipservlet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
      xsi:schemaLocation="http://www.jcp.org/xml/ns/sipservlet" xmlns:javaee="http://java.sun.com/xml/ns/javaee"  
      xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.1">  


      <app-name>service.ngsi.multimediaconference</app-name>  


      <servlet-selection>  
      <servlet-mapping>  
      <servlet-name>multimedia-conference</servlet-name>  
      <pattern>  
      <equal>  
      <var>request.method</var>  
      <value>INVITE</value>  
      </equal>  
      </pattern>  
      </servlet-mapping>  
      </servlet-selection>  


      <servlet>  
      <servlet-name>multimedia-conference</servlet-name>  
      <servlet-class>com.abc.multimediaconference.ServletSipMultimediaConference</servlet-class>  
      <load-on-startup>1</load-on-startup>  
      </servlet>  


      <session-config>  
      <session-timeout>120</session-timeout>  
      </session-config>  
    </sip-app>  
之后,我的模块可以使用,REST通信也可以工作,但是启动时通过servlet初始化的所有变量/对象都是空的


有人有想法吗?

SipServlet主要初始化一些对象

ServletSIPMultiMediaConference.java:

    @javax.servlet.sip.annotation.SipServlet
public class ServletSipMultimediaConference extends SipServlet {
    ...
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        ctx = config.getServletContext();

        System.out.println("Init SIP Servlet!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

        SipFactory sipFactory = (SipFactory) getServletContext().getAttribute(
                SipServlet.SIP_FACTORY);
        if (sipFactory == null) {
            getServletContext().log("SIP Factory is null");
        } else {
            getServletContext().log("SIP Factory set.");
        }
        ContextManager.getInstance().setSipFactory(sipFactory);

        getServletContext().log("SipServlet MultimediaConference initialized.");

        configureThirdPartyCallModule();
    }
...
}
如果我试图邀请参与者参加会议,我会收到NullPointerException,因为我的SipFactory为null

MultimediaConferenceImpl.java:

@POST
@Path("/inviteParticipant")
@Override
public void inviteParticipant(@QueryParam("sessionId") String sessionId,
        @QueryParam("callSessionIdentifier") String callSessionIdentifier,
        @QueryParam("participant") String participant) throws PolicyException,
        ServiceException {

    CallSessionConference conferenceSession = getConferenceSession(null,
            callSessionIdentifier);
    if (conferenceSession == null)
        throw new ServiceException("No conference found using id: "
                + callSessionIdentifier);

    conferenceSession.inviteParticipant(participant);
}
这导致以下例外情况:

Servlet.service() for servlet de.fhg.fokus.ngni.broker.sip.multimediaconference.JaxRsActivator threw exception: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException
    at org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:340) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:214) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:190) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:540) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:502) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:119) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) [resteasy-jaxrs-2.3.3.Final.jar:]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.1.Final.jar:1.0.1.Final]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.16.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.16.Final.jar:]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.16.Final.jar:]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.16.Final.jar:]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.2.Final.jar:7.1.2.Final]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.16.Final.jar:]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.16.Final.jar:]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.16.Final.jar:]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.16.Final.jar:]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.16.Final.jar:]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) [jbossweb-7.0.16.Final.jar:]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) [jbossweb-7.0.16.Final.jar:]
    at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_25]
Caused by: java.lang.NullPointerException
    at de.fhg.fokus.ngni.broker.sip.thirdpartycall.Call.<init>(Call.java:100) [classes:]
    at de.fhg.fokus.ngni.broker.sip.thirdpartycall.CallSessionThirdParty.createCallee(CallSessionThirdParty.java:141) [classes:]
    at de.fhg.fokus.ngni.broker.sip.thirdpartycall.CallSessionThirdParty.<init>(CallSessionThirdParty.java:104) [classes:]
    at de.fhg.fokus.ngni.broker.sip.multimediaconference.CallSessionConference.inviteParticipant(CallSessionConference.java:96) [classes:]
    at de.fhg.fokus.ngni.broker.sip.multimediaconference.MultimediaConferenceImpl.inviteParticipant(MultimediaConferenceImpl.java:242) [classes:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_25]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_25]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_25]
    at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_25]
    at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:167) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:211) [resteasy-jaxrs-2.3.3.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:525) [resteasy-jaxrs-2.3.3.Final.jar:]
    ... 19 more
ContextManager是一个帮助器类:

public class ContextManager {

    private SipFactory factory;
//  private BundleContext bundleContext;

    private static ContextManager cm = new ContextManager();

    public static ContextManager getInstance() {
        return cm;
    }

    public SipFactory getSipFactory() {
        return factory;
    }

    public void setSipFactory(SipFactory factory) {
        this.factory = factory;
    }
}

我在调试级别的完整日志如下:

您说问题在于SipFactory为空。 但是您发布的代码从未初始化SipFactory。 请看ServletSipMultimediaConference.init()方法。 您只需检查SipFactory是否为空,但不初始化它:

public class ServletSipMultimediaConference extends SipServlet {
...
@Override
public void init(ServletConfig config) throws ServletException {
    ...
    SipFactory sipFactory = (SipFactory)getServletContext()
        .getAttribute(SipServlet.SIP_FACTORY);
    if (sipFactory == null) {
        getServletContext().log("SIP Factory is null");
        //  -->  Maybe set up a new SIP Factory here?!  <--
    } else {
        getServletContext().log("SIP Factory set.");
    }
    ContextManager.getInstance().setSipFactory(sipFactory);
    ...
}
}
公共类ServletSipMultimediaConference扩展了SipServlet{
...
@凌驾
public void init(ServletConfig config)抛出ServletException{
...
SipFactory SipFactory=(SipFactory)getServletContext()
.getAttribute(SipServlet.SIP_工厂);
if(sipFactory==null){
getServletContext().log(“SIP工厂为空”);

//-->可能在这里建立一个新的SIP工厂?!您也可以为org.mobicents类别提供调试日志吗?似乎您的init方法甚至没有被调用


我看到SipServlet在SIP.xml中被定义为注释,注释可能优先于此处。您是否尝试将loadOnStartup=1添加到@javax.Servlet.SIP.annotation.SipServlet注释中


当部署应用程序时,init method logging语句应该在启动时的日志中显示

我发现了问题。这是maven/a pom.xml失败!我忘记将以下条目放入我的maven插件配置中:
WebContent


maven战争插件
2.2
网络内容
假的

请看“谢谢”,但这对我没有多大帮助。无论我使用的是0还是正整数,这都无关紧要。servlet在启动时根本没有初始化。在进行SIP或HTTP调用时,请共享应用程序的代码和调试日志,因为很难从您输入的信息中识别出哪里出了问题d从未被调用,我也不知道为什么。我不确定“为org.mobicents类别提供调试日志”需要什么。我还尝试了loadOnStartup=0,结果相同。我如何才能将loadOnStartup添加到注释中?@javax.servlet.sip.annotation.SipServlet(loadOnStartup=1)我只尝试了注释(loadOnStartup)w/o sip.xml。还有sip.xml w/o注释和两者。没有任何效果!在部署时仍然没有调用servlet的init()。请在上打开一个问题,并附加一个复制您的问题的应用程序,以便我们可以查看它servlet和设置工厂背后的一些“魔法”。我的问题是,init()是Method从未被触发。我无法通过调试和断点访问它,甚至系统操作系统或日志也不会出现在某个地方。这个问题旨在找出为什么我的servlet在部署时没有被触发!
public class ContextManager {

    private SipFactory factory;
//  private BundleContext bundleContext;

    private static ContextManager cm = new ContextManager();

    public static ContextManager getInstance() {
        return cm;
    }

    public SipFactory getSipFactory() {
        return factory;
    }

    public void setSipFactory(SipFactory factory) {
        this.factory = factory;
    }
}
public class ServletSipMultimediaConference extends SipServlet {
...
@Override
public void init(ServletConfig config) throws ServletException {
    ...
    SipFactory sipFactory = (SipFactory)getServletContext()
        .getAttribute(SipServlet.SIP_FACTORY);
    if (sipFactory == null) {
        getServletContext().log("SIP Factory is null");
        //  -->  Maybe set up a new SIP Factory here?!  <--
    } else {
        getServletContext().log("SIP Factory set.");
    }
    ContextManager.getInstance().setSipFactory(sipFactory);
    ...
}
}
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <warSourceDirectory>WebContent</warSourceDirectory>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>