クラスパスからxmlファイルを取得してマーシャリングを解除し、テスト目的で使用したいと思います。私の問題は、それをInputStreamとして取得することです。私はこれらの行を書きましたが、常にnullの結果が得られます。
InputStream is = getClass().getResourceAsStream("WebContent/WEB-INF/classes/testing/"+ COMPLETE_DOCUMENT + ".xml");
もちろん、method引数に表示されるパスは、私のファイルへのパスです。私はいくつかの組み合わせを試しました:
WebContent/WEB-INF/classes/testing/
classpath:testing/
classpath*:testing/
しかし、私は常にInputStream = nullを取得します。
私も切り替えようとしました
ClassLoader.getResourceAsStream(...)
しかし、何も起こりません。リソースへのパスがどういうわけか間違っていると思いますが、どこにあるのかわかりません。私のservlet.xmlから、構文だけでPropertyPlaceholderConfigurerまたはJaxb2Marshallerを構成するクラスパスのリソースを使用します
"classpath:folder/file.xsd"
そしてそれは完璧に機能します。 xmlをロードしたいフォルダーは、上記の例のフォルダーの兄弟です。何が足りないのですか?
EDIT: Spring ClassPathResourceヘルパークラスのアプローチに従おうとすると、奇妙な動作が発生します。前に述べたように、起動時にいくつかのSpringBeanによってクラスパスからいくつかのリソースが既にロードされています。次のようにdardoによって提案されたコードでそのようなリソースへのパスを使用する場合:
ClassPathResource cpr = new ClassPathResource("xmlschemas/lrinode.xsd");
InputStream is = cpr.getInputStream();
まだFileNotFound Exception
を取得します!もちろん、"xmlschemas/lrinode.xsd"
は起動時に正常にロードしたxsdです。アプリケーションのルートから始めて、リソースへのフルパスを使用しても機能しません。
些細なことが欠けていると思い始めています。
Springは、ClassPathResourceという名前のヘルパークラスを提供します
だから次のようなもの:
ClassPathResource cpr = new ClassPathResource("folder/file.xsd");
InputStream is = cpr.getInputStream();
うまくいくはずです、これが役立つことを願っています!
APIドキュメントへのリンク: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/core/io/ClassPathResource.html
サイドノート
また、テスト目的で使用している場合は、xsdにマップされたBeanをワイヤリングすることをお勧めします。
JAXBマーシャラーを調べたいと思うかもしれません
http://static.springsource.org/spring-ws/site/reference/html/oxm.html#oxm-jaxb2-xsd
試したことのない組み合わせが必要です。
getClass().getResourceAsStream("/testing/"+ COMPLETE_DOCUMENT + ".xml");
WebContent/WEB-INF/classes
ディレクトリはすでにクラスパス上にあるはずです。
classpath:
構文は、SpringのResourceLoader
抽象化を使用している場合にのみ機能しますが、使用していません。 Springがclasspath:folder/file.xsd
を自動的に解決するServletContextResourceLoader
を通過するため、servlet.xml
woprksでのclasspath:
の使用法。
スラッシュを先頭にせずにリソース名を指定してClass.getResourceAsStream()
を呼び出すと、現在のパッケージ(つまり、呼び出し元クラスのパッケージ)に関連するリソースを要求していると見なされます。絶対的なリソースパスにするには、リソース名に先頭のスラッシュを追加する必要があります。あなたの場合"/testing/"+ COMPLETE_DOCUMENT + ".xml"