2011-08-25 36 views
7

Có vẻ như chúng là một vấn đề khi tôi cố gắng chạy JAXB marshaller trong mô-đun netbeans. Ban đầu tôi nghĩ đó là những implimentation nút do đó, tôi đã dành một vài ngày sắp xếp mọi thứ tuy nhiên tôi vẫn recieveing ​​được thông báo lỗi kỳ lạJAXB trong Netbeans Module

javax.xml.bind.JAXBException: ClassCastException: attempting to cast jar:file:/C:/Program%20Files/jmonkeyplatform/ide/modules/ext/jaxb/api/jaxb-api.jar!/javax/xml/bind/JAXBContext.class to jar:file:/C:/Program%20Files/Java/jdk1.6.0_21/jre/lib/rt.jar!/javax/xml/bind/JAXBContext.class. Please make sure that you are specifying the proper ClassLoader.  
    at javax.xml.bind.ContextFinder.handleClassCastException(ContextFinder.java:96) 
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:205) 
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:363) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522) 
    at com.spectre.util.JAXBImporterExporter.write(JAXBImporterExporter.java:63) 

Tôi không chắc chắn chính xác những gì vấn đề là các nhà nhập khẩu/xuất khẩu dường như làm việc trong các dự án bình thường và nhà nhập khẩu dường như hoạt động tốt khi phân tích cú pháp tệp, tuy nhiên việc xuất có vẻ gây ra vấn đề. Phương pháp tôi sử dụng để xuất khẩu là

public static <T> void write(T savable, Class<T> type,Object path) { 
     try { 
      JAXBContext jc = JAXBContext.newInstance(type); 
      Marshaller marshaller = jc.createMarshaller(); 
      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
      if(path instanceof File) 
       marshaller.marshal(savable, (File)path); 
      else if(path instanceof OutputStream){ 
       marshaller.marshal(savable, (OutputStream)path); 
      }else throw new NoSuchMethodException("The Field Path must be of either type File or OutputStream"); 
     } catch (NoSuchMethodException ex) { 
      Exceptions.printStackTrace(ex); 
     } catch (JAXBException ex) { 
      Exceptions.printStackTrace(ex); 
     } 
    } 

bất kỳ sự trợ giúp được đánh giá cao

+0

Tôi nhận thấy rằng có vẻ như đó là vấn đề với 2 trình tải lớp khác nhau đang được sử dụng trong thời gian chạy tuy nhiên tôi dường như không thể tìm được bản sửa lỗi thích hợp. Tôi tin rằng nó có thể được giúp đỡ với một nhà xây dựng khác tuy nhiên tôi không thể tìm ra những gì nên được bao gồm như bối cảnh paramater đầu tiên và đặt nó thành chuỗi rỗng hoặc trống dường như gây ra và phát hành 'JAXBContext jc = JAXBContext.newInstance (" ", JAXBImporterExporter.class.getClassLoader());' – kdgwill

+0

Vui lòng đăng câu trả lời dưới dạng câu trả lời, không đặt câu trả lời trong câu hỏi của bạn. Có một nút "Trả lời câu hỏi của bạn" ở dưới cùng. Cũng không cần phải hét lên "TRẢ LỜI" trong tiêu đề hay gì đó. Chỉ cần đánh dấu câu trả lời được chấp nhận bất cứ khi nào thời gian chín muồi. Hãy nhìn xem, đây là trang web Hỏi & Đáp, không phải là diễn đàn thảo luận hay thứ gì đó nguyên thủy như vậy :) – BalusC

+0

okay tôi đã tìm ra sớm đêm qua và không ai trả lời hoặc nhận xét gì cả. ai đó đã bỏ phiếu cho câu hỏi – kdgwill

Trả lời

2

Tôi tìm thấy rằng nếu bạn thay vì thay đổi khởi của JAXBContext để JAXBContext.newInstane (String contextPath, ClassLoader loader), trong đó các bộ nạp lớp bạn nhận được từ lớp hiện tại của bạn, tức là MyClass.class.getClassLoader(). Ngoài ra thay vì một lược đồ bạn có thể sử dụng một jaxb.index mà chỉ là một danh sách tệp văn bản của tên lớp mà bạn đã tăng cường để sử dụng với jaxb bên trong cùng một thư mục của chúng. Họ nên là một cho mỗi thư mục mặc dù đối với tôi họ, nơi tất cả trong cùng một thư mục. và tách trong chuỗi tương tự trong bối cảnh đường param của constructor với:

HERE

3

Một giải pháp dễ dàng là để thêm phụ thuộc mô-đun trên org.netbeans.modules.xml.jaxb.api mô-đun đó là một phần của NetBeans. Điều này sẽ tránh xung đột giữa hai phiên bản của các lớp JAXB (một từ JDK và thứ hai từ mô đun đó được ưa thích trong thời gian chạy).

+0

Đây phải là giải pháp được ưa thích, IMHO. Nó có vẻ là một cách NetBeans'ish giải quyết vấn đề và giúp bạn tiết kiệm từ fiddling với classloaders. – peterh

+1

Tôi đang đối mặt với cùng một vấn đề. Tuy nhiên, việc thêm org.netbeans.modules.xml.jaxb làm phụ thuộc dẫn đến lỗi khác "Mô-đun có phụ thuộc bạn bè trên org.netbeans.modules.xml.jaxb nhưng không được liệt kê là bạn". Theo https://netbeans.org/bugzilla/show_bug.cgi?id=140336 chỉ một số mô-đun khác được phép phụ thuộc vào nó. –

+0

Giải pháp này làm việc cho tôi. Cảm ơn! – Spindizzy