2011-07-06 16 views
3

私はJEE5 Webサービスの単体テストを作成中です。 Webサービスの動作は、web.xmlファイルで設定された属性に依存します。私はweb.xmlを一定の部分とテスト間で変更された部分に分割したいと思っています。web.xmlにファイルを含める

実際に可能かどうかを確認するために、welcome-file-list属性を分割できるかどうかを確認しようとしました。

web.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd" [ 
    <!ENTITY fragment SYSTEM "fragment.xml"> 
]> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <listener> 
     <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>NewWebService</servlet-name> 
     <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>NewWebService</servlet-name> 
     <url-pattern>/NewWebService</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    &fragment; 
</web-app> 

<?xml version="1.0" encoding="UTF-8"?> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

fragment.xmlは、しかし、私はweb.xmlファイルに検証エラーを取得しています:私は次のように作ってみたsome instructions I foundを使用して:

要素タイプ "web-app"に対して属性 "version"を宣言する必要があります。 [7]
要素タイプ "web-app"に対して属性 "xmlns"を宣言する必要があります。 [7]
要素タイプ "web-app"に対して属性 "xmlns:xsi"を宣言する必要があります。 [7]
要素タイプ "web-app"に対して属性 "xsi:schemaLocation"を宣言する必要があります。 [7]

私は、Webアプリケーションv2.3デベロッパーのDTDと同じファイル内のWebアプリv2.5のスキーマを使用して、問題があることを感覚を得るが、私は私がするつもりか分かりませんそれを回避することができます。

(小さな塊にweb.xmlファイルを分割内の任意の他のアプローチは、あまりにも歓迎されるでしょう!)

更新

私はそうのようなDTDの参照を削除した場合...

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app[ 
    <!ENTITY fragment SYSTEM "fragment.xml"> 
]> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
etc, etc, etc. 

:検証プロセスは web-app_2_5.xsdファイルを無視するかのようにそれが表示されます

...

要素タイプ "web-app"を宣言する必要があります。 [5]
エレメントタイプ "listener"を宣言する必要があります。 [6]
要素タイプ "listener-class"を宣言する必要があります。 [7]
要素タイプ "servlet"を宣言する必要があります。 [9]
など、など、など

+0

Do not do this this!基本的にTomcat固有のセキュリティ悪用を利用しています。これは新しいTomcatバージョンで修正され、必ずしも別のサーバに存在するとは限りません。言い換えれば、このようなweb.xmlを持つwebappはポータブルではありません。関連issueレポート:https://bugzilla.redhat.com/show_bug.cgi?id=1069911 – BalusC

答えて

1

私はepropertiesファイルの存在をチェックする私のWebサービスへのフックを追加することになりました。見つかった場合は、テストモードになっていて、web.xmlで指定された値を使用する代わりに、プロパティファイルからそれらを取得します。それほどエレガントではありませんが、少なくともそれは機能します。プロパティーファイルは@BeforeClassメソッド中にJUnitテストによってWEB-INFディレクトリにコピーされます。この方法の成功を考えれば、私はweb.xmlがウェブアプリケーションの設定を保存するのに最適な場所かどうか疑問に思っていました...

関連する問題