[ 
https://issues.apache.org/jira/browse/CAMEL-21555?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen resolved CAMEL-21555.
---------------------------------
    Resolution: Fixed

> Smooks component parses DFDL EDIFACT schema upon the first message arrival 
> only
> -------------------------------------------------------------------------------
>
>                 Key: CAMEL-21555
>                 URL: https://issues.apache.org/jira/browse/CAMEL-21555
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-smooks
>    Affects Versions: 4.9.0
>            Reporter: Claude Mamo
>            Assignee: Claude Mamo
>            Priority: Minor
>             Fix For: 4.10.0
>
>
> Copying the issue from 
> [https://github.com/smooks/smooks-camel-cartridge/issues/262]
> {quote}I am using the Smooks Camel Cartridge together with the EDIFACT 
> cartridge to parse EDIFACT files. I observe that the Smooks processor does 
> not seem to be fully initialized at first. The DFDL schema is parsed only 
> once the first EDIFACT message is processed, as can be seen in the log output 
> below. I would expect that the processor is initialized earlier, once it is 
> created as part of the Camel context.
> Here is my relevant configuration code (Kotlin):
> ```kotlin
> object EdifactParserFactory {
>     private const val schemaPostfix: String = "EDIFACT-Messages.dfdl.xsd"
>     fun mkEdifactParser(
>         edifactDirectory: EdifactDirectory,
>         messageTypes: List<EdiEnergyMessageType>,
>         camelContext: CamelContext
>     ): SmooksProcessor {
>         [..]
>         val schemaUri = "/${edifactDirectory/${schemaPostfix}"
>         val smooks = Smooks()
>         val reader = 
> EdifactReaderConfigurator(schemaUri).setMessageTypes(messageTypeList)
>         reader.cacheOnDisk = true
>         smooks.setReaderConfig(reader)
>         val filterSettings = 
> FilterSettings.newSaxNgSettings().setReaderPoolSize(5)
>         smooks.setFilterSettings(filterSettings)
>         smooks.setExports(Exports(StringResult::class.java))
>         return SmooksProcessor(smooks, camelContext)
>     }
> }
> ```
> For the following (simplified) Camel route:
> ```kotlin
> from(direct("inbound"))
>             .convertBodyTo(InputStream::class.java)
>             .choice()
>                 
> .`when`(header(EDIFACT_DIRECTORY_HEADER).isEqualTo(EdifactDirectory.D04B)).to(direct("D04B-import"))
>                 
> .`when`(header(EDIFACT_DIRECTORY_HEADER).isEqualTo(EdifactDirectory.D07B)).to(direct("D07B-import"))
>                 .otherwise().to("log:error").stop()
>             .end()
> [..]
> val edifactParser = EdifactParserFactory.mkEdifactParser(dir, messageTypes, 
> camelContext)
> [..]
> from(direct("D04B-import")
>       .process(edifactParser)
> ```
> ```log
> [..]
>   .   ____          _            __ _ _
>  /
> / __{_}'{_} __ _ {_}({_})_ __  __ _ \ \ \ \
> ( ( )___ | '_ | '{_}| | '{_} \/ _` | \ \ \ \
>  
> /  __{_})| |{_})| | | | | || (_| |  ) ) ) )
>   '  |___{_}| .{_}{_}|{_}| |{_}|{_}| |{_}_{_}, | / / / /
>  =========|{_}|==============|{_}_{_}/=/{_}/{_}/{_}/
>  :: Spring Boot ::                (v2.7.0)
> 2022-06-27 09:40:22 INFO  ReceiveTestInterchange:55 - Starting 
> ReceiveTestInterchange using Java 17.0.3
> [..]
> 2022-06-27 09:40:25 INFO  ReceiveTestInterchange:61 - Started 
> ReceiveTestInterchange in 3.391 seconds (JVM running for 4.847)
> [..]
> 2022-06-27 09:40:25 INFO  CamelSpringBootExecutionListener:104 - Initialized 
> CamelSpringBootExecutionListener now ready to start CamelContext
> 2022-06-27 09:40:25 INFO  CamelAnnotationsHandler:404 - Starting CamelContext 
> with name [camelContext].
> 2022-06-27 09:40:25 WARN  Scanner:78 - Not scanning classpath for ClassLoader 
> 'jdk.internal.loader.ClassLoaders$AppClassLoader'.  ClassLoader must 
> implement 'java.net.URLClassLoader'.
> 2022-06-27 09:40:25 WARN  Scanner:78 - Not scanning classpath for ClassLoader 
> 'jdk.internal.loader.ClassLoaders$AppClassLoader'.  ClassLoader must 
> implement 'java.net.URLClassLoader'.
> 2022-06-27 09:40:25 INFO  EdifactParserFactory:39 - Created Smooks EDIFACT 
> parser from directory D04B for message(s) [INVOIC, CONTRL]
> 2022-06-27 09:40:26 WARN  Scanner:78 - Not scanning classpath for ClassLoader 
> 'jdk.internal.loader.ClassLoaders$AppClassLoader'.  ClassLoader must 
> implement 'java.net.URLClassLoader'.
> 2022-06-27 09:40:26 WARN  Scanner:78 - Not scanning classpath for ClassLoader 
> 'jdk.internal.loader.ClassLoaders$AppClassLoader'.  ClassLoader must 
> implement 'java.net.URLClassLoader'.
> 2022-06-27 09:40:26 INFO  EdifactParserFactory:39 - Created Smooks EDIFACT 
> parser from directory D07B for message(s) [APERAK]
> 2022-06-27 09:40:26 INFO  AbstractCamelContext:3004 - Apache Camel 3.17.0 
> (camel-1) is starting
> 2022-06-27 09:40:26 INFO  AbstractCamelContext:3222 - Tracing is enabled on 
> CamelContext: camel-1
> 2022-06-27 09:40:26 WARN  SmooksProcessor:259 - Attachments module could not 
> be found: attachments will not be propagated
> 2022-06-27 09:40:26 INFO  SmooksProcessor:266 - SmooksProcessor 
> [configUri=null] Started
> 2022-06-27 09:40:26 WARN  SmooksProcessor:259 - Attachments module could not 
> be found: attachments will not be propagated
> 2022-06-27 09:40:26 INFO  SmooksProcessor:266 - SmooksProcessor 
> [configUri=null] Started
> 2022-06-27 09:40:26 WARN  SmooksProcessor:259 - Attachments module could not 
> be found: attachments will not be propagated
> 2022-06-27 09:40:26 INFO  SmooksProcessor:266 - SmooksProcessor 
> [configUri=null] Started
> 2022-06-27 09:40:26 WARN  SmooksProcessor:259 - Attachments module could not 
> be found: attachments will not be propagated
> 2022-06-27 09:40:26 INFO  SmooksProcessor:266 - SmooksProcessor 
> [configUri=null] Started
> 2022-06-27 09:40:26 WARN  SmooksProcessor:259 - Attachments module could not 
> be found: attachments will not be propagated
> 2022-06-27 09:40:26 INFO  SmooksProcessor:266 - SmooksProcessor 
> [configUri=null] Started
> 2022-06-27 09:40:26 WARN  SmooksProcessor:259 - Attachments module could not 
> be found: attachments will not be propagated
> 2022-06-27 09:40:26 INFO  SmooksProcessor:266 - SmooksProcessor 
> [configUri=null] Started
> 2022-06-27 09:40:26 WARN  SmooksProcessor:259 - Attachments module could not 
> be found: attachments will not be propagated
> 2022-06-27 09:40:26 INFO  SmooksProcessor:266 - SmooksProcessor 
> [configUri=null] Started
> 2022-06-27 09:40:26 WARN  SmooksProcessor:259 - Attachments module could not 
> be found: attachments will not be propagated
> 2022-06-27 09:40:26 INFO  SmooksProcessor:266 - SmooksProcessor 
> [configUri=null] Started
> [..]
> 2022-06-27 09:40:26 INFO  CamelSpringBootApplicationListener:147 - Starting 
> CamelMainRunController to ensure the main thread keeps running
> 2022-06-27 09:40:26 INFO  MainSupport:68 - Apache Camel (Main) 3.17.0 is 
> starting
> 2022-06-27 09:40:26 WARN  SmooksProcessor:259 - Attachments module could not 
> be found: attachments will not be propagated
> 2022-06-27 09:40:26 INFO  SmooksProcessor:266 - SmooksProcessor 
> [configUri=null] Started
> 2022-06-27 09:40:26 WARN  SmooksProcessor:259 - Attachments module could not 
> be found: attachments will not be propagated
> 2022-06-27 09:40:26 INFO  SmooksProcessor:266 - SmooksProcessor 
> [configUri=null] Started
> 2022-06-27 09:40:26 INFO  AbstractCamelContext:3165 - Routes startup (total:6 
> started:6)
> 2022-06-27 09:40:26 INFO  AbstractCamelContext:3170 -     Started 
> D04B-import-route (direct://D04B-import)
> 2022-06-27 09:40:26 INFO  AbstractCamelContext:3170 -     Started 
> D07B-import-route (direct://D07B-import)
> 2022-06-27 09:40:26 INFO  AbstractCamelContext:3170 -     Started 
> edifact-inbound-transfer-route (direct://edifact-inbound-transfer)
> 2022-06-27 09:40:26 INFO  AbstractCamelContext:3170 -     Started 
> inbound-acknowledge-route (direct://inbound-acknowledge)
> 2022-06-27 09:40:26 INFO  AbstractCamelContext:3170 -     Started 
> inbound-route (direct://inbound)
> 2022-06-27 09:40:26 INFO  AbstractCamelContext:3194 - Apache Camel 3.17.0 
> (camel-1) started in 1s351ms (build:78ms init:943ms start:330ms)
> 2022-06-27 09:40:27 INFO  Tracing:264 - *--> [inbound-rout] 
> [from[direct://inbound]           ] Exchange[Id: 
> 583FC68FED10EF5-0000000000000000, BodyType: byte[], ...]
> 2022-06-27 09:40:27 INFO  Tracing:264 -      [inbound-rout] 
> [direct://edifact-inbound-transfer] Exchange[Id: 
> 583FC68FED10EF5-0000000000000000, BodyType: byte[], ...]
> 2022-06-27 09:40:27 INFO  Tracing:264 - ---> [edifact-inbo] 
> [from[direct://edifact-inbound-tra] Exchange[Id: 
> 583FC68FED10EF5-0000000000000000, BodyType: byte[], ...]
> 2022-06-27 09:40:27 INFO  Tracing:264 -      [edifact-inbo] 
> [convertBodyTo[java.io.InputStream] Exchange[Id: 
> 583FC68FED10EF5-0000000000000000, BodyType: byte[], ...]
> 2022-06-27 09:40:27 INFO  Tracing:264 -      [edifact-inbo] 
> [choice[when[{header(EdifactDirect] Exchange[Id: 
> 583FC68FED10EF5-0000000000000000, BodyType: 
> org.apache.camel.converter.stream.ByteArrayInputStreamCache, Body: [Body is 
> instance of org.apache.camel.StreamCache]]
> 2022-06-27 09:40:27 INFO  Tracing:264 -      [edifact-inbo] 
> [direct://D04B-import             ] Exchange[Id: 
> 583FC68FED10EF5-0000000000000000, BodyType: 
> org.apache.camel.converter.stream.ByteArrayInputStreamCache, Body: [Body is 
> instance of org.apache.camel.StreamCache]]
> 2022-06-27 09:40:27 INFO  Tracing:264 - ---> [D04B-import-] 
> [from[direct:\\{{edifactDirectory}}-] Exchange[Id: 
> 583FC68FED10EF5-0000000000000000, BodyType: 
> org.apache.camel.converter.stream.ByteArrayInputStreamCache, Body: [Body is 
> instance of org.apache.camel.StreamCache]]
> 2022-06-27 09:40:27 INFO  Tracing:264 -      [D04B-import-] 
> [ref:\\{{edifactParser}}            ] Exchange[Id: 
> 583FC68FED10EF5-0000000000000000, BodyType: 
> org.apache.camel.converter.stream.ByteArrayInputStreamCache, Body: [Body is 
> instance of org.apache.camel.StreamCache]]
> 2022-06-27 09:40:27 INFO  DataProcessorFactory:106 - Compiling and caching 
> DFDL schema...
> 2022-06-27 09:40:27 INFO  DfdlSchema:117 - Saving compiled DFDL schema to 
> .smooks/dfdl-cartridge/EDIFACT-Interchange-9800488b-61fc-3578-af0d-05483fa510ef-.dfdl.xsd.dat
> 2022-06-27 09:40:37 INFO  Tracing:264 -      [D04B-import-] 
> [Processor@0x22657db1             ] Exchange[Id: 
> 583FC68FED10EF5-0000000000000000, BodyType: String, ...]
> [..]
> ```
> As can be observed on the previous-to-last log entry, the DFDL schema is 
> compiled (or loaded from cache) once the first camel exchange arrives at the 
> Smooks processor only. (Plus, there are some other irregularities that I 
> haven't been able to diagnose yet.). I am running on Kotlin 1.6.20 with JRE 
> 17 as compile target.
>  
> {quote}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to