Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-954

Null pointer exception when prefixed XML sent to RESTful SERVCIE

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Duplicate
    • 2.0.1
    • 2.2.2
    • Core
    • None

    Description

      I originally sent the following in email to cxf-dev:


      Hi all,

      I've been playing with the RESTful service support and I've come across some issues that really slowed me down I'm describing them here (and their workarounds) in case any users find it useful. I'm also wondering if some of these might be classified as bugs - please advise!

      Here's what happened: based on the docu in the CXF wiki User Guide [1], I developed a RESTful service: everything was going fine until I implemented a PUT method for an update.

      — in play/Contacts.java —
      @Put
      @HttpResource(location="/people/

      {id}

      ")
      void updatePerson(Person person);

      : : :

      Second problem: for some reason CXF insists that the payload document's root element is not prefixed with an XML namespace prefix. For example; the following valid XML results in a server-side NullPointerException.

      <ns2:Person xmlns:ns2="http://play/">
      <age>34</age>
      <email>sdfdfdf</email>
      <firstName>Adrian</firstName>
      <id>42</id>
      <lastName>Trenaman</lastName>
      </ns2:Person>

      To get it to work, I had to re-jig the XML so that Person is not prefixed (see below). I have a feeling that this problem is related to how we inject the id parameter into the Person XML, perhaps using an unqualified X-Path like "Person/id", but am not 100% sure.

      <Person xmlns="http://play/">
      <age>34</age>
      <email>sdfdfdf</email>
      <firstName>Adrian</firstName>
      <id>42</id>
      <lastName>Trenaman</lastName>
      </Person>

      The exception stack trace is:

      29-Aug-2007 09:52:51 org.apache.cxf.binding.http.interceptor.DispatchInterceptor handleMessage
      INFO: Invoking PUT on /people/123
      29-Aug-2007 09:52:51 org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor handleMessage
      INFO: URIParameterInterceptor handle message on path [/people/123] with content-type [null]
      29-Aug-2007 09:52:52 org.apache.cxf.phase.PhaseInterceptorChain doIntercept
      INFO: Interceptor has thrown exception, unwinding now
      java.lang.NullPointerException
      at org.apache.cxf.binding.http.IriDecoderHelper.getElement(IriDecoderHelper.java:345)
      at org.apache.cxf.binding.http.IriDecoderHelper.interopolateParams(IriDecoderHelper.java:295)
      at org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor.mergeParams(URIParameterInInterceptor.java:124)
      at org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor.handleMessage(URIParameterInInterceptor.java:105)
      at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:207)
      at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:73)
      at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:256)
      at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:212)
      at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:54)
      at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
      at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
      at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
      at org.mortbay.jetty.Server.handle(Server.java:313)
      at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
      at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844)
      at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644)
      at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
      at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
      at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
      at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

      Attachments

        Activity

          People

            Unassigned Unassigned
            adrian.trenaman@iona.com Adrian Trenaman
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: