質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Java

    13829questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • XML

    653questions

    XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

  • XSD

    5questions

    XSDは一般的に、XMLドキュメントの特定のタイプの表現を含んだ、W3C XML Schemaフォーマットで書かれたドキュメントを指します。

Javaでxsdの読み込みに失敗する

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,089

irohamaru

score 5

前提・実現したいこと

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'の読取りに失敗しました。

該当のソースコード

以下サイトを参考にしてスキーマ検証のメソッドを実装しています。

XMLスキーマ検証の方法

/**
 * スキーマ検証
 */
private Document schemaValidate(String xmlStr) {

    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();

    try {
        // XML Schemaによる妥当性検証を有効にする。
        docFactory.setValidating(true);
        // ネームスペースの認識を有効にする。
        docFactory.setNamespaceAware(true);

        // XML Schemaの仕様に従って検証を行うことを示す値,"http://www.w3.org/2001/XMLSchema"を設定する。
        docFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", XMLConstants.W3C_XML_SCHEMA_NS_URI);
        // 検証に使うスキーマ文書を指定する。
        docFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", new File("/XXXXX.xsd"));

        // DocumentBuilder インスタンスの生成
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        // スキーマ検証エラー発生時のエラーハンドラ
        docBuilder.setErrorHandler(new MySaxErrorHandler());

        // 妥当性検証を実行し、Documetオブジエンドに変換する。
        Document doc = docBuilder.parse(new InputSource(new StringReader(xmlStr)));

        return doc;

    } catch (ParserConfigurationException | SAXException | IOException e) {
        throw new RuntimeException(e);
    }

補足情報

以下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>

(以下略)
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13829questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • XML

    653questions

    XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

  • XSD

    5questions

    XSDは一般的に、XMLドキュメントの特定のタイプの表現を含んだ、W3C XML Schemaフォーマットで書かれたドキュメントを指します。