2
Thread
을 확장하는 클래스가 있는데, XML로 구성 정보를 저장할 수 있기를 원합니다. 이것은 다른 모든 속성과 Thread
클래스에없는 것 때문에 분명히 작동하지 않습니다. 기본적으로마샬링/언 마샬링 중 기본 클래스를 무시하는 방법은 무엇입니까?
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Test extends Thread{
@XmlAttribute
public String something;
public Test(){
}
public static void main(String[] args) throws JAXBException {
Test test = new Test();
test.something = "My Value";
JAXBContext jaxbContext = JAXBContext.newInstance(Test.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(test, System.out);
}
}
난 그냥 Test
클래스에 상속되어 있지 어떤 것에 대해 걱정 : 여기
Exception in thread "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
java.lang.Thread$UncaughtExceptionHandler is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
at java.lang.Thread$UncaughtExceptionHandler
at public java.lang.Thread$UncaughtExceptionHandler java.lang.Thread.getUncaughtExceptionHandler()
at java.lang.Thread
at Test
java.lang.Thread$UncaughtExceptionHandler does not have a no-arg default constructor.
this problem is related to the following location:
at java.lang.Thread$UncaughtExceptionHandler
at public java.lang.Thread$UncaughtExceptionHandler java.lang.Thread.getUncaughtExceptionHandler()
at java.lang.Thread
at Test
at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:91)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:451)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:283)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:126)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1142)
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:130)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:248)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:235)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:445)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:637)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
at Test.main(Test.java:22)
문제를 설명하는 간단한 클래스입니다 : 마샬링 동안 나는 좋은 스택 추적을 얻을 . 그래서 뭔가 같은 :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<test something="My Value"/>
그래서 어떻게/비 정렬 화를 정렬 화시의 기본 클래스를 무시합니까?
고마워, 당신 말이 맞아, 아마 스레드를 확장하는 대신에 Runnable을 구현 했어야했다. 그렇게하면 많은 것을 변경하거나 다른 클래스 (필자가 피하려고했던 클래스)를 추가 할 필요없이 내 문제를 해결할 수 있습니다. –
@ jschoen : 도움이 되서 기쁩니다.하지만 Blaise Doughan이 답장을 보내고 있는지 확인하기 위해이 스레드를 주시하십시오. 필요로하는 최상의 정식 답을 줄 것입니다. –