2010-01-05 45 views
12

Làm cách nào để xóa thuộc tính class = ”Something” trong Xstream.Xstream: loại bỏ thuộc tính lớp

Tôi sử dụng Xstream với chú thích

+0

Bạn nhận được class = "..." chính xác ở đâu? Bạn có thể đăng một số XML được tạo ra không? –

+1

http://markmail.org/message/t33x7hswlwsk766i – Cherian

Trả lời

13

Thực tế vấn đề không rõ ràng như được nói đến. Tôi đoán là bạn đang sử dụng một bộ sưu tập phi tiêu chuẩn hoặc sử dụng một trường của một loại giao diện mà XStream cần lưu trữ lớp thực tế.

Trong trường hợp thứ hai bạn chỉ có thể sử dụng bí danh:

xstream.alias("field name", Interface.class, ActualClassToUse.class);

Xem http://markmail.org/message/gds63p3dnhpy3ef2 để biết thêm chi tiết.

+0

Tôi gặp vấn đề tương tự và điều này hóa ra là vấn đề. Tôi đã lo lắng rằng tôi sẽ phải sử dụng bí danh javacode thay vì chú thích, nhưng chúng bật ra để bổ sung cho nhau một cách độc đáo vì tôi có thể xác định lớp thực tế để sử dụng khi chạy. – Caoilte

+0

Có phương án thay thế oxm mùa xuân nào không? – coffeMug

1

Bạn có thể đưa ra một số ví dụ về đầu ra không? Tôi nghĩ điều này thường xảy ra khi sử dụng Bộ sưu tập. Nếu không nhìn thấy đầu ra, tôi đoán tốt nhất là bạn cần phải đăng ký bí danh:

xstream.alias("blog", Blog.class); 

Xem http://x-stream.github.io/alias-tutorial.html cho sâu hơn vùng phủ sóng. Một lần nữa, dán vào một số đầu ra mẫu.

2

Sử dụng một cái gì đó thuộc loại này để loại bỏ các lớp thuộc tính hoàn toàn chứ không phải là răng cưa nó với cái gì khác:

private String generateResponse(final XStream xStream) 
{ 
    StringWriter writer = new StringWriter(); 
    xStream.marshal(this, new PrettyPrintWriter(writer) { 
     @Override 
     public void addAttribute(final String key, final String value) 
     { 
      if (!key.equals("class")) 
      { 
       super.addAttribute(key, value); 
      } 
     } 
    }); 
    return writer.toString(); 
} 
18

Tôi đọc mã của nó và thấy nếu lớp học của bạn là không mapper.defaultImplementationOf(fieldType), nó sẽ thêm các thuộc tính lớp mặc định cho bạn, trừ khi tên thuộc tính lớp là null;

Vì vậy, thiết lập này có thể loại bỏ các class =”Something” thuộc tính

xstream.aliasSystemAttribute(null, "class"); 
+0

Có phương án thay thế oxm mùa xuân nào không? – coffeMug

1

Thuộc tính này được thể hiện, ít nhất, khi nó không rõ ràng mà lớp sẽ được sử dụng. Việc sử dụng giao diện là một ví dụ. Trong các trường hợp như vậy Bạn có thể thử:

xStream.addDefaultImplementation(YourDefaultImplementation.class, YourInterface.class); 

.

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