junitユニットテストでxmlファイルを検証しようとしています。これは私の単純化されたコードです。スキーマが原因に建設されていませんしかし、スキーマはhttp://www.unece.org/とhttp://www.gs1.org/ユニットテストでxsd要素名が解決されていません
package test;
import java.net.URL;
import java.nio.file.Paths;
import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
public class Epcis11MessageCreatorForSoTest {
private static Schema schema;
private final static String[] XSD_FILES = {
"epcis11/xsd/BasicTypes.xsd",
"epcis11/xsd/DocumentIdentification.xsd",
"epcis11/xsd/Partner.xsd",
"epcis11/xsd/Manifest.xsd",
"epcis11/xsd/BusinessScope.xsd",
"epcis11/xsd/StandardBusinessDocumentHeader.xsd",
"epcis11/xsd/EPCglobal.xsd",
"epcis11/xsd/EPCglobal-epcis-1_1.xsd",
"epcis11/xsd/EPCglobal-epcis-query-1_1.xsd",
"epcis11/xsd/EPCglobal-epcis-masterdata-1_1.xsd",
};
@BeforeClass
public static void beforeClass() throws Exception {
try {
System.setProperty("jaxp.debug", "10");
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Source[] sources = new Source[XSD_FILES.length];
int i = 0;
for (String xsdfile : XSD_FILES) {
URL resource = Epcis11MessageCreatorForSoTest.class.getClassLoader().getResource(xsdfile);
String systemId = Paths.get(resource.toURI()).toFile().getAbsolutePath();
StreamSource ss = new StreamSource(
Epcis11MessageCreatorForSoTest.class.getClassLoader().getResourceAsStream(xsdfile),systemId);
sources[i] = ss;
i++;
}
schema = schemaFactory.newSchema(sources);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
@Test
public void testFoo() {
Assert.assertTrue(true);
}
}
からアクセスできます。
ターゲット/テストクラス/ epcis11/XSD/EPCグローバル-EPCIS-1_1.xsd。 lineNumber:46; columnNumber:60; src-resolve: 'sbdh:StandardBusinessDocumentHeader'という名前を(n)要素宣言のコンポーネントに解決できません。
関連する行は、この(EPCグローバル-EPCIS-1_1.xsd)のように見える
<xsd:schema xmlns:epcis="urn:epcglobal:epcis:xsd:1" xmlns:sbdh="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:epcglobal="urn:epcglobal:xsd:1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:epcglobal:epcis:xsd:1" elementFormDefault="unqualified" attributeFormDefault="unqualified" version="1.1">
...
<xsd:import namespace="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" schemaLocation="./StandardBusinessDocumentHeader.xsd"/>
...
<xsd:element ref="sbdh:StandardBusinessDocumentHeader"/>
私はIDEとしてEclipseを使用して、プロジェクトがJREシステムライブラリとして使用するJavaSE-1.7を使用しています。これらのxsdファイルを見ると、構文上問題ありません。つまり、私はideにXML関連のエラーはありません。テストがideまたはmavenのどちらから実行されても、まったく同じエラーが表示されます。
私のschemafactoryやxsdソースには、Javaオブジェクトとして何が間違っているかもしれないかについてのアドバイスはありますか?
名前空間「sbdh」はどこに定義されていますか? –
名前空間接頭辞 'sbdh'はEPCglobal-epcis-1_1.xsdにあります。上の行のスニペットがあります。 – user7040845