2014-01-17 2 views
1

입력 XML 문서의 JAXB를 사용하여 비 정렬 화를 수행하는 동안 문제가 발생했습니다. 이미 JAXB 클래스를 생성 DOCTYPE을 제외한 모든 비 정렬 화 된 데이터에 액세스 할 수 있습니다 입력 XML에서 JAXB의 <!DOCTYPE> 요소를 비 정렬 화하는 방법은 무엇입니까?

<?xml version="1.0" encoding="windows-1252"?> 
<!DOCTYPE Power SYSTEM "http://someuri/TestModel_v9.dtd"> 
<Power> 
    <Data> 
    </Data> 
    <Control> 
     <Inp1>MyInp</Inp1> 
     <Inp2>MyInp</Inp2> 
    </Control> 
</Power> 

것처럼 XML의 문서 보인다. 비 정렬 화 된 데이터의 일부로 DOCTYPE 섹션이 필요합니다. JAXB에서 Unmarshaller.unmarshal 메서드를 사용하고 있습니다. JAXB를 사용하여 언 마샬링 스 니펫.

File file = new File("C:\\file.xml"); 
JAXBContext jaxbContext = JAXBContext.newInstance(Power.class); 

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
Power power= (Power) jaxbUnmarshaller.unmarshal(file); 

어떻게 생각 하나? JAXB가이 작업을 수행 할 수없는 경우 JAXB와 함께 사용할 수있는 대안을 제안하십시오.

감사합니다, 바스 카르 여기

답변

0

은 StAX를 함께 JAXB를 사용하는 경우이 문서 타입 정보를 캡처 할 수있는 방법이다. 여기

XmlResolver에 (MyXMLResolver)를 사용하면 문서 타입 정보를 캡처하는 데 사용할 수 XMLResolver의 구현입니다.

import javax.xml.stream.XMLResolver; 
import javax.xml.stream.XMLStreamException; 

public class MyXMLResolver implements XMLResolver { 

    private String publicID; 
    private String systemID; 
    private String baseURI; 
    private String namespace; 

    @Override 
    public Object resolveEntity(String publicID, String systemID, 
      String baseURI, String namespace) throws XMLStreamException { 
     this.publicID = publicID; 
     this.systemID = systemID; 
     this.baseURI = baseURI; 
     this.namespace = namespace; 
     return null; 
    } 

    public String getPublicID() { 
     return publicID; 
    } 

    public String getSystemID() { 
     return systemID; 
    } 

    public String getBaseURI() { 
     return baseURI; 
    } 

    public String getNamespace() { 
     return namespace; 
    } 

} 

데모

다음

당신이 당신의 유스 케이스에 활용하는 방법입니다

import javax.xml.bind.*; 
import javax.xml.stream.*; 
import javax.xml.transform.stream.StreamSource; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     XMLInputFactory xif = XMLInputFactory.newFactory(); 
     MyXMLResolver resolver = new MyXMLResolver(); 
     xif.setXMLResolver(resolver); 
     XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource("input.xml")); 

     JAXBContext jc = JAXBContext.newInstance(Power.class); 
     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     Power power = (Power) unmarshaller.unmarshal(xsr); 

     System.out.println(resolver.getPublicID()); 
     System.out.println(resolver.getSystemID()); 
     System.out.println(resolver.getBaseURI()); 
     System.out.println(resolver.getNamespace()); 
    } 

} 
관련 문제