0

インフラストラクチャ: Java 1.5 を使用していますが、これは必須です。しかし、外部ライブラリをロードできるので問題ありません。

問題:

「外部チャネル」経由で受け取った XML ファイルがあり、それを InputStream として使用できます

誰かが同じものを取得する必要がある場合は、次を使用できます。

InputStream is = new FileInputStream(file);

XSD をネストした XSD に対して XML を検証する必要がある

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:BODY="urn:CBI:xsd:CBIBdySDDReq.00.00.06" 
           xmlns:HTRT="urn:CBI:xsd:CBIHdrTrt.001.07" 
           xmlns:HE2E="urn:CBI:xsd:CBIHdrSrv.001.07" 
           xmlns:SGNT="urn:CBI:xsd:CBISgnInf.001.04" 
           xmlns:LMSG="urn:CBI:xsd:CBISDDReqLogMsg.00.00.06"
           xmlns="urn:CBI:xsd:CBISDDReqPhyMsg.00.00.06"
           targetNamespace="urn:CBI:xsd:CBISDDReqPhyMsg.00.00.06"
           elementFormDefault="qualified">
    <xs:import namespace="urn:CBI:xsd:CBIHdrTrt.001.07" schemaLocation="CBIHdrTrt.001.07.xsd"/>
    <xs:import namespace="urn:CBI:xsd:CBIHdrSrv.001.07" schemaLocation="CBIHdrSrv.001.07.xsd"/>
    <xs:import namespace="urn:CBI:xsd:CBIBdySDDReq.00.00.06" schemaLocation="CBIBdySDDReq.00.00.06.xsd"/>
    <xs:element name="CBISDDReqPhyMsg" type="CBISDDReqPhyMsg.00.00.06">
        <xs:annotation>
            <xs:documentation>1. - Tag root dell'intero messaggio fisico di richiesta SDD CBI</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:complexType name="CBISDDReqPhyMsg.00.00.06">
        <xs:sequence>
            <xs:element name="CBIHdrTrt" type="HTRT:CBIHdrTrt.001.07">
                <xs:annotation>
                    <xs:documentation>1.1. - Header di tratta CBI</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="CBIHdrSrv" type="HE2E:CBIHdrSrv.001.07">
                <xs:annotation>
                    <xs:documentation>1.2. - Header di servizio CBI</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="CBIBdySDDReq" type="BODY:CBIBdySDDReq.00.00.06">
                <xs:annotation>
                    <xs:documentation>1.3. - Body di servizio CBI</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

だから私はXSDファイルのブランチを持っています。

チャンクXMLファイルはこちら

<?xml version="1.0" encoding="UTF-8"?>
<MSG:CBISDDReqPhyMsg xmlns:MSG="urn:CBI:xsd:CBISDDReqPhyMsg.00.00.06"
    xmlns:HTRT="urn:CBI:xsd:CBIHdrTrt.001.07" xmlns:HE2E="urn:CBI:xsd:CBIHdrSrv.001.07"
    xmlns:BODY="urn:CBI:xsd:CBIBdySDDReq.00.00.06" xmlns:LMSG="urn:CBI:xsd:CBISDDReqLogMsg.00.00.06"
    xmlns:SGNT="urn:CBI:xsd:CBISgnInf.001.04" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <MSG:CBIHdrTrt>
        <HTRT:IdCBISndrf>0000636J</HTRT:IdCBISndrf>
        <HTRT:IdCBIRcvrf>0000641V</HTRT:IdCBIRcvrf>
        <HTRT:SrvNm>INC-SDDC</HTRT:SrvNm>
        <HTRT:IdMsgTrt>
            0000636JP12312111154007381042010010000636J000000636J0000641V0
        </HTRT:IdMsgTrt>

したがって、CBISDDReqPhyMsg.00.00.06 に対して XML を検証する必要があります。したがって、使用するxmlに対して実行時にのみ知っています。別のファイルが CBISDDReqPhyMsg.00.00.05 をロードできる例

私には2つの大きな問題があります

1) XML から xsd ファイル名を取得する必要があり、XML は BIG 1/2GB になる可能性があります (stax/sax は優れたソリューションです)。

2) アプリ全体がファイル システムにアクセスできないため、jar から xsd をロードする必要があります。

検証のために、私はhttp://www.edankert.com/validate.htmlのようなシステムを好みます

私はこの回答にインクルードについて読んだ

しかし、ローダーを使用すると、ファイルに関する情報を取得できません。

アイデア?

4

1 に答える 1