Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
Java 2.0.6
-
None
-
None
Description
Marshaller:sendAttributeToWriter assumes that the Attr instance that's passed in has valid (not null) namespace, it uses DOM Level 2 methods to get namespace, localname and prefix. In case of a DOM Level 1 attribute (as org.apache.xerces.dom.AttrImpl), those methods all return null, which later causes a NPE when the XmlWriterToTree tries to write the attribute:
15:28:53,567 ERROR [stderr] (default task-3) java.lang.NullPointerException 15:28:53,567 ERROR [stderr] (default task-3) at org.apache.xerces.dom.AttrNSImpl.setName(AttrNSImpl.java:87) 15:28:53,567 ERROR [stderr] (default task-3) at org.apache.xerces.dom.AttrNSImpl.<init>(AttrNSImpl.java:74) 15:28:53,568 ERROR [stderr] (default task-3) at org.apache.xerces.dom.CoreDocumentImpl.createAttributeNS(CoreDocumentImpl.java:2147) 15:28:53,568 ERROR [stderr] (default task-3) at com.sun.xml.messaging.saaj.soap.SOAPDocumentImpl.createAttributeNS(SOAPDocumentImpl.java:186) 15:28:53,568 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.XmlWriterToTree.writeAttribute(XmlWriterToTree.java:146) 15:28:53,568 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.Marshaller.sendAttributeToWriter(Marshaller.java:337) 15:28:53,569 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.Marshaller.marshalGenericNode(Marshaller.java:309) 15:28:53,569 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.Marshaller.marshalGenericNode(Marshaller.java:314) 15:28:53,569 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.Marshaller.marshalGenericNode(Marshaller.java:280) 15:28:53,569 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.Marshaller.access$000(Marshaller.java:48) 15:28:53,570 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.Marshaller$14.marshalObject(Marshaller.java:245) 15:28:53,570 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.Marshaller$14.marshalObject(Marshaller.java:241) 15:28:53,570 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.XmlWriterToTree.marshalStructure(XmlWriterToTree.java:186) 15:28:53,570 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.DOMKeyInfo.marshalInternal(DOMKeyInfo.java:179) 15:28:53,571 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.DOMKeyInfo.marshal(DOMKeyInfo.java:164) 15:28:53,571 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignature.marshal(DOMXMLSignature.java:225) 15:28:53,571 ERROR [stderr] (default task-3) at org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignature.sign(DOMXMLSignature.java:330)
I think there should be a check for the actual availability of namespace; if it's not available, Santuario should use Attr:getName() instead of Node:getLocalName().