2012-01-30 18 views
13

Tôi đang cố gắng sử dụng Jaxb2Marshaller để sắp xếp một tập hợp các lớp java bằng cách sử dụng spring. Tôi biết điều này có thể được thực hiện bằng cách sử dụng đoạn mã sauChỉ định một gói thay vì "classesToBeBound" cho spring Jaxb2Marshaller

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="classesToBeBound"> 
     <list> 
      <value>com.example.test1</value> 
      <value>com.example.test2</value> 
     </list> 
    </property> 
</bean> 

Những gì tôi muốn làm là thay vì chỉ định một danh sách các lớp, tôi muốn để xác định chỉ là tên gói chứa tất cả các lớp (trong trường hợp trên com.example).

Có ai biết cách để thực hiện việc này hay bất kỳ cách nào khác không yêu cầu tôi liệt kê tất cả các lớp học. Bất kỳ trợ giúp sẽ được đánh giá cao !

Cảm ơn.

Trả lời

11

Từ mùa xuân 3.1 (tôi nghĩ) bạn cũng có thể sử dụng các gói ToTocan, chấp nhận ký tự đại diện. Nó không hoạt động với các phần tử không có chú thích @XmlRootElement, giống như thuộc tính contextPath. Những nhu cầu này tạo ra đối tượng-nhà máy.

thể trông giống như:

<property name="packagesToScan"> 
    <list> 
     <value>com.test.*</value> 
     <value>com.*.test</value> 
    </list> 
</property> 
+0

nếu bạn đang thiếu @XmlRootAnnotation và không thể sửa đổi nguồn XSD xem xét việc sử dụng tuỳ chỉnh jaxb toàn cầu, hãy xem http://stackoverflow.com/a/8725352/881375 – tomasb

3

Nếu bạn đang sử dụng phiên bản mới của JAXB thì you can use something like this trong ngữ cảnh ứng dụng của bạn nếu bạn thêm không gian tên oxm vào tệp xml của mình.

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:oxm="http://www.springframework.org/schema/oxm" 
     xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
      http://www.springframework.org/schema/oxm 
      http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd"> 
    <oxm:jaxb2-marshaller id="jaxbMarshaller" contextPath="com.example"/> 
    <!-- other beans --> 
</beans> 

Tôi có chương trình cấp sản xuất đang chạy với những chương trình này, vì vậy hãy cho tôi biết nếu bạn có thêm bất kỳ câu hỏi nào.

Chúc may mắn.

+0

Cảm ơn! điều này không yêu cầu tôi phải bao gồm tệp jaxb.index trong com.yourcompany.yourapp.foo? –

+0

Bạn chỉ nói về tệp chỉ mục nào? Tôi không có bất kỳ loại tệp nào trong dự án của mình. Loại thông tin nào ở trong đó? – thatidiotguy

+0

Tôi chạy một thử nghiệm nhỏ và tôi có ngoại lệ sau: ngoại lệ lồng nhau là javax.xml.bind.JAXBException: "com.yourcompany.yourapp.foo" không chứa ObjectFactory.class hoặc jaxb.index. Dẫn tôi đến http://stackoverflow.com/questions/899668/how-do-i-use-a-jaxb-index-file –

5

Bạn có thể thiết lập các contextPath với cú pháp sau:

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="contextPath" value="com.example"/> 
</bean> 
Các vấn đề liên quan