@@ -494,6 +494,133 @@ Build a search pattern by concatenating prefix + input + suffix.
494494 ]}
495495]}
496496```
497+
498+ ## Example 6: JDBC query result to typed document (listOrders pattern)
499+
500+ Map JDBC adapter output fields to a typed document. Each field uses full nested path.
501+
502+ ```json
503+ {"type":"MAP","mode":"STANDALONE","nodes":[
504+ {"type":"MAPCOPY","from":"/selectOrdersOutput;2;0/results;2;0/order_id;1;0","to":"/orders;4;0;mypkg.docTypes:OrderCanonical/id;1;0"},
505+ {"type":"MAPCOPY","from":"/selectOrdersOutput;2;0/results;2;0/order_date;1;0","to":"/orders;4;0;mypkg.docTypes:OrderCanonical/date;1;0"},
506+ {"type":"MAPCOPY","from":"/selectOrdersOutput;2;0/results;2;0/status;1;0","to":"/orders;4;0;mypkg.docTypes:OrderCanonical/status;1;0"},
507+ {"type":"MAPCOPY","from":"/selectOrdersOutput;2;0/results;2;0/customer_id;1;0","to":"/orders;4;0;mypkg.docTypes:OrderCanonical/customer;2;0/id;1;0"},
508+ {"type":"MAPCOPY","from":"/selectOrdersOutput;2;0/results;2;0/customer_name;1;0","to":"/orders;4;0;mypkg.docTypes:OrderCanonical/customer;2;0/name;1;0"},
509+ {"type":"MAPDELETE","field":"/selectOrdersOutput;2;0"}
510+ ]}
511+ ```
512+ **Key:** Nested TO paths like `/orders;4;0;.../customer;2;0/name;1;0` create nested doc structures automatically.
513+
514+ ## Example 7: JMS message processing (processOrder pattern)
515+
516+ Receive JMS message, extract body, convert to JSON, persist to DB.
517+
518+ ```json
519+ {"flow":{"type":"ROOT","version":"3.2","cleanup":"true","nodes":[
520+ {"type":"INVOKE","service":"pub.json:documentToJSON","validate-in":"$none","validate-out":"$none","nodes":[
521+ {"type":"MAP","mode":"INPUT","nodes":[
522+ {"type":"MAPCOPY","from":"/JMSMessage;4;0;pub.jms:JMSMessage/body;2;0/data;2;0","to":"/document;2;0"}
523+ ]},
524+ {"type":"MAP","mode":"OUTPUT","nodes":[
525+ {"type":"MAPDELETE","field":"/document;2;0"}
526+ ]}
527+ ]},
528+ {"type":"MAP","mode":"STANDALONE","nodes":[
529+ {"type":"MAPCOPY","from":"/JMSMessage;4;0;pub.jms:JMSMessage/body;2;0/data;2;0","to":"/order;4;0;mypkg.docTypes:OrderCanonical"},
530+ {"type":"MAPDELETE","field":"/JMSMessage;4;0;pub.jms:JMSMessage"}
531+ ]},
532+ {"type":"INVOKE","service":"mypkg.jdbc:createOrder","validate-in":"$none","validate-out":"$none","nodes":[
533+ {"type":"MAP","mode":"INPUT","nodes":[
534+ {"type":"MAPCOPY","from":"/order;4;0;mypkg.docTypes:OrderCanonical/id;1;0","to":"/createOrderInput;2;0/order_id;1;0"},
535+ {"type":"MAPCOPY","from":"/order;4;0;mypkg.docTypes:OrderCanonical/status;1;0","to":"/createOrderInput;2;0/status;1;0"}
536+ ]}
537+ ]}
538+ ]}}
539+ ```
540+
541+ ## Example 8: HTTP response with JSON body (REST API pattern)
542+
543+ Set HTTP response code, content type, and JSON body for a REST endpoint.
544+
545+ ```json
546+ {"type":"INVOKE","service":"pub.flow:setHTTPResponse","validate-in":"$none","validate-out":"$none","nodes":[
547+ {"type":"MAP","mode":"INPUT","nodes":[
548+ {"type":"MAPSET","field":"/httpResponse;2;0/responseCode;1;0","overwrite":"true","d_enc":"XMLValues","mapseti18n":"true",
549+ "data":"<Values version=\"2.0\"><value name=\"xml\">200</value></Values>"},
550+ {"type":"MAPSET","field":"/httpResponse;2;0/reasonPhrase;1;0","overwrite":"true","d_enc":"XMLValues","mapseti18n":"true",
551+ "data":"<Values version=\"2.0\"><value name=\"xml\">OK</value></Values>"},
552+ {"type":"MAPSET","field":"/httpResponse;2;0/contentType;1;0","overwrite":"true","d_enc":"XMLValues","mapseti18n":"true",
553+ "data":"<Values version=\"2.0\"><value name=\"xml\">application/json</value></Values>"}
554+ ]}
555+ ]}
556+ ```
557+
558+ ## Example 9: JMS send pattern (postOrder)
559+
560+ Convert document to XML, send to JMS queue, return HTTP 202.
561+
562+ ```json
563+ {"flow":{"type":"ROOT","version":"3.2","cleanup":"true","nodes":[
564+ {"type":"INVOKE","service":"pub.xml:documentToXMLString","validate-in":"$none","validate-out":"$none","nodes":[
565+ {"type":"MAP","mode":"INPUT","nodes":[
566+ {"type":"MAPCOPY","from":"/request;4;0;mypkg.docTypes:OrderRequest","to":"/document;2;0"}
567+ ]}
568+ ]},
569+ {"type":"INVOKE","service":"pub.jms:send","validate-in":"$none","validate-out":"$none","nodes":[
570+ {"type":"MAP","mode":"INPUT","nodes":[
571+ {"type":"MAPSET","field":"/connectionAliasName;1;0","overwrite":"true","d_enc":"XMLValues","mapseti18n":"true",
572+ "data":"<Values version=\"2.0\"><value name=\"xml\">DEFAULT_IS_JMS_CONNECTION</value></Values>"},
573+ {"type":"MAPSET","field":"/destinationName;1;0","overwrite":"true","d_enc":"XMLValues","mapseti18n":"true",
574+ "data":"<Values version=\"2.0\"><value name=\"xml\">/orders/posts</value></Values>"},
575+ {"type":"MAPSET","field":"/destinationType;1;0","overwrite":"true","d_enc":"XMLValues","mapseti18n":"true",
576+ "data":"<Values version=\"2.0\"><value name=\"xml\">QUEUE</value></Values>"},
577+ {"type":"MAPCOPY","from":"/xmldata;1;0","to":"/JMSMessage;2;0/body;2;0/string;1;0"}
578+ ]}
579+ ]}
580+ ]}}
581+ ```
582+
583+ ## Example 10: REST connector with BRANCH on HTTP status code
584+
585+ Call external REST API, branch on response code, map success/error responses.
586+
587+ ```json
588+ {"type":"SEQUENCE","exit-on":"FAILURE","nodes":[
589+ {"type":"INVOKE","service":"wm.server.openapi:invoke","validate-in":"$none","validate-out":"$none","nodes":[
590+ {"type":"MAP","mode":"INPUT","nodes":[
591+ {"type":"MAPSET","field":"/path;1;0","overwrite":"true","d_enc":"XMLValues","mapseti18n":"true",
592+ "data":"<Values version=\"2.0\"><value name=\"xml\">/customers</value></Values>"},
593+ {"type":"MAPSET","field":"/httpMethod;1;0","overwrite":"true","d_enc":"XMLValues","mapseti18n":"true",
594+ "data":"<Values version=\"2.0\"><value name=\"xml\">POST</value></Values>"},
595+ {"type":"MAPSET","field":"/radNamespace;1;0","overwrite":"false","d_enc":"XMLValues","mapseti18n":"true",
596+ "data":"<Values version=\"2.0\"><value name=\"xml\">mypkg.client:apiDescriptor</value></Values>"}
597+ ]}
598+ ]},
599+ {"type":"BRANCH","switch":"","label-expressions":"true","nodes":[
600+ {"type":"SEQUENCE","label":"code = 201","exit-on":"FAILURE","nodes":[
601+ {"type":"MAP","mode":"STANDALONE","nodes":[
602+ {"type":"MAPCOPY","from":"/response;3;0","to":"/201;2;0"}
603+ ]}
604+ ]},
605+ {"type":"SEQUENCE","label":"code = 400","exit-on":"FAILURE","nodes":[
606+ {"type":"MAP","mode":"STANDALONE","nodes":[
607+ {"type":"MAPCOPY","from":"/response;3;0","to":"/400;2;0"}
608+ ]}
609+ ]},
610+ {"type":"SEQUENCE","label":"$default","exit-on":"FAILURE","nodes":[
611+ {"type":"MAP","mode":"STANDALONE","nodes":[
612+ {"type":"MAPCOPY","from":"/response;3;0","to":"/error;2;0"}
613+ ]}
614+ ]}
615+ ]}
616+ ]}
617+ ```
618+ **Key patterns from real projects (demoOrderManagement, obsCustomerManagement):**
619+ - JDBC results: `/selectOutput;2;0/results;2;0/column;1;0` -> nested typed doc
620+ - JMS body: `/JMSMessage;4;0;pub.jms:JMSMessage/body;2;0/data;2;0`
621+ - HTTP response: `/httpResponse;2;0/responseCode;1;0` etc via MAPSET
622+ - REST connector: `wm.server.openapi:invoke` with path/method/radNamespace + BRANCH on status code
623+ - RecordRef copy: `/source;4;0;pkg:DocType` TO `/target;4;0;pkg:DocType` preserves type
497624"# ;
498625
499626const ADAPTER_SERVICE_REF : & str = r#"# Adapter Service Configuration Reference
0 commit comments