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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

1回答

15614閲覧

web.xml でweb-app にエラーが表示される

karaag

総合スコア0

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

1クリップ

投稿2021/08/22 08:13

web.xml でweb-app にエラーが表示される

以下が現在使っているバージョンになります
java 8.0
tomcat 9.0.52
eclipse oxygen

発生している問題・エラーメッセージ

cvc-id.3: A field of identity constraint 'web-app-servlet-name- uniqueness' matched element 'web-app', but this element does not have a simple type.

該当のソースコード

<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>hello</servlet-name> <servlet-class>info.searchman.HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name> hello </servlet-name> <url-pattern> /servlet/hello </url-pattern> </servlet-mapping> </web-app>

試したこと

xmlns="http://java.sun.com/xml/ns/j2ee"のところでjavaをJAVAと書き換えるとエラーがなくなるという記事を見てなくなったのですが、web上には表示されませんでした。他にはバージョンが疑わしいと思うのですが、調べても良い記事を見つけることができませんでした。

補足情報(FW/ツールのバージョンなど)

以下が現在使っているバージョンになります
java 8.0
tomcat 9.0.52
eclipse oxygen

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xebme

2021/08/26 10:10

<servlet-name>が2箇所にあります。2箇所のhelloが一致しないと思われます。xmlのパーサーの動作を考えると、helloの前後に改行があると別の文字列になり、対応づけができないのかもしれない。 ISO-8859-1はUTF-8(デフォルト)でよいと思います。 Tomcat 9のサーブレットのバージョンは、https://tomcat.apache.org/whichversion.html web.xml の宣言は、https://mkyong.com/web-development/the-web-xml-deployment-descriptor-examples/
guest

回答1

0

試してみた環境

こちらで試した動作環境です。

Java (Oracle)
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

Tomcat
Server version: Apache Tomcat/9.0.46
Server built: May 8 2021 17:35:52 UTC
Server number: 9.0.46.0

Eclipse IDE for Enterprise Java and Web Developers (includes Incubating components)
Version: 2021-06 (4.20.0)
Build id: 20210612-2011

エラーの発生

web-apiのバージョンを試してみた結果、xmlns=“http://java.sun.com/xml/ns/j2ee”のときエラーが起きることがわかりました。起きないのは、xmlns="http://xmlns.jcp.org/xml/ns/javaee”の3.1以降でした。

エラーが起きるバージョン

  • 2.4
  • 2.5
  • 3.0

エラーが起きないバージョン

  • 3.1
  • 4.0

バージョン3.0からweb.xmlがオプションになりました。web.xmlのエラーに関係なくTomcatは起動してサーブレットは正常に動作します。

エラーの箇所と意味

Tomcatのweb.xmlパースには問題がなさそうです。org.apache.tomcat.util.descriptor.web.WebXmlParserを確認しました。3.0と4.0を正しくパースします。

eclipseだけの問題ではないでしょうか。エラーが発生するのは<servlet><servlet-name>の閉じタグの箇所。メッセージの’web-app-servlet-name-uniqueness’はサーブレット名がweb-appを通して一意という制約。servlet-nameがsimple typeではないと言っています。serlvlet-nameはcomplexTypeと定義されているので解釈に苦しみます。xmlns=“http://java.sun.com/xml/ns/j2ee”のときに発生するバグのような...。

対処法

そちらの実行環境制約が分からないのですが、現在のバージョンで、web-apiのバージョンを3.1以上にすればエラーは発生しません。

3.0(エラーあり)

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<web-app xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 5 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 6 version="3.0"> 7 <servlet> 8 <servlet-name>Hello</servlet-name> <!-- cvc-id.3: A field of identity constraint 'web-app-servlet-name-uniqueness' matched element 'web-app', but this element does not have a simple type. --> 9 <servlet-class>q355566.Hello</servlet-class> 10 </servlet> 11 <servlet-mapping> 12 <servlet-name>Hello</servlet-name> 13 <url-pattern>/Hello</url-pattern> 14 </servlet-mapping> 15</web-app>

4.0

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 5 http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 6 version="4.0"> 7 <servlet> 8 <servlet-name>Hello</servlet-name> <!-- cvc-id.3: A field of identity constraint 'web-app-servlet-name-uniqueness' matched element 'web-app', but this element does not have a simple type. --> 9 <servlet-class>q355566.Hello</servlet-class> 10 </servlet> 11 <servlet-mapping> 12 <servlet-name>Hello</servlet-name> 13 <url-pattern>/Hello</url-pattern> 14 </servlet-mapping> 15</web-app>

追記(eclipse設定)

eclipseの設定で、以下のいずれかの方法で、無効にできることを確認しました。
[pereference]->[XML (Wild Web Development)]->[検証及び解決]

  • [検証を使用可能にする]のチェックを外す
  • [検証を使用可能にする]をチェック、[スキーマ・ベースの検証を可能にする]を[なし]

eclipseプラグインの開発者ではないのでこれ以上調べません。もしもプロジェクトごとの設定で無効にできるならそちらを利用してください。

投稿2021/08/28 00:56

編集2021/08/28 23:15
xebme

総合スコア1090

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Goumana

2021/10/16 12:37

同じようなエラーで悩んでいてこちらで解決できました。ありがとうございます><
xebme

2021/10/17 20:49

xmlns="http://java.sun.com/xml/ns/javaee"。xmlnsに指定するuriは存在しなくても良いのですが、sun.comというドメインが存在しないとエラーにするのではないか。存在しないドメインを悪用することができるから、というのが推測です。プラグインのソースコードを読めば考えがわかるかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問