2012-05-17 31 views
6

Tôi đang sử dụng JAXB (thông qua một mớ hỗn độn của JaxWS và CXF) và cố gắng sắp xếp loại BigDecimal thành một chuỗi (số) và int (số mũ) bởi vì bây giờ chúng ta có giao diện người dùng không thể giải thích BigDecimal nhờ các vấn đề về miền địa phương .Làm thế nào để áp dụng toàn cầu một XmlAdapter cho một chương trình JAXB?

Điều tôi đang cố gắng là sử dụng XmlAdapter để chuyển đổi BigDecimal thành kiểu của riêng tôi, BigDecimalUnScaled. Điều này làm việc tốt miễn là tôi đặt chú thích @XmlJavaTypeAdapter của tôi trực tiếp trên trường. Tuy nhiên, những gì tôi thực sự muốn làm là đặt nó vào việc thực hiện Dịch vụ Web của tôi và áp dụng nó trên toàn cầu cho tất cả các BigDecimals mà không cần phải sắp xếp từng đối tượng riêng lẻ. Có cách nào tôi có thể làm điều này?

Ví dụ:

Interface DummyWebService 
-- Get Return Object (Return object is a POJO with say an ID and a BigDecimal value) 

Implementation default 
-- No type annotation, uses default BigDecimal marshaller 

Marshalled Implementation 
-- XmlTypeAdapters implementation, should globally use BigDecimal 

Tôi đã thử chỉ đưa bộ điều hợp vào việc triển khai, nhưng nó không hoạt động.

Bất kỳ ý tưởng nào?

Trả lời

6

Bạn có thể đăng ký XmlAdapter của bạn ở mức gói và có nó áp dụng cho tất cả các lĩnh vực/tài sản của loại hình đó trong gói phần mềm đó:

com/example/package-info.java

@XmlJavaTypeAdapters({ 
    @XmlJavaTypeAdapter(value=BigDecimalAdapter.class, type=BigDecimal.class) 
}) 
package com.example; 

import javax.xml.bind.annotation.adapters.*; 

Để biết thêm thông tin

+2

Theo tôi thấy điều này sẽ không hoạt động vì gói-thông tin cần phải nằm trong thư mục đối tượng mô hình, làm cho nó áp dụng cho tất cả các trường hợp dịch vụ của tôi. Đưa nó vào gói dịch vụ không hoạt động - tôi đã thử điều đó. – Andrew

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