You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by AlexP <ac...@standardset.com> on 2013/08/24 21:32:16 UTC

Accessing ws:// in embedded ActiveMQ 5.8.0 produces NullPointerException

Dear ActiveMQ Users:

I am trying to embed the broker in my Java web application.  Using Spring
@Configuration, I create a broker and register some connectors:

        //Create Broker
        final BrokerService broker = new BrokerService();

        //Create the network connector
        //
        final TransportConnector
            tcpConnector =
                broker.addConnector(tcpURI),
            stompConnector =
                broker.addConnector(stompURI),
            wsConnector =
                broker.addConnector("ws://0.0.0.0:61633");

        //Start broker
        broker.start();

Broker starts without any exceptions or issues.  The TCP connector seems to
be working OK.  I am able to connect and send messages.  However, when I try
to connect to the ws://localhost:61633 via a WebSocket, I get this
exception:

12:17:31.494 engine [qtp131915922-54] WARN  ServletHandler - /
java.lang.NullPointerException: null
	at
org.apache.activemq.transport.ws.StompServlet.doGet(StompServlet.java:47)
~[activemq-optional-5.7.0.jar:5.7.0]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
~[servlet-api-3.0.20100224.jar:na]
	at
org.eclipse.jetty.websocket.WebSocketServlet.service(WebSocketServlet.java:86)
~[jetty-websocket-8.0.0.M2.jar:8.0.0.M2]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
~[servlet-api-3.0.20100224.jar:na]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:652)
~[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:447)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1038)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:374)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:972)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at org.eclipse.jetty.server.Server.handle(Server.java:363)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:483)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:920)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:982)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:627)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:51)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
[jetty-all-server-7.6.7.v20120910.jar:8.0.0.M2]
	at java.lang.Thread.run(Thread.java:680) [na:1.6.0_41]

The error occurs in this method:

    protected void doGet(HttpServletRequest request, HttpServletResponse
response)
        throws ServletException ,IOException  {
       
getServletContext().getNamedDispatcher("default").forward(request,response);
    }

It turns out, that  getServletContext().getNamedDispatcher("default")
returns a Null, so the forward gets a NullPointerException.

It seems that performing a broker.start(), does not start something, or
perhaps I am missing some configuration.  I am not quite sure.  It feels
like my Servlet context is not properly initialized or something when
broker.start() is called.

My application is a Web Application (.war) hosted by Jetty.  So, it does
seem that I am starting a Jetty inside of Jetty, but this should not be an
issue due to class-path isolation (I think).

Obviously, I tried this in stand alone version of ActiveMQ and it works
perfectly.  So, something is missing from my startup in an embedded
configuration.

I know this is a very specific question, but I would love to have the broker
running embedded and handling the ws:// requests.

If you have some experience with this, please let me know what I could try
to work around this issue.

Thanks.
-AP_

     






--
View this message in context: http://activemq.2283324.n4.nabble.com/Accessing-ws-in-embedded-ActiveMQ-5-8-0-produces-NullPointerException-tp4670657.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.