2011-09-14 4 views
5

Tôi có một phương pháp sercice web để nhận một đối tượng. Một trong các thuộc tính là "interval" là một số nguyên.CXF - Làm cách nào để khai báo thuộc tính bắt buộc và không phải là nguyên thủy?

Tôi muốn làm cho thuộc tính này được yêu cầu nhưng không cung cấp bất kỳ giá trị mặc định nào - Tôi muốn người dùng được yêu cầu đặt rõ ràng giá trị.

Nếu tôi sử dụng int interval - thuộc tính được hiển thị dưới dạng int và nếu người dùng không đặt thuộc tính rõ ràng, số không (mặc định Java cho int nguyên thủy) sẽ được gửi.

Nếu tôi sử dụng Integer interval - thuộc tính được hiển thị dưới dạng số nguyên và được khai báo tùy chọn trong WSDL để người dùng không thể nhìn thấy nó là bắt buộc trước khi gửi yêu cầu.

Nếu tôi sử dụng Integer interval với @XmlElement(required = true) hoặc @XmlElement(nillable = false) - thuộc tính được hiển thị dưới dạng int.

Thuộc tính có thể có bất kỳ số nguyên âm nào, không và dương nên tôi không thể sử dụng giá trị mặc định để cho biết thuộc tính không được đặt rõ ràng.

Tôi có thể sử dụng BigInteger interval với @XmlElement(required = true) nhưng chúng tôi thiếu những lợi thế khi sử dụng loại lõi Integer.

Tôi muốn hiển thị thuộc tính dưới dạng Số nguyên vì vậy tôi sẽ nhận được giá trị rỗng nếu người dùng không đặt thuộc tính và đồng thời tôi muốn WSDL hiển thị rằng thuộc tính là bắt buộc để người dùng biết nó là bắt buộc đơn giản bằng cách nhìn vào WSDL.

Trả lời

3

Với @XmlElement(required = true) WSDL là đúng nhưng vấn đề là khi sử dụng công cụ org.apache.cxf.tools.wsdlto.WSDLToJava trên WSDL tôi khách hàng được tạo với int interval thay vì Integer interval.

Giải pháp là để vượt qua "-b" tùy chọn để công cụ WSDL2Java với một đường dẫn đến một ràng buộc jaxb tập tin mà bản đồ xsd: int để java.lang.Integer:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      jaxb:version="2.0"> 
    <jaxb:globalBindings> 
    <jaxb:javaType name="java.lang.Integer" 
        xmlType="xsd:int" /> 
    </jaxb:globalBindings> 
</jaxb:bindings> 

Sử dụng @XmlElement(required = true) và "-b" tùy chọn, giữ nguyên tố cần thiết (minOccurs = "1") và hiển thị nó như là một số nguyên cho máy khách Java.

Thông tin thêm: http://cxf.547215.n5.nabble.com/How-to-declare-an-attribute-required-and-non-primitive-td4815370.html