最初に xjc を使用して作成した XML を JAXB を使用してアンマーシャリングしようとしています。アンマーシャリング時に検証を行いたくありませんが、 の JAXB ドキュメントに従って検証を無効にしましたが、実行しようとしてスキーマが見つからない場合に がスローされるu.setSchema(null);
のを防ぐことはできませんFileNotFoundException
。
JAXBContext jc = JAXBContext.newInstance("blast");
Unmarshaller u = jc.createUnmarshaller();
u.setSchema(null);
return u.unmarshal(blast)
Apache プロパティをhttp://apache.org/xml/features/validation/schema
に設定して SAX 解析の検証を無効にするという同様の質問を見たことがありますfalse
が、Unmarshaller で独自の SAX パーサーを使用することはできません。
ベストアンサー1
@blaise-doughan と @aerobiotic からの回答に基づいて、私にとってうまくいった解決策を以下に示します。
import java.io.FileReader;
import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.sax.SAXSource;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
public class Demo2 {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(MyBean.class);
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
spf.setFeature("http://xml.org/sax/features/validation", false);
XMLReader xmlReader = spf.newSAXParser().getXMLReader();
InputSource inputSource = new InputSource(
new FileReader("myfile.xml"));
SAXSource source = new SAXSource(xmlReader, inputSource);
Unmarshaller unmarshaller = jc.createUnmarshaller();
MyBean foo = (MyBean) unmarshaller.unmarshal(source);
}
}