2017-02-26 17 views
0

私は青写真とapache camel v2.12を使用しています。私のルートの1つでは、POSTリクエストを介してxmlを消費する突堤のエンドポイントを公開しています。私は別のバンドルのルートにあるxsdファイルに対してインバウンドxmlを検証したいと思います。私はその依存関係をpomファイルとfeatures.xmlの指定したバンドルに含めました。私は「SRC /メイン/リソースの作業モジュールの下sample.xsd配置した場合、私は、ログファイルApache Camel XML Validator

org.apache.camel.FailedToCreateRouteException: Failed to create route someId at: >>> To[validator:/sample.xsd] <<< in route: Route(someId)[[From[{{jetty.uri... because of Failed to resolve endpoint: validator:///sample.xsd due to: Cannot find resource: /sample.xsd in classpath for URI: /sample.xsd 
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:912)[143:org.apache.camel.camel-core:2.12.0.redhat-610379] 
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:177)[143:org.apache.camel.camel-core:2.12.0.redhat-610379] 
at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:778)[143:org.apache.camel.camel-core:2.12.0.redhat-610379] 
at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:1955)[143:org.apache.camel.camel-core:2.12.0.redhat-610379] 

で、次の例外を取得

<camel:route id="someId"> 
     <camel:from uri="{{jetty.uri}}"/> 
     <camel:to uri="validator:/sample.xsd"/>   
     <camel:convertBodyTo type="java.lang.String"/>  
     <camel:to uri="{{to.target.uri}}" pattern="InOnly"/>    
</camel:route> 

その後、ラクダ:ここ

は私のルートの定義ですバリデーターコンポーネントはルックアップできます。正面からスラッシュ「/」を削除します

<to uri="validator:sample.xsd"/> 

私はスキーマを複製しないようにし、別のバンドルから参照するだけです。

私は、リソースが別のバンドルからXSDファイルを参照する方法助けてくださいロード可能かどうかとjarファイルの下

System.out.println(Test.class.getResource("/sample.xsd")); 

をXSDを見つけることがそのことであるかどうかを確認するためのテストJavaクラスを書きました。

+1

OSGiはこれでは難しいです、あなたはエクスポートする必要があります|これらの2つのバンドルの間にJavaパッケージをインポートし、そのパッケージにXSDファイルを入れてください。ルートパッケージを使用しないでください。 –

+0

あなたの返信をありがとう。私はクラスパスリソースからxsdを引き出し、このBeanエンドポイントを使ってxmlを検証できるカスタムプロセッサーを書きました。 – user2191296

答えて

1

バンドルA(Aは実際のXSDがJAR内にあります)からXSDファイルをエクスポートし、バンドルBからインポートすることができるはずです(BにはJS内にXSDがありません)。これは、クラスのインポート/エクスポートとまったく同じです。

Bundle A 
<Export-Package>my.package.with.xsd.file,*</Export-Package> 

また、バンドルAがファイルを読み取り、バンドルBが消費するOSGIサービスをエクスポートしようとする可能性があります。 Camel Validator ProducerがXSDファイルではなくInputStreamを直接受け入れることができれば問題になる可能性があります。 org.apache.camel.processor.validation.ValidatingProcessorとValidatorEndpointを見てください。しかし、いずれの場合でも、RouteのJava Processorで検証を手動で行うことができます。