Re: Xupdate throws namespace-related NPE

Andy Putnins <[email protected]> Sat, 27 Dec 2008 12:19:49 -0600
Newsgroups gmane.text.xml.xindice.user
Message-ID <[email protected]>
I guess this boils down to the question of how namespaces are handled by 
Xupdate.

I tried this same xupdate modification on an eXist database. It doesn't 
throw a Null Pointer exception, but instead it ignores the entire 
modification. The only way I can get it to apply the modification is by 
removing both of the default namespace attributes 
(xmlns="http://lett.com/ns/netconf/server/1.0" on the <root> element and 
xmlns="lett.com/example" on the <top> element).

I would really appreciate it if someone could explain what is going on here.

    - Andy

Andy Putnins wrote:
> I've tried to track this down with the Eclipse debugger attached to the Tomcat degug port, 
> but I'm stuck  because I can't find the source for org.xmldb.xupdate.lexus.XUpdateQueryImpl. 
> Where are the sources for the org.xmldb.xupdate.lexus.* packages which Xindice extends?
>
> The issue appears to be that my default namespace, "lett.com/example" is stored in the "namespaces"
> HashMap within org.xmldb.xupdate.lexus.XUpdateQueryImpl with a *null* prefix key instead of a 
> zero-length string (""). The debugger shows the contents of "namespaces" as:
>
> {null=lett.com/example, urn=urn:ietf:params:xml:ns:netconf:base:1.0, xu=http://www.xmldb.org/xupdate}
>
> org.apache.xindice.xml.NamespaceMap.getContextNode() throws a NPE at line 63 because pfx is null:
>                 if (pfx.equals("")) {...}
>
> I can't see how the "namespaces" hashmap is constructed without the source.
>
> 	- Andy
>
> On Thu, 25 Dec 2008 12:38:43 -0600  Andy Putnins wrote:
>  > I am trying to execute an XUpdate transaction against a document, 
>  > and getting a null pointer exception. Any ideas what the problem
>  > might be?
>  > 
>  > Document in DB:
>  > 
>  > <?xml version="1.0" encoding="utf-8"?>
>  > <root xmlns="http://lett.com/ns/netconf/server/1.0"><top xmlns="lett.com/example" /></
>      root>
>  > 
>  > Xindice log:
>  > 
>  > INFO: [http-8888-1] '/db/netconf' Query document candidate, query: <?xml version
>  > ="1.0" encoding="UTF-8"?>
>  > <xu:modifications xmlns:xu="http://www.xmldb.org/xupdate" version="1.0">
>  > 
>  >     <xu:insert-after select="/top">
>  >         <interface xmlns="lett.com/example" xmlns:urn="urn:ietf:params:xml:ns:ne
>  > tconf:base:1.0">
>  >           <name>Ethernet0/0</name>
>  >           <mtu>1500</mtu>
>  >         </interface>
>  >     </xu:insert-after>
>  > 
>  > </xu:modifications>
>  > Dec 25, 2008 12:08:50 PM org.apache.xindice.core.xupdate.XUpdateQueryResolver$XU
>  > pdateQuery execute
>  > WARNING: ignored exception
>  > java.lang.NullPointerException
>  > 	at org.apache.xindice.xml.NamespaceMap.getContextNode(NamespaceMap.java:
>  > 63)
>  > 	at org.apache.xindice.core.xupdate.XUpdateImpl.execute(XUpdateImpl.java:
>  > 99)
>  > 	at org.apache.xindice.core.xupdate.XUpdateQueryResolver$XUpdateQuery.exe
>  > cute(XUpdateQueryResolver.java:141)
>  > 	at org.apache.xindice.core.xupdate.XUpdateQueryResolver.query(XUpdateQue
>  > ryResolver.java:83)
>  > 	at org.apache.xindice.core.query.QueryEngine.query(QueryEngine.java:126)
>  > 	at org.apache.xindice.core.Collection.queryDocument(Collection.java:1291
>  > )
>  > 	at org.apache.xindice.server.rpc.messages.Query.execute(Query.java:58)
>  > 	at org.apache.xindice.server.rpc.RPCMessageInterface.run(RPCMessageInter
>  > face.java:49)
>  > 	at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source)
>  > 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
>  > sorImpl.java:25)
>  > 	at java.lang.reflect.Method.invoke(Method.java:597)
>  > 	at org.apache.xmlrpc.Invoker.execute(XmlRpcServer.java)
>  > 	at org.apache.xmlrpc.XmlRpcServer$Worker.executeInternal(XmlRpcServer.ja
>  > va)
>  > 	at org.apache.xmlrpc.XmlRpcServer$Worker.execute(XmlRpcServer.java)
>  > 	at org.apache.xmlrpc.XmlRpcServer.execute(XmlRpcServer.java)
>  > 	at org.apache.xmlrpc.XmlRpcServer.execute(XmlRpcServer.java)
>  > 	at org.apache.xindice.server.XindiceServlet.doPost(XindiceServlet.java:9
>  > 2)
>  > 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
>  > 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>  > 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
>  > icationFilterChain.java:290)
>  > 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
>  > ilterChain.java:206)
>  > 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
>  > alve.java:233)
>  > 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
>  > alve.java:191)
>  > 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
>  > ava:128)
>  > 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
>  > ava:102)
>  > 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
>  > ve.java:109)
>  > 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
>  > a:286)
>  > 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
>  > :845)
>  > 	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
>  > ss(Http11Protocol.java:583)
>  > 	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:44
>  > 7)
>  > 	at java.lang.Thread.run(Thread.java:619)
>  > 
>  > 
>  > 	- Andy
>  > 
>
>