luigidemasi opened a new issue, #8: URL: https://github.com/apache/camel-kit/issues/8
> Imported from [luigidemasi/camel-kit#11](https://github.com/luigidemasi/camel-kit/issues/11), opened by [luigidemasi](https://github.com/luigidemasi) on 2026-04-29. > Closed by commit [cba7a8e](https://github.com/luigidemasi/camel-kit/commit/cba7a8e899f9f2889b04e92f7a3b6c344ba62e12). --- ## Description Add support for migrating Microsoft BizTalk Server integrations to Apache Camel 4.x YAML DSL. This would extend camel-kit's migration capabilities (currently supporting MuleSoft, Camel 2.x/3.x, and JBoss Fuse) to cover BizTalk orchestrations, maps, schemas, and pipelines. BizTalk Server is widely used in enterprise integration scenarios, and many organizations are looking to modernize away from it. Providing a structured, graph-accelerated migration path — similar to what camel-kit already offers for MuleSoft — would significantly reduce the effort and risk of these migrations. ### Reference Implementation The open-source [BizTalkMigrationStarter](https://github.com/luigidemasi/BizTalkMigrationStarter) project (which migrates BizTalk artifacts to Azure Logic Apps) provides a well-tested reference for parsing BizTalk artifacts. Its parsing strategies — ODX text extraction, BTM functoid/link resolution, BTP XmlSerializer deserialization, and binding LINQ-to-XML parsing — should inform the design of the camel-kit graph parser. ## BizTalk Artifact Types ### Orchestrations (`.odx`) - Primary flow definitions written in XLANG/s - **File format:** Text file with embedded XML — XML content sits between `<?xml` declaration and `#endif` sentinel; binary designer metadata follows - **Namespace:** `http://schemas.microsoft.com/BizTalk/2003/DesignerData` (prefix `om`) - **Key elements:** `Module` → `ServiceDeclaration` → `ServiceBody` → shapes hierarchy - **38+ shape types:** Receive, Send, Construct, Transform, Decide, Switch, Loop, ForEach, While, Parallel, Listen, Call, Scope, Catch, Delay, Expression, Terminate, Suspend, Compensate, Call Rules, Correlation Declaration, etc. - **Ports:** Physical/Logical/Direct bindings with adapter configuration - **Messages:** Typed with direction (In, Out, InOut) and schema references - **Web References:** MethodMessageType elements for SOAP proxy types (no ServiceDeclaration) ### Maps (`.btm`) - XSLT-based data transformations between schemas - **File format:** XML with root element `<mapsource>` - **Key elements:** `SrcTree`, `TrgTree` (schema references), `Functoid` nodes, `Link` nodes - **50+ functoid types:** String (Concatenate, Substring, Replace), Math (Add, Multiply, Modulo), Logical (AND, OR, NOT, comparisons), Looping, Mass Copy, Scripting (custom C#/VB code), Database lookups, Value mapping - **Links:** Wire functoid inputs/outputs with `LinkFrom`/`LinkTo` references and copy directives - **External XSD references:** Source and target schemas loaded from `SchemaReference` elements ### Pipelines (`.btp`) - Receive and send pipeline definitions for message processing - **File format:** XML with root element `<Document>` and `PolicyFilePath` attribute - **Category GUIDs:** Receive (`f66b9f5e-43ff-4f5f-ba46-885348ae1b4e`), Send (`8c6b051c-0ff5-4fc2-9ae5-5016cb726282`) - **Stages:** Decode, Disassemble, Validate, Transform, Encode — each with execution mode (All/FirstMatch) - **30+ built-in components:** XML Disassembler/Assembler, Flat File Disassembler/Assembler, MIME/SMIME Decoder/Encoder, JSON Decoder/Encoder, Party Resolution, XML Validator ### Binding Files (`.xml`) - Port and adapter configuration - **Contains:** Receive locations with transport metadata, send ports with filters and transforms - **Adapter settings:** WCF, FTP, FILE, HTTP, MSMQ, SQL, etc. - **Content-based routing:** Filter expressions on promoted properties ### Schemas (`.xsd`) - W3C XML Schema definitions for message types - Referenced by orchestrations and maps ## Scope ### Graph Parser (`camel-kit-graph`) - New `BizTalkOrchestrationParser implements GraphParser` to parse BizTalk artifacts: - **ODX parsing:** Text extraction (locate XML between markers), then XPath-based element extraction using `om` namespace - **BTM parsing:** XML parsing of `<mapsource>` root, extract functoid chains and schema links - **BTP parsing:** XML deserialization of `Document > Stages > Components` hierarchy - **Binding parsing:** Extract adapter/port configuration for endpoint mapping - **XSD handling:** Schema catalog for message type resolution - New `NodeType` enum values: `BIZTALK_ORCHESTRATION`, `BIZTALK_SHAPE`, `BIZTALK_MAP`, `BIZTALK_FUNCTOID`, `BIZTALK_SCHEMA`, `BIZTALK_PIPELINE`, `BIZTALK_PIPELINE_COMPONENT`, `BIZTALK_PORT`, `BIZTALK_ADAPTER`, `BIZTALK_MESSAGE` - New `EdgeType` enum values: `BIZTALK_ORCHESTRATION_CONTAINS`, `BIZTALK_USES_MAP`, `BIZTALK_USES_SCHEMA`, `BIZTALK_CALLS_ORCHESTRATION`, `BIZTALK_PORT_BINDING`, `BIZTALK_FUNCTOID_CHAIN`, `BIZTALK_PIPELINE_STAGE` - Register parser in `GraphBuilder.parsers` list - Auto-detection via namespace `http://schemas.microsoft.com/BizTalk/2003/DesignerData` for ODX, `<mapsource>` root for BTM, `<Document PolicyFilePath=` for BTP ### Init Command - Add `biztalk` as a valid `--source-platform` option value ### Migration Skill (`/camel-migrate`) - Add BizTalk vendor detection rules (`.odx`, `.btm`, `.btp` files; BizTalk namespaces; pom/csproj with BizTalk references) - Create vendor-specific migration guides: - `guides/biztalk-phase1.md` — Discovery & analysis (orchestration inventory, shape catalog, adapter mapping, schema catalog, functoid complexity assessment, BRD generation) - `guides/biztalk-phase2.md` — Implementation (route design, TDD, YAML generation) - `guides/biztalk-component-mapping.md` — BizTalk adapter → Camel component mapping - `guides/biztalk-map-conversion.md` — BizTalk Map functoid chains → Camel transformation patterns (XSLT, DataSonnet, or bean processing) - `guides/biztalk-expression-mapping.md` — XLANG/s expressions → Camel Simple/OGNL/Groovy expressions - `guides/biztalk-pipeline-mapping.md` — BizTalk pipeline stages → Camel route patterns (interceptors, data formats, validators) ### Component Mapping (initial set) | BizTalk Adapter/Feature | Camel Component | |---|---| | FILE adapter | `camel-file` | | FTP/FTPS adapter | `camel-ftp` | | SFTP adapter | `camel-ftp` (sftp://) | | SQL Server adapter | `camel-sql` / `camel-jdbc` | | WCF-BasicHttp / WCF-WSHttp | `camel-cxf` | | WCF-NetTcp | `camel-netty` | | SOAP adapter | `camel-cxf` | | HTTP/HTTPS adapter | `camel-http` / `camel-platform-http` | | MSMQ adapter | `camel-jms` (ActiveMQ Artemis) | | MQ Series adapter | `camel-jms` (IBM MQ) | | SMTP adapter | `camel-mail` | | Oracle adapter | `camel-jdbc` | | IBM Db2 adapter | `camel-jdbc` | | EventHub adapter | `camel-azure-eventhubs` | | ServiceBus adapter | `camel-azure-servicebus` | | Azure Blob adapter | `camel-azure-storage-blob` | ### Orchestration Shape Mapping (initial set) | BizTalk Shape | Camel EIP / Pattern | |---|---| | Receive (Activate) | `from()` consumer endpoint | | Receive (inline) | `pollEnrich()` / `to()` | | Send | `to()` producer endpoint | | Construct + Transform | `to("xslt:...")` / `transform()` | | Construct + MessageAssignment | `setBody()` / `setHeader()` | | Decide | Choice EIP (`when` / `otherwise`) | | Switch | Choice EIP (multiple `when` branches) | | Loop / ForEach | Loop EIP / Split EIP | | While | Loop EIP with condition | | Parallel Actions | Multicast EIP / Parallel Processing | | Listen | Content-Based Router / competing consumers | | Call (sub-orchestration) | `direct:` route invocation | | Start (async) | `seda:` / `wireTap()` | | Scope | `doTry()` / route grouping | | Catch | `doCatch()` | | Compensation | `onCompletion()` | | Delay | `delay()` EIP | | Expression | `process()` / bean method | | Terminate | `stop()` | | Call Rules (BRE) | `bean()` / rule engine integration | ### Pipeline Stage Mapping (initial set) | BizTalk Pipeline Stage/Component | Camel Pattern | |---|---| | XML Disassembler | `split()` + `unmarshal().jacksonXml()` | | XML Assembler | `marshal().jacksonXml()` / `aggregate()` | | Flat File Disassembler | `unmarshal().flatpack()` / `unmarshal().bindy()` | | Flat File Assembler | `marshal().flatpack()` / `marshal().bindy()` | | JSON Decoder | `unmarshal().jackson()` | | JSON Encoder | `marshal().jackson()` | | XML Validator | `to("validator:schema.xsd")` | | MIME/SMIME Decoder | `unmarshal().mime()` | | MIME/SMIME Encoder | `marshal().mime()` | ## Additional Context - The [BizTalkMigrationStarter](https://github.com/luigidemasi/BizTalkMigrationStarter) project provides proven parsing patterns for all BizTalk artifact types, including edge cases like Web Reference ODX files and scripting functoids - Parser test data should go in `src/test/resources/biztalk/` with sample BizTalk project artifacts (ODX, BTM, BTP, XSD, binding files) - The `/camel-migrate` skill's vendor detection step needs to be updated to recognize BizTalk project structures (`.btproj` files, BizTalk namespaces) - XLANG/s expression mapping to Camel expression languages (Simple, OGNL, Groovy) will require a dedicated expression translator, similar to the `ExpressionMapper` in BizTalkMigrationStarter - Scripting functoids (custom C#/VB code in maps) should be flagged for manual review during migration -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
