現在_javax.xml.validation.SchemaFactory
_を使用して、スキーマ検証を実行しようとしています。残念ながら、newSchema(Source schema)
関数を呼び出すと、次のエラーが発生します。
_Caused by: org.xml.sax.SAXParseException; systemId: file:/C:/Users/C42056/Documents/workspace-sts-3.2.0.RELEASE/cec-sample-ws-integration-2-war/target/classes/WEB-INF/schemas/xsd/individual/PrivateComponentTypes_4_0.xsd; lineNumber: 33; columnNumber: 88; src-resolve: Cannot resolve the name 'utility:ObjectStatusDateType' to a(n) 'type definition' component.
at org.Apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.Apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.Apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.Apache.xerces.impl.xs.traversers.XSDHandler.reportSchemaError(Unknown Source)
at org.Apache.xerces.impl.xs.traversers.XSDHandler.reportSchemaError(Unknown Source)
at org.Apache.xerces.impl.xs.traversers.XSDHandler.getGlobalDecl(Unknown Source)
at org.Apache.xerces.impl.xs.traversers.XSDElementTraverser.traverseNamedElement(Unknown Source)
at org.Apache.xerces.impl.xs.traversers.XSDElementTraverser.traverseLocal(Unknown Source)
at org.Apache.xerces.impl.xs.traversers.XSDHandler.traverseLocalElements(Unknown Source)
at org.Apache.xerces.impl.xs.traversers.XSDHandler.parseSchema(Unknown Source)
at org.Apache.xerces.impl.xs.XMLSchemaLoader.loadSchema(Unknown Source)
at org.Apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
at org.Apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
at org.Apache.xerces.jaxp.validation.XMLSchemaFactory.newSchema(Unknown Source)
at com.sei.ec.xml.validation.SimpleXmlValidator.loadSchema(SimpleXmlValidator.Java:70)
at com.sei.ec.xml.validation.SimpleXmlValidator.<init>(SimpleXmlValidator.Java:83)
... 75 more
_
_utility:ObjectStatusDateType
_要素は、newSchema(Source schema)
関数に渡す.xsdファイルで使用されます。別の.xsdファイルからObjectStatusDateType
をインポートしています-ファイルパスを3回チェックしたのです。 utility
名前空間も適切に宣言されています。
これは、関数(LocateCoverageIndexesByIdentifier_3_0.xsd)に渡すスキーマのスニペットです。
_<xs:import namespace="http://www.sei.com/utility/1/" schemaLocation="../../utility/InvocationOutcome_1_0.xsd"/>
<xs:import namespace="http://www.sei.com/utility/1/" schemaLocation="../../utility/ObjectHistory_1_0.xsd"/>
<xs:import namespace="http://www.sei.com/individual/component/4/" schemaLocation="../PrivateComponentTypes_4_0.xsd"/>
<xs:import namespace="http://www.sei.com/individual/shared/5/" schemaLocation="../IndividualTypes_5_0.xsd"/>
.
. <!-- Some more stuff -->
.
<xs:element name="coveragePeriod"
type="utility:ObjectStatusDateType"
minOccurs="0"/>
_
そして、これはObjectHistory_1_0.xsdからです:
_<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.sei.com/utility/1/"
targetNamespace="http://www.sei.com/utility/1/"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="1.0">
.
. <!-- Some more stuff -->
.
<xs:complexType name="ObjectStatusDateType">
<xs:sequence>
<xs:element name="effectiveDate" type="xs:date"/>
<xs:element name="cancelDate" type="xs:date" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
_
そして最後に、豆
_<bean id="locateClaimValidator"
class="com.sei.ec.xml.validation.SimpleXmlValidator">
<constructor-arg>
<value>classpath:WEB-INF/schemas/xsd/individual/ci/LocateCoverageIndexesByIdentifier_3_0.xsd
</value>
</constructor-arg>
</bean>
_
誰かが以前にこの種の問題に遭遇したことがありますか?
以前にこの問題がありました。すべてがEclipseで検証されましたが、実行中に破損しました。スキーマのいずれかが複数のスキーマを同じ名前空間にインポートしていますか?
このようなものは機能しませんが、Eclipseによって検証されます。
<import namespace="http://www.whatever.gov" location="../wherever" />
<import namespace="http://www.whatever.gov" location="../folder/superawesomeschema.xsd" />
多くの人が以前にこの種の問題に遭遇したことがあります。バリデーターが何らかの理由で、ロードするスキーマドキュメントをロードしていない場合は常に表示されます(ロードしていると考えます)。
診断を確認するには、ObjectHistory_1_0.xsdにエラー(たとえば、整形式エラー)を導入し、システムから問題があるかどうかを確認します。
Xercesを使用すると、機能http://Apache.org/xml/features/honour-all-schemaLocations
をtrueに設定することで解決できます。
機能http://Apache.org/xml/features/honour-all-schemaLocations
は、Xerces 2.7.0からのみ使用できます。 Java 5.0および6.0の現在のリリースには、Xerces 2.6.2が組み込まれています。したがって、これを機能させるには、新しいXercesライブラリを使用する必要があります。つまり、xml-apis.jar
およびxercesImpl.jar
から<jdk-home>/jre/lib/endorsed
へ、およびjaxp.properties
に<jdk-home>/jre
ファイルを作成
javax.xml.validation.SchemaFactory\:http\://www.w3.org/2001/XMLSchema=org.Apache.xerces.jaxp.validation.XMLSchemaFactory
Mavenプラグインjaxb2-maven-pluginを実行すると、同じ問題が発生しました。解析するxsdファイルに明示的に言及した後、それは魅力のように機能しました:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaFiles>MySchema.xsd</schemaFiles>
<outputDirectory>src/main/Java</outputDirectory>
</configuration>
</plugin>