2011-11-04 28 views
9

Tôi đang cố trích xuất một nút XML từ tham chiếu URI. Tham chiếu URI này được tạo bởi một người ký XAdES4j và có thể tham chiếu một nút trong cùng một tệp XML hoặc trong cùng một thư mục.Cách tải tài nguyên bên ngoài bằng URI tham chiếu trong Java XML

Tôi đã hy vọng rằng tải tài liệu tham khảo sẽ là đơn giản như

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

Tuy nhiên điều này chỉ mang lại cho tôi một NullPointerException không có thông điệp hữu ích. Cả hai đối số đều không null và trong một trường hợp đơn giản thuộc tính URI là "data.xml" và URI cơ sở referenceDoc là "/Users/ryan/.../test-files/signature.xml. Data.xml nằm trong kiểm tra các tập tin cùng một thư mục.

URI có thể trỏ đến một yếu tố trong một tập tin, vì vậy tôi hy vọng có một bộ nạp tài liệu tham khảo trong đó đề với điều đó phức tạp đối với tôi. tôi đã bỏ lỡ ?!

gì chỉnh sửa:

Các tài liệu tham khảo tôi đang cố gắng để tải là:

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

Stacktrace của NullPointerException là gì? Có thể đó là lỗi nội bộ. –

+0

Bạn có thể đưa ra một ví dụ về URI mà bạn đang sử dụng không? – heneryville

+0

Câu hỏi, URI có được nhập dưới dạng liên kết ở đầu xml không? nếu như vậy thì nó sẽ có thể truy cập như Xalan/Xerces tự động nhập các tài liệu tham khảo, - tôi thấy rằng khi tôi đã làm một số xsl với các tập tin riêng biệt làm cho toàn bộ. - Ngoài ra nếu URI có trong tệp biểu mẫu: // tại sao không cố tạo Tệp tham chiếu và sau đó mở nó dưới dạng tài liệu mới? –

Trả lời

1

Tổng số đâm trong bóng tối (bạn thực sự cần phải dán stacktraces ...), nhưng ở đây đi.

Tôi đã xem nhanh tại nguồn của ResourceResolver tại địa chỉ: http://java2s.com/Open-Source/Java-Document/XML/xml-security-1.4.3/org/apache/xml/security/utils/resolver/ResourceResolver.java.htm

tôi có thể nhìn thấy ở đó sẽ là một NullPointerException do một lĩnh vực _resolverVector khởi phi trong ResourceResolver, trừ khi init tĩnh phương pháp () đã được gọi trên ResourceResolver. Phía trên phương thức init(), có một chú thích:

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

Bản thân ResourceResolver không xuất hiện để kích hoạt cuộc gọi đó - bạn có làm điều đó không? Nếu không, bạn nên thử nó, trước khi sử dụng bất kỳ công cụ org.apache.xml.security nào.

0

Thứ nhất y ou cần phải hiểu chính xác những gì đang gây ra NullPointerException vì vậy tôi sẽ đề nghị tách mã này ra để bạn có thể thấy nơi giá trị null là.

+0

Đây thực sự không phải là câu trả lời nhiều như một bình luận – heneryville

+0

Không phải là một câu trả lời rất hữu ích - đó là một lệnh duy nhất, trong đó cả hai phần tử đều không được thông qua khi tham số không phải là null. – spikeheap

Các vấn đề liên quan