2011-11-04 8 views
9

Estoy tratando de extraer un nodo XML de una referencia de URI. Esta referencia URI es generada por un firmante XAdES4j, y podría hacer referencia a un nodo dentro del mismo archivo XML, o en la misma carpeta.Cómo cargar recursos externos usando un URI de referencia en Java XML

Tenía la esperanza de que la carga de la referencia podría ser tan simple como

XMLSignatureInput referencedXML = ResourceResolver.resolveStatic(referenceNode.getAttributeNode("URI"), referenceDoc.getBaseURI()); 

Sin embargo, esto sólo me da una NullPointerException sin mensaje útil. Ambos argumentos son no nulos, y en un caso simple, el atributo URI era "data.xml" y el URI baseDoc base era "/Users/ryan/.../test-files/signature.xml. Data.xml reside en el mismo directorio-archivos de prueba.

el URI podría apuntar a un elemento dentro de un archivo, así que estoy esperando que hay un cargador de referencia que se ocupa de que la complejidad para mí. ¿Qué he perdido ?!

edit:

La referencia que estoy tratando de cargar es:

<ds:Reference Id="xmldsig-c6050e36-d9e7-46d9-ac5f-447d1bbb405f-ref0" URI="lote.xml" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
+1

¿Cuál es el stacktrace de NullPointerException? Tal vez es un error interno. –

+0

¿Podría dar un ejemplo del URI que está usando? – heneryville

+0

Pregunta, ¿el URI se importa como un enlace en la parte superior del xml? de ser así, debería ser accesible, ya que Xalan/Xerces auto importa las referencias, - lo vi cuando hice algunos archivos xsl con archivos separados que componen el todo. - Además, si el URI está en el archivo de formulario: // ¿por qué no intenta crear una referencia de archivo y luego abrirla como un nuevo documento? –

Respuesta

1

Puñalada total en la oscuridad (realmente necesita pegar stacktraces ...), pero aquí va.

me dio un rápido vistazo a la fuente de ResourceResolver en: método http://java2s.com/Open-Source/Java-Document/XML/xml-security-1.4.3/org/apache/xml/security/utils/resolver/ResourceResolver.java.htm

puedo ver que va a ser una NullPointerException debido a un campo _resolverVector no inicializado en el ResourceResolver, a menos que el init() estático ya ha sido llamado en ResourceResolver. Por encima del método init(), hay un comentario:

The init() function is called by org.apache.xml.security.Init.init() 

El ResourceResolver en sí no parece desencadenar esa llamada - lo haces? Si no, deberías probarlo, antes de usar cualquiera de las cosas de org.apache.xml.security.

0

primer lugar y Es necesario que comprenda qué causa exactamente la NullPointerException, por lo que le sugiero que separe este código para que pueda ver dónde está el valor nulo.

+0

Esto no es realmente una respuesta tanto como un comentario – heneryville

+0

Tampoco es muy útil: es un solo comando, donde ambos elementos no son pasados ​​nulos ya que los parámetros no son nulos. – spikeheap

Cuestiones relacionadas