Ich benutze Apache Kamel v2.12 mit Blueprint. In einer meiner Route exponiere ich einen Jetty-Endpunkt, der xml über POST-Anfrage verbraucht. Ich möchte das eingehende xml gegen die xsd-Datei validieren, die sich in der Wurzel eines anderen Pakets befindet. Ich habe diese Abhängigkeit in meine Pom-Datei und das angegebene Bundle in features.xml aufgenommen.Apache Camel XML Validator
Hier ist meine Route Definition:
<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>
ich die folgende Ausnahme in Protokolldatei
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]
Wenn ich unter Arbeitsmodul 'src/main/resources' dann Kamel sample.xsd Platz zu bekommen Validierungskomponente kann nachsehen. Ich entferne Schrägstrich '/' von vorne
Ich möchte vermeiden, Schema duplizieren und beziehen Sie sich auf es von einem anderen Bündel.
Ich schrieb einen Test Java-Klasse zu prüfen, ob Ressource ladbar ist oder nicht, und seine Lage, die XSD unter JAR-Datei
System.out.println(Test.class.getResource("/sample.xsd"));
Bitte helfen zu finden, wie XSD-Datei aus verschiedenen Bündeln zu verweisen.
OSGi ist schwer in diesem, müssen Sie exportieren Importieren Sie ein Java-Paket zwischen diesen beiden Bundles und legen Sie die XSD-Datei in dieses Paket, verwenden Sie nicht das Root-Paket –
Vielen Dank für Ihre Antwort. Ich schrieb einen benutzerdefinierten Prozessor, der Xsd aus der Klassenpfad-Ressource ziehen und xml mit diesem Bean-Endpunkt validieren kann. – user2191296