| この記事の要点 |
|
このエラーは「その位置で許されない要素がある」という診断です。まず構文・接頭辞、名前空間とXSD、その親の内容モデルの順に調べます。順序が自由なスキーマへ、順序固定の対処を当てはめないことが重要です。
このエラーの典型
次の旧メッセージ例は位置の読み方を示す記録です。標準POM 4.0.0でトップレベルのbuildとdependenciesを入れ替えただけの再現結果ではありません。実際のエラーの行番号・親要素・参照XSDを確認してください。
Description Resource Path Location Type
cvc-complex-type.2.4.a: Invalid content
was found starting with element
'dependencies'. One of '{...build,
...profiles, ...repositories}' is expected.
pom.xml /demo line 25 XML Problem
意味: 「dependencies 要素が出てきたが、ここでは build / profiles / repositories のいずれかが期待されている」。現在の検証状態でその要素が許可されないというシグナルです。順序違反のほか、入れ子の間違い・重複・異なる名前空間などでも発生し得ます。期待候補だけで原因を断定しません。
原因: XSD の sequence は順序固定
XML Schema (XSD) には <xsd:sequence> という構造があり、子要素を定義した順に書かなければならない制約があります。ただし、すべてのXMLの親要素がsequenceで定義されているわけではありません。Maven POM 4.0.0のModelは下の抜粋にもあるallです。sequence、all、choiceと出現回数は対象の親ごとに確認します。
<!-- pom.xml の XSD 定義(抜粋) -->
<xsd:complexType name="Model">
<xsd:all>
<xsd:element name="modelVersion" .../>
<xsd:element name="parent" .../>
<xsd:element name="groupId" .../>
<xsd:element name="artifactId" .../>
<xsd:element name="version" .../>
<xsd:element name="packaging" .../>
...
<xsd:element name="dependencies" .../>
<xsd:element name="build" .../>
...
</xsd:all>
</xsd:complexType>
例 1: pom.xml で順序が違う
この見出しと旧例のNG/OK判定を訂正します。 POM 4.0.0のトップレベルではbuildの後にdependenciesを書いても順序だけでNGにはなりません。次の元の例は比較記録として残しますが、コメントのNG判定は誤りです。名前空間と内容を省略しているため、そのまま実行・検証する完成POMでもありません。
<!-- ❌ NG: build より後に dependencies がきている -->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<build>
<plugins>...</plugins>
</build>
<dependencies> <!-- ← cvc-complex-type.2.4.a -->
<dependency>...</dependency>
</dependencies>
</project>
<!-- ✅ OK: dependencies → build の順 -->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<dependencies>
<dependency>...</dependency>
</dependencies>
<build>
<plugins>...</plugins>
</build>
</project>
pom.xml の正しい要素順序
下表は読みやすくまとめる配置例で、XSDが要求する唯一の順序ではありません。 表の順に並べ替えることをエラー解決の条件にしないでください。Model内の要素の重複や、dependenciesの中へbuildを置くような親子の間違いは別に確認します。
| 順 | 要素 |
|---|---|
| 1 | <modelVersion> |
| 2 | <parent> |
| 3 | <groupId>, <artifactId>, <version>, <packaging> |
| 4 | <name>, <description>, <url> |
| 5 | <properties> |
| 6 | <dependencyManagement> |
| 7 | <dependencies> |
| 8 | <build> |
| 9 | <profiles>, <repositories> など |
例 2: web.xml で順序が違う
Servlet 4.0についての旧NG判定も訂正します。 Apache Tomcat配布のweb-app_4_0.xsdは、web-app直下の子要素を任意順で記述できると説明しています。filterの後のcontext-paramだけで順序違反とはいえません。次の例は省略を含む旧記録です。filter内部の必須項目・使用中のDTD/XSD・版は別に照合し、古いDTDの順序規則と混同しないでください。
<!-- ❌ NG: filter の後に context-param -->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="4.0">
<display-name>app</display-name>
<filter>...</filter>
<context-param> <!-- ← cvc-complex-type.2.4.a -->
<param-name>x</param-name>
<param-value>y</param-value>
</context-param>
</web-app>
<!-- ✅ OK: 正しい順序 -->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="4.0">
<display-name>app</display-name>
<context-param>...</context-param>
<filter>...</filter>
<filter-mapping>...</filter-mapping>
<listener>...</listener>
<servlet>...</servlet>
<servlet-mapping>...</servlet-mapping>
<session-config>...</session-config>
<welcome-file-list>...</welcome-file-list>
<error-page>...</error-page>
</web-app>
例 3: Spring XML で xmlns 不足
次のNG例ではcontextだけでなくxsiも未宣言です。未宣言の接頭辞はXSDの内容モデル検証より前の名前空間解析エラーであり、同じcvc-complex-type.2.4.aと断定しません。接頭辞を宣言しても、URIが別だったり対象XSDが読み込まれなかったりすれば、さらに別の検証エラーが残る場合があります。
<!-- ❌ NG: context: の xmlns 未宣言 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<context:component-scan base-package="com.example"/>
</beans>
<!-- ✅ OK: xmlns:context を宣言 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.example"/>
</beans>
対処手順
- エラーメッセージの
One of {...} is expected部分を見る — そこに期待される候補要素が列挙されている - エラーの要素の直接の親、xmlnsのURI、schemaLocationやIDE catalogで実際に参照するXSDと版を確認する。URIの見た目とprefix名だけで判断しない
- その親のsequence/all/choice、minOccurs/maxOccurs、許可される子を確認する。誤った入れ子・綴り・重複を先に照合し、sequenceの順序違反を確認できた場合だけ並べ替える
- 同じXMLを対象XSDで独立に検証し、IDEの結果と比較する。Mavenのモデル読込成功をXSD検証成功と扱わない
- IDEだけで違いが残る場合は参照XSD・catalog・プラグイン版を照合する。
.project/.settingsの削除・作り直しを通常の対処にしない。変更が必要な場合も既存設定と影響を保存・確認する
最終手段: XML 検証を OFF
検証をOFFにしてマーカーが消えてもXMLを修正したことにはなりません。 IDEだけの誤検知を独立した検証で確認した場合に限り、担当者が影響を確認して一時的な除外を検討します。全体の検証停止を一般的な解決策として勧めません。
- Project を右クリック → Properties
- Validation → Enable project specific settings
- XML Validatorの対象・catalog・Build/Manualの現在値を確認する。両方を外して症状だけ隠さない
- 設定差を記録し、必要な変更だけ適用して再検証する。除外した場合も独立した検証と復旧条件を残す
次の旧除外例も、原因を直すものではありません。未解決のファイルを除外して成功扱いにしないでください。
<!-- pom.xml で対象ファイルを Validation 除外 -->
<!-- Eclipse Preferences → Validation → XML Validator → Settings →
Exclude Group で path: **/web.xml 等を追加 -->
FAQ
Q: ビルド・実行は通るのに Eclipse だけエラー
A: IDEとビルドが同じ検証をしているとは限りません。参照先XSD・catalog・版と実際の検証範囲を比較します。古いXSDが原因と決めつけず、ログに読込失敗がないかも確認してください。
Q: pom.xml の順序を自動で正しく並べる
A: 整形とXSD検証は別です。POMのトップレベルを表の順に自動整列する必要はありません。使用中のIDE・プラグインで整形の変更範囲を確認し、親子関係や依存の意味を変えないよう差分を見ます。
Q: cvc-complex-type.2.4.b との違い
A: 番号だけで対処を決めず全文を読みます。2.4.aは許可されない子要素、2.4.bは内容が未完了といった診断で現れます。2.4.cを「想定外+必須欠け」とまとめるのは誤りで、strictなwildcardに一致しても要素宣言を見つけられない診断など、実際の検証器のメッセージを確認してください。
独立検証で確認したこと
| 検体 | 結果と意味 |
|---|---|
| POM 4.0.0でbuild→dependencies/逆順 | 正しい名前空間と最小モデルを用いた両方が公式XSDで有効。順序だけの修正は不要。 |
| 同じPOMでbuildを二重に記述 | XSD検証失敗。順序自由は重複自由ではない。 |
| 同じPOMに未定義の子要素/名前空間なし | それぞれXSD検証失敗。綴り・親・名前空間を照合する。 |
| a,bを定義した最小sequence/all | sequenceはa→bのみ有効、allは両順有効。実際の親の定義によって対処が異なる。 |
| 未宣言のcontext接頭辞 | XML解析段階で失敗。XSDの並べ替えで直す問題ではない。 |
これはlxmlによるXSD/名前空間の独立検証です。Eclipseの特定版のマーカー、Spring起動、Tomcatへのweb.xml配備全体を再現したものではありません。変更後はIDE検査と実際のビルド・起動を別々に確認してください。
一次資料
子ページはありません
- createActionFormにてNullPointerException
- java.lang.NullPointerException: Module 'null' not found
- javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope
- Description Resource Path Location Type cvc-complex-type.2.4.a: Invalid content was found starting with element 'X'
- パス ... に対するアクションのインスタンスがありません
- TLDによると、タグ form の属性 id は無効です
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15