2013-08-12 25 views
6

Tôi có tệp nhị phân có chứa các đối tượng Tuần tự Java (là đối tượng giá trị), nhưng tôi không có quyền truy cập vào Lớp đã được sắp xếp để tạo các đối tượng. Nếu không có tệp lớp, JVM không cho phép tôi đọc các đối tượng với objectInputStreamInstance.readObject() và ném đúng java.lang.ClassNotFoundException.Cách lấy trạng thái đối tượng từ các đối tượng Java được tuần tự hóa mà không cần tệp lớp học

Có thư viện nào có thể giúp trích xuất dữ liệu ở định dạng XML hoặc định dạng khác không? Ví dụ, nếu lớp người dưới đây là tuần tự và được lưu trữ trong một tập tin, tôi muốn trích xuất dữ liệu từ nó:

Lớp Definition

class Person implements Serializable { 
    int age; 
    String name; 
    public Person(int age, int name) { 
    this.age = age; 
    this.name = name; 
    } 
} 

buộc Extraction Format (không có quyền truy cập vào các lớp tập tin)

<Person> 
    <age>10</age> 
    <name>Name</name> 
</Person> 

tôi cũng đã kiểm tra sau nhưng đã không nhận được những gì tôi đang tìm kiếm:

  1. Xstream (http://x-stream.github.io/) cần quyền truy cập vào đối tượng Java để tạo XML từ đối tượng đó. Tuy nhiên, tôi không thể tạo các đối tượng cho muốn tệp lớp.
  2. Serialysis dường như là rất cũ https://weblogs.java.net/blog/emcmanus/archive/2007/06/disassembling_s.html

Cảm ơn bạn đã giúp đỡ của bạn.

Kính trọng, Gursev

+0

Một số ý tưởng hay ở đây, có vẻ như hầu hết các câu trả lời đều không yêu cầu tệp lớp: http://stackoverflow.com/questions/181448/gui-tool-to-browse-java-serialized-objects – lreeder

+0

@Ireeder Cảm ơn bạn đã câu trả lời của bạn. Tôi đã xem xét liên kết đó trước khi đặt câu hỏi đó và nó trỏ đến một sản phẩm/phần mềm và không phải là thư viện mà tôi đang tìm kiếm. –

Trả lời

5

Kiểm tra jdeserialize. Nó có một chế độ dòng lệnh, nhưng cũng là a reasonably well documented API. Về tự động tái tuần tự hóa thành XML? Tôi không nghĩ vậy. Có quá nhiều cách để thực hiện nó. Có thể bạn sẽ cần trải qua 2 bước riêng biệt này. jdeserialize có thể hữu ích trong việc đảo ngược kỹ thuật các lớp (tạo mã nguồn java), đặc biệt khi điều này được yêu cầu bởi nhiều công cụ tuần tự hóa XML.

Bây giờ, nếu các lớp học ban đầu đã không sử dụng cơ chế serialization mặc định (bằng cách ghi đè readObject hoặc similars) hoặc đã sử dụng số liệu obfuscation/kỹ thuật mã hóa (như gói các đối tượng trong javax.crypto.SealedObject và/hoặc java.security.SignedObject), sau đó cơ hội thành công là Ít hơn và ít hơn.

+1

AFAIK, đối tượng được tuần tự hóa chứa các chi tiết về tên trường, loại trường và thông tin khác. Nguồn: 1. http://www.javaworld.com/community/node/2915 2. http://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html –

+0

@GursevKalra Cảm ơn rất nhiều. Tôi đã thay đổi câu trả lời của mình hoàn toàn. Những kinh nghiệm trước đây của tôi với các đối tượng serialized của bên thứ ba đã rất tệ. Đến mức tôi đã quên cơ chế mặc định trong suốt như thế nào. –

+0

cảm ơn bạn đã cập nhật. jdeserialize trông đầy hứa hẹn. Tôi sẽ tiếp tục mở câu hỏi để xem liệu có khả năng bổ sung/đá quý hay không. –

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