###前提・実現したいこと
Javaで、e-Tax連携するためのXMLを出力する機能を作っています。
XMLの妥当性検証のため、検証で使うスキーマ文書を読み込みたいと思っています。
ところが、xsdの読み込みに失敗とのエラーが出ており、解決策が見つからない状況です。
どうやら、以下ソースコード中のXXXXX.xsdの読み込みはOKなのですが、その中でimportされているYYYYY.xsd,ZZZZZ.xsdの読み込みに失敗しているようです。
YYYYY.xsd,ZZZZZ.xsdの読み込みが正常に行われるためにはどうしたらよいでしょうか?
###発生している問題・エラーメッセージ
妥当性検証で以下のエラーが出力されてしまいます。
ただし、Exceptionが発生しているわけではなく、XML出力はできていますが妥当なXML文書ではないと思われます。
schema_reference.4: 1)ドキュメントが見つからなかった、2)ドキュメントを読み取れなかった、3)ドキュメントのルート要素が<xsd:schema>ではなかったため、スキーマ・ドキュメント'../general/YYYYY.xsd'の読取りに失敗しました。 schema_reference.4: 1)ドキュメントが見つからなかった、2)ドキュメントを読み取れなかった、3)ドキュメントのルート要素が<xsd:schema>ではなかったため、スキーマ・ドキュメント'../general/ZZZZZ.xsd'の読取りに失敗しました。
###該当のソースコード
以下サイトを参考にしてスキーマ検証のメソッドを実装しています。
java
1/** 2 * スキーマ検証 3 */ 4private Document schemaValidate(String xmlStr) { 5 6 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 7 8 try { 9 // XML Schemaによる妥当性検証を有効にする。 10 docFactory.setValidating(true); 11 // ネームスペースの認識を有効にする。 12 docFactory.setNamespaceAware(true); 13 14 // XML Schemaの仕様に従って検証を行うことを示す値,"http://www.w3.org/2001/XMLSchema"を設定する。 15 docFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", XMLConstants.W3C_XML_SCHEMA_NS_URI); 16 // 検証に使うスキーマ文書を指定する。 17 docFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", new File("/XXXXX.xsd")); 18 19 // DocumentBuilder インスタンスの生成 20 DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 21 // スキーマ検証エラー発生時のエラーハンドラ 22 docBuilder.setErrorHandler(new MySaxErrorHandler()); 23 24 // 妥当性検証を実行し、Documetオブジエンドに変換する。 25 Document doc = docBuilder.parse(new InputSource(new StringReader(xmlStr))); 26 27 return doc; 28 29 } catch (ParserConfigurationException | SAXException | IOException e) { 30 throw new RuntimeException(e); 31 }
###補足情報
以下xsdのimport部分のxsdの読み込みに失敗しています。
XXXXX.xsd
<?xml version="1.0" encoding="UTF-8" ?> <xsd:schema targetNamespace="http://xml.e-tax.nta.go.jp/XSD/kyotsu" xmlns="http://xml.e-tax.nta.go.jp/XSD/kyotsu" xmlns:gen="http://xml.e-tax.nta.go.jp/XSD/general" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" > <xsd:annotation> <xsd:documentation> XXXXXXXXXXXXXXXXXXXXXXXX version:1.0 Date:YYYY年MM月DD日 </xsd:documentation> </xsd:annotation> <!-- import --> <xsd:import namespace="http://xml.e-tax.nta.go.jp/XSD/general" schemaLocation="../general/YYYYY.xsd"/> <xsd:import namespace="http://xml.e-tax.nta.go.jp/XSD/general" schemaLocation="../general/ZZZZZ.xsd"/> (以下略)
YYYYY.xsd
<?xml version="1.0" encoding="utf-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.w3.org/2000/09/xmldsig#" version="1.0" elementFormDefault="qualified" attributeFormDefault="unqualified"> <simpleType name="CryptoBinary"> <restriction base="base64Binary"> </restriction> </simpleType> <element name="Signature" type="ds:SignatureType"/> <complexType name="SignatureType"> <sequence> <element ref="ds:SignedInfo"/> <element ref="ds:SignatureValue"/> <element ref="ds:KeyInfo" minOccurs="0"/> <element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/> </sequence> <attribute name="Id" type="ID" use="required"/> </complexType> (以下略)
ZZZZZ.xsd
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema targetNamespace="http://xml.e-tax.nta.go.jp/XSD/general" xmlns="http://xml.e-tax.nta.go.jp/XSD/general" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0"> <xsd:annotation> <xsd:documentation> 共通ボキャブラリ version:β2.1 Date:2017年01月13日 </xsd:documentation> </xsd:annotation> <!-- Include --> <xsd:include schemaLocation="../general/zeimusho.xsd" /> <xsd:include schemaLocation="../general/zeimoku.xsd" /> <xsd:include schemaLocation="../general/ITreference.xsd" /> <!--General--> <xsd:attributeGroup name="FormAttribute"> <xsd:attribute name="page" type="xsd:positiveInteger"/> <xsd:attribute name="softNM" type="xsd:string" use="required"/> <xsd:attribute name="sakuseiNM" type="xsd:string" use="required"/> <xsd:attribute name="sakuseiDay" type="xsd:date" use="required"/> <xsd:attribute name="id" type="xsd:ID"/> </xsd:attributeGroup> (以下略)

あなたの回答
tips
プレビュー