Tôi sử dụng Apache CXF 2.4.2 và khi tôi trả về một số đối tượng từ cơ sở dữ liệu cho người dùng, tôi muốn loại trừ một số thuộc tính (ví dụ, mật khẩu). Làm thế nào tôi có thể làm điều đó mà không cần tạo ra lớp học tạm thời? Có chú thích cho điều này không?CXF: cách loại trừ một số thuộc tính khi đối tượng được gửi qua SOAP?
Trả lời
Theo nhận xét @ tomasz-nurkiewicz tôi nên sử dụng chú thích @XmlTransient
. Nhưng như đã nêu trong tài liệu hướng dẫn
Theo mặc định, nếu @XmlAccessorType trên một lớp vắng mặt, và không ai trong số các lớp siêu của nó được chú thích với @XmlAccessorType, sau đó mặc định sau trên lớp được giả:
@ XmlAccessorType (XmlAccessType.PUBLIC_MEMBER)
đâu XmlAccessType.PUBLIC_MEMBER
có nghĩa là:
mỗi getter công cộng/cặp setter và mỗi pu trường blic sẽ tự động được liên kết với XML, trừ khi được chú thích bởi XmlTransient. Các trường hoặc các cặp getter/setter được riêng tư, được bảo vệ hoặc được mặc định thành truy cập chỉ gói chỉ được ràng buộc với XML khi chúng được chú thích một cách rõ ràng bằng các chú thích JAXB thích hợp.
Vì vậy, đây là lý do tại sao @XmlTransient
cho trường riêng tư không hoạt động trong ví dụ từ Tomasz Nurkiewicz. Có hai cách có thể khắc phục điều đó:
1) Thêm chú thích để getter công cộng:
private String password;
@XmlTransient
public String getPassword() {
return password;
}
2) Thêm @XmlAccessorType
đến lớp:
@XmlAccessorType(XmlAccessType.FIELD)
public User {
@XmlTransient
private String password;
}
Tìm thấy tại: http://old.nabble.com/@XmlTransient-ignored-td7406659.html
Tôi cho rằng bạn đang sử dụng JAXB cho ánh xạ đối tượng-XML. Trong trường hợp đó chỉ cần chú thích các trường bạn muốn bỏ qua trong thực thể cơ sở dữ liệu của bạn với @XmlTransient
.
@XmlTransient
private String password;
Tuy nhiên lưu ý rằng một ngày nào đó bạn sẽ nhận ra rằng bạn không cần một lớp học tạm thời chủ yếu để tách dịch vụ web CXF của bạn từ backend. Sau khi tất cả các bạn không muốn nhớ tất cả thời gian mà thêm một cột trong cơ sở dữ liệu ngay lập tức phá vỡ giao diện SOAP ...
- 1. Gửi một đối tượng qua Internet
- 2. ASP.NET MVC đọc thuộc tính khi đối tượng được tạo
- 3. vượt qua một loại như một tham số thuộc tính
- 4. Số đối tượng Actionscript của thuộc tính
- 5. Khi nào là đối tượng thuộc tính được tạo?
- 6. Làm cách nào để tuần tự hóa một đối tượng ẩn danh để gửi qua dịch vụ web SOAP?
- 7. Đếm số thuộc tính (chuỗi) của đối tượng trong C#
- 8. LINQ Chọn một số thuộc tính vào đối tượng khác?
- 9. lỗi: thuộc tính 'myBoolVariableName' có thuộc tính 'giữ lại' phải thuộc loại đối tượng
- 10. Loại bỏ không được ánh xạ các thuộc tính của một đối tượng trong một mảng
- 11. Bỏ qua một số thuộc tính trong thời gian chạy khi sử dụng DataContractSerializer
- 12. Cách kiểm tra nhiều thuộc tính của một đối tượng
- 13. Loại trừ một số thuộc tính ActiveRecord khỏi hiển thị xml trong đường ray
- 14. lặp qua đối tượng và nhận các thuộc tính
- 15. Làm cách nào để loại trừ một số thuộc tính công khai không được tuần tự hóa thành JsonResult?
- 16. Gửi đối tượng Tuple qua WCF?
- 17. loại đối tượng 'datetime.datetime' không có thuộc tính 'datetime'
- 18. Chỉ định các thuộc tính của đối tượng Rails được chuyển vào đối tượng JSON
- 19. cách loại trừ một thuộc tính khác trong văn bản này [Ràng buộc (Loại trừ = "ID")] trong MVC
- 20. Thuộc tính PythonError: Đối tượng không có thuộc tính
- 21. Ánh xạ các tham số URI vào các thuộc tính của đối tượng tham số?
- 22. Làm thế nào để loại trừ thuộc tính null khi sử dụng XmlSerializer
- 23. Chức năng trả về một đối tượng có loại được chỉ định trong đối số
- 24. Làm cách nào để truy cập một số thuộc tính (riêng tư) của một đối tượng?
- 25. Làm cách nào để loại trừ thuộc tính của tất cả các mục trong IEnumerable khi sử dụng ShouldBeEquivalentTo?
- 26. Nhận thuộc tính đối tượng PHP là số
- 27. Python lỗi thuộc tính: loại đối tượng '_socketobject' không có thuộc tính 'GetHostByName'
- 28. Vòng lặp thông qua một thuộc tính đối tượng Trong C#
- 29. C# gửi nhận đối tượng qua mạng?
- 30. Gán đối tượng được giữ lại cho thuộc tính yếu; đối tượng sẽ được phát hành sau khi phân
tôi Tôi không chắc chắn những gì tôi sử dụng, bởi vì tôi đã chỉ thêm 'cxf-rt-frontend-jaxws' và' cxf-rt-transports-http' vào tệp 'pom.xml' của tôi để sử dụng CXF. Nhưng tôi thấy 'jaxb-impl-2.1.13.jar' và' cxf-rt-databinding-jaxb-2.4.3.jar' trong gói WAR của tôi, có vẻ như bạn đã đúng. Tôi đã cố gắng sử dụng '@ XmlTransient' mà không may mắn: (Tôi cũng đã thêm' @ XmlRootElement' vào cả lớp, nhưng không có gì thay đổi. Bạn có mẹo khác không? –
Xin chào một lần nữa! Tôi googling và làm ít nghiên cứu và tìm ra cách giải quyết vấn đề của mình Xem bản cập nhật của tôi Tôi cũng đưa ra câu trả lời của bạn vì nó giúp tôi tìm ra giải pháp phù hợp. –