2011-11-04 29 views
12

Tôi đang viết EJB làm dịch vụ SOAP hợp đồng đầu tiên và tôi tạo các lớp java và SEI từ WSDL. WSDL chỉ định một số loại có ràng buộc (độ dài tối đa, mẫu, v.v.). Các lớp java được tạo ra được chú thích JAXB nhưng thiếu các siêu dữ liệu contraints vì các chú thích JAXB không hỗ trợ các lớp đó. Điều này có nghĩa rằng xác thực đầu vào chỉ xảy ra khi dịch vụ được gọi thông qua điểm cuối SOAP.Làm cách nào để tạo các đối tượng Java có chú thích Xác thực Bean từ một XSD?

Vấn đề là khi EJB được gọi bởi một EJB khác, việc xác thực bị bỏ qua vì nó nằm trong ngăn xếp XML. Tôi muốn vô hiệu hóa XML Schemavalidation và sử dụng Bean Validation thay vì vậy việc xác nhận hợp lệ hoạt động cho cả hai cách (SOAP và RMI) của việc gọi EJB.

Câu hỏi: Làm thế nào tôi có thể tạo không chỉ chú thích JAXB mà còn chú thích xác thực Bean trên các lớp Java?

Trả lời

4

Câu trả lời hay nhất tôi biết cho đến bây giờ là sử dụng Annotate Plugin để thêm chú thích JSR 303.

+0

Đó chắc chắn là một con trỏ liên tục. Cảm ơn. –

6

Bạn có thể sử dụng các API javax.xml.valdation để xác thực mô hình miền được ánh xạ với JAXB dựa vào lược đồ XML. Một lợi thế của phương pháp này là bạn sử dụng các quy tắc xác nhận cùng (được định nghĩa trong lược đồ XML) cho cả hai trường hợp sử dụng của bạn:

import java.io.File; 
import javax.xml.XMLConstants; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.util.JAXBSource; 
import javax.xml.validation.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     Customer customer = new Customer(); 
     customer.setName("Jane Doe"); 
     customer.getPhoneNumbers().add(new PhoneNumber()); 
     customer.getPhoneNumbers().add(new PhoneNumber()); 
     customer.getPhoneNumbers().add(new PhoneNumber()); 

     JAXBContext jc = JAXBContext.newInstance(Customer.class); 
     JAXBSource source = new JAXBSource(jc, customer); 

     SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
     Schema schema = sf.newSchema(new File("customer.xsd")); 

     Validator validator = schema.newValidator(); 
     validator.setErrorHandler(new MyErrorHandler()); 
     validator.validate(source); 
    } 

} 

Full Ví dụ

+0

Và nếu tôi muốn hiển thị thông báo xác nhận hợp lệ cho người dùng? Bean Validation sẽ trả về các đối tượng 'ConstraintViolation' hữu ích, nhưng Trình xác thực XML có vẻ là nội dung trả về một chuỗi đơn thuần với một mô tả có lẽ là rất kỹ thuật về lỗi này? – meriton

2

Bạn có thể sử dụng phiên bản MOXy 2.6+ làm nhà cung cấp JAXB và thao tác này sẽ được thực hiện tự động. MOXy là một mô-đun khung trong dự án EclipseLink.

Hiện tại, phiên bản 2.6.0-M3 của EclipseLink có sẵn tại: sonatype hoặc maven.

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