From 65bfd5756f65532109fb1f340486ba35cf74c918 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 16 Sep 2010 19:22:12 -0400 Subject: [PATCH] INT-1380 added xml sample --- getting-started/xml/.classpath | 3 + getting-started/xml/.gitignore | 1 + .../com.springsource.sts.config.flow.prefs | 3 + getting-started/xml/pom.xml | 59 +++++++++------ getting-started/xml/readme.txt | 25 ++++++ .../samples/xml/ExternalResupply.java | 9 ++- .../samples/xml/WarehouseDispatch.java | 11 ++- .../samples/xml/orderProcessingSample.xml | 71 ------------------ .../bigBooksSupplierTransformer.xsl | 0 .../META-INF/spring/integration}/order.xml | 0 .../integration}/orderProcessingSample.xml | 2 +- .../samples/xml/BookOrderProcessingTest.java} | 10 ++- .../{main/java => test/resources}/log4j.xml | 10 +-- getting-started/xml/target/classes/log4j.xml | 32 -------- .../xml/BookOrderProcessingSample.class | Bin 2747 -> 0 bytes .../samples/xml/ExternalResupply.class | Bin 979 -> 0 bytes .../samples/xml/StockChecker.class | Bin 1238 -> 0 bytes .../samples/xml/WarehouseDispatch.class | Bin 982 -> 0 bytes .../integration/samples/xml/XmlUtil.class | Bin 1283 -> 0 bytes .../xml/bigBooksSupplierTransformer.xsl | 18 ----- .../integration/samples/xml/order.xml | 11 --- .../xml/target/maven-archiver/pom.properties | 5 -- .../xml/target/xml-2.0.0.BUILD-SNAPSHOT.jar | Bin 9452 -> 0 bytes 23 files changed, 93 insertions(+), 177 deletions(-) create mode 100644 getting-started/xml/.gitignore create mode 100644 getting-started/xml/.settings/com.springsource.sts.config.flow.prefs create mode 100644 getting-started/xml/readme.txt delete mode 100644 getting-started/xml/src/main/java/org/springframework/integration/samples/xml/orderProcessingSample.xml rename getting-started/xml/src/main/{java/org/springframework/integration/samples/xml => resources/META-INF/spring/integration}/bigBooksSupplierTransformer.xsl (100%) rename getting-started/xml/src/main/{java/org/springframework/integration/samples/xml => resources/META-INF/spring/integration}/order.xml (100%) rename getting-started/xml/{target/classes/org/springframework/integration/samples/xml => src/main/resources/META-INF/spring/integration}/orderProcessingSample.xml (97%) rename getting-started/xml/src/{main/java/org/springframework/integration/samples/xml/BookOrderProcessingSample.java => test/java/org/springframework/integration/samples/xml/BookOrderProcessingTest.java} (88%) rename getting-started/xml/src/{main/java => test/resources}/log4j.xml (79%) delete mode 100644 getting-started/xml/target/classes/log4j.xml delete mode 100644 getting-started/xml/target/classes/org/springframework/integration/samples/xml/BookOrderProcessingSample.class delete mode 100644 getting-started/xml/target/classes/org/springframework/integration/samples/xml/ExternalResupply.class delete mode 100644 getting-started/xml/target/classes/org/springframework/integration/samples/xml/StockChecker.class delete mode 100644 getting-started/xml/target/classes/org/springframework/integration/samples/xml/WarehouseDispatch.class delete mode 100644 getting-started/xml/target/classes/org/springframework/integration/samples/xml/XmlUtil.class delete mode 100644 getting-started/xml/target/classes/org/springframework/integration/samples/xml/bigBooksSupplierTransformer.xsl delete mode 100644 getting-started/xml/target/classes/org/springframework/integration/samples/xml/order.xml delete mode 100644 getting-started/xml/target/maven-archiver/pom.properties delete mode 100644 getting-started/xml/target/xml-2.0.0.BUILD-SNAPSHOT.jar diff --git a/getting-started/xml/.classpath b/getting-started/xml/.classpath index 24166ba5..dde3100b 100644 --- a/getting-started/xml/.classpath +++ b/getting-started/xml/.classpath @@ -1,6 +1,9 @@ + + + diff --git a/getting-started/xml/.gitignore b/getting-started/xml/.gitignore new file mode 100644 index 00000000..ea8c4bf7 --- /dev/null +++ b/getting-started/xml/.gitignore @@ -0,0 +1 @@ +/target diff --git a/getting-started/xml/.settings/com.springsource.sts.config.flow.prefs b/getting-started/xml/.settings/com.springsource.sts.config.flow.prefs new file mode 100644 index 00000000..eb28a0f5 --- /dev/null +++ b/getting-started/xml/.settings/com.springsource.sts.config.flow.prefs @@ -0,0 +1,3 @@ +#Thu Sep 16 19:13:50 EDT 2010 +//com.springsource.sts.config.flow.coordinates\:http\://www.springframework.org/schema/integration\:/xml/src/main/resources/META-INF/spring/integration/orderProcessingSample.xml=\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n +eclipse.preferences.version=1 diff --git a/getting-started/xml/pom.xml b/getting-started/xml/pom.xml index c054a1fb..ec401621 100644 --- a/getting-started/xml/pom.xml +++ b/getting-started/xml/pom.xml @@ -2,34 +2,47 @@ 4.0.0 - - org.springframework.integration.samples - spring-integration-samples - 2.0.0.BUILD-SNAPSHOT - + org.springframework.integration.samples xml Spring Integration XML Sample + 2.0.0 + jar + + 2.0.0.M7 + 1.2.15 + 4.7 + org.springframework.integration spring-integration-xml + ${spring.integration.version} + + + log4j + log4j + ${log4j.version} + + + + junit + junit + ${junit.version} - - - repository.springframework.maven.release - Spring Framework Maven Release Repository - http://maven.springframework.org/release - - - repository.springframework.maven.milestone - Spring Framework Maven Milestone Repository - http://maven.springframework.org/milestone - - - repository.springframework.maven.snapshot - Spring Framework Maven Snapshot Repository - http://maven.springframework.org/snapshot - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.5 + 1.5 + -Xlint:all + true + false + + + + + \ No newline at end of file diff --git a/getting-started/xml/readme.txt b/getting-started/xml/readme.txt new file mode 100644 index 00000000..083a5f3a --- /dev/null +++ b/getting-started/xml/readme.txt @@ -0,0 +1,25 @@ +This example demonstrates the following aspects of the XML support available with Spring Integration: +1. XPath Splitter - to split an order with multiple items into several order messages for separate processing. +2. XPath Router - to route messages according to the evaluation of an XPath expression which tests to see if the order item is in stock. +3. XPath Expression - which tests to see if the order item is in stock +3. XSLT Transformer - to transform the payload of the order message into a resupply message where the order item is found to be out of stock. + +To run sample simply execute BookOrderProcessingTest. You should see the following output: + +INFO : org.springframework.integration.samples.xml.WarehouseDispatch - Warehouse dispatching orderItem: + + + 0321200683 + 2 + + +INFO : org.springframework.integration.samples.xml.ExternalResupply - Placing resupply order: + + + + smallbooks + 5 + 1590596439 + + diff --git a/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/ExternalResupply.java b/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/ExternalResupply.java index 3923057e..59cccfd8 100644 --- a/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/ExternalResupply.java +++ b/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/ExternalResupply.java @@ -16,12 +16,17 @@ package org.springframework.integration.samples.xml; +import org.apache.log4j.Logger; import org.w3c.dom.Document; - +/** + * + * @author Jonas Partner + */ public class ExternalResupply { + private static Logger logger = Logger.getLogger(ExternalResupply.class); public void orderResupply(Document resupplyOrder) { - System.out.println("Placing resupply order: " + XmlUtil.docAsString(resupplyOrder)); + logger.info("Placing resupply order: \n" + XmlUtil.docAsString(resupplyOrder)); } } diff --git a/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/WarehouseDispatch.java b/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/WarehouseDispatch.java index 832f8f7a..dc5a8b83 100644 --- a/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/WarehouseDispatch.java +++ b/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/WarehouseDispatch.java @@ -16,12 +16,17 @@ package org.springframework.integration.samples.xml; +import org.apache.log4j.Logger; import org.w3c.dom.Document; - +/** + * + * @author Jonas Partner + */ public class WarehouseDispatch { - + private static Logger logger = Logger.getLogger(WarehouseDispatch.class); + public void dispatch(Document orderItem){ - System.out.println("Warehouse dispatching orderItem: " + XmlUtil.docAsString(orderItem)); + logger.info("Warehouse dispatching orderItem: \n" + XmlUtil.docAsString(orderItem)); } } diff --git a/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/orderProcessingSample.xml b/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/orderProcessingSample.xml deleted file mode 100644 index 62f391c0..00000000 --- a/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/orderProcessingSample.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/bigBooksSupplierTransformer.xsl b/getting-started/xml/src/main/resources/META-INF/spring/integration/bigBooksSupplierTransformer.xsl similarity index 100% rename from getting-started/xml/src/main/java/org/springframework/integration/samples/xml/bigBooksSupplierTransformer.xsl rename to getting-started/xml/src/main/resources/META-INF/spring/integration/bigBooksSupplierTransformer.xsl diff --git a/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/order.xml b/getting-started/xml/src/main/resources/META-INF/spring/integration/order.xml similarity index 100% rename from getting-started/xml/src/main/java/org/springframework/integration/samples/xml/order.xml rename to getting-started/xml/src/main/resources/META-INF/spring/integration/order.xml diff --git a/getting-started/xml/target/classes/org/springframework/integration/samples/xml/orderProcessingSample.xml b/getting-started/xml/src/main/resources/META-INF/spring/integration/orderProcessingSample.xml similarity index 97% rename from getting-started/xml/target/classes/org/springframework/integration/samples/xml/orderProcessingSample.xml rename to getting-started/xml/src/main/resources/META-INF/spring/integration/orderProcessingSample.xml index 62f391c0..d8111e6a 100644 --- a/getting-started/xml/target/classes/org/springframework/integration/samples/xml/orderProcessingSample.xml +++ b/getting-started/xml/src/main/resources/META-INF/spring/integration/orderProcessingSample.xml @@ -61,7 +61,7 @@ + xsl-resource="classpath:/META-INF/spring/integration/bigBooksSupplierTransformer.xsl"/> diff --git a/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/BookOrderProcessingSample.java b/getting-started/xml/src/test/java/org/springframework/integration/samples/xml/BookOrderProcessingTest.java similarity index 88% rename from getting-started/xml/src/main/java/org/springframework/integration/samples/xml/BookOrderProcessingSample.java rename to getting-started/xml/src/test/java/org/springframework/integration/samples/xml/BookOrderProcessingTest.java index a53ccd36..b407a537 100644 --- a/getting-started/xml/src/main/java/org/springframework/integration/samples/xml/BookOrderProcessingSample.java +++ b/getting-started/xml/src/test/java/org/springframework/integration/samples/xml/BookOrderProcessingTest.java @@ -49,13 +49,15 @@ import org.springframework.integration.message.GenericMessage; * * @author Jonas Partner */ -public class BookOrderProcessingSample { +public class BookOrderProcessingTest { public static void main(String[] args) throws Exception { - AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext("orderProcessingSample.xml", - BookOrderProcessingSample.class); + AbstractApplicationContext applicationContext = + new ClassPathXmlApplicationContext("/META-INF/spring/integration/orderProcessingSample.xml", + BookOrderProcessingTest.class); MessageChannel messageChannel = (MessageChannel) applicationContext.getBean("ordersChannel"); - GenericMessage orderMessage = createXmlMessageFromResource("org/springframework/integration/samples/xml/order.xml"); + GenericMessage orderMessage = + createXmlMessageFromResource("META-INF/spring/integration/order.xml"); messageChannel.send(orderMessage); applicationContext.close(); } diff --git a/getting-started/xml/src/main/java/log4j.xml b/getting-started/xml/src/test/resources/log4j.xml similarity index 79% rename from getting-started/xml/src/main/java/log4j.xml rename to getting-started/xml/src/test/resources/log4j.xml index da6411c7..f391e2ed 100644 --- a/getting-started/xml/src/main/java/log4j.xml +++ b/getting-started/xml/src/test/resources/log4j.xml @@ -15,12 +15,8 @@ - - - - - - + + @@ -28,5 +24,5 @@ - + \ No newline at end of file diff --git a/getting-started/xml/target/classes/log4j.xml b/getting-started/xml/target/classes/log4j.xml deleted file mode 100644 index da6411c7..00000000 --- a/getting-started/xml/target/classes/log4j.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/getting-started/xml/target/classes/org/springframework/integration/samples/xml/BookOrderProcessingSample.class b/getting-started/xml/target/classes/org/springframework/integration/samples/xml/BookOrderProcessingSample.class deleted file mode 100644 index ede83c6087213dd6229276f5bdcd765e13dd3c34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2747 zcmb_eX;<4u6uko`GDc)E4V09oWl3s-L20v)Vjy6)(we0qC4r>NSe_VxwH!$<0I_%&Jzf?Y%X(EZlY1)`jQMrVTl*Ai;2Tm;cPQ zDz_@yT4`74KEtI+!!rD7hSp4WlOZu@mqiM#XjjpOOAJ?vh9y>OW=XhDc&REF(nVY6 z)lKdi!GAQE@OKQ4VX63Dz~%{v$qkF4JM+AF0(!#_SjY!JQws;WaDwxD3epT+C#&Ah zDENS(5Qj*&iN6D1^J|q{R~P) z_yxghz9&s(S&Rm$dz6zR76O2s0U7&mn{G(!Rxpg2xO)|3zJ$F%?hn z9m$&V*0SZ)d`k9$n+!dXvw-G?2|CJCY$l*KTooROS@ z?-?G%9icI{;v*x47x*!d!B3}T5G7q%a~&!?L0vs5VNs!DNXh^uiYSf822x#sbryrf zP*l>^!Y$A^QOfztBt@wWG(F+9D<%6j-{ha&^zf-A@Gu5 W^w2RX*dZ8$M2dl3$?cx>Q2iGLp(#fI diff --git a/getting-started/xml/target/classes/org/springframework/integration/samples/xml/ExternalResupply.class b/getting-started/xml/target/classes/org/springframework/integration/samples/xml/ExternalResupply.class deleted file mode 100644 index 0feb94c4a747661dec37e46722dffe64a3aa5bad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 979 zcmbtT+iuf95Iviwb?Umbq)nQXTev4Ft%2}Fs!Cj+qPA)vg2#=s1Q*+Dtv9s&EOjVc3?c?UxQG=C`QNH)pCnp@4pvd1isXO_EVR<1 zed+F#a=NXR;9=9k8pGO|9CS>wJ{|Z0rO%MoCC z5%m~0&m%e&JFdTJAgT^(s59iWoRCoJp2)dp z8qH8VzrPH2TMm>bUixO{3V)9CmdQmzQJ3k302%tDc_nMn&ZU*nI$J+Q?o)bglQq{s z0SjcEkpr!Zv}3q{C9)>?09k?q)<0wU8;Wo9rBkeLe8H6=ZVqvGh>bHuJM}D~OrJq5 Ujv~jXgn|3?d<~h0belor7e=iAH2?qr diff --git a/getting-started/xml/target/classes/org/springframework/integration/samples/xml/StockChecker.class b/getting-started/xml/target/classes/org/springframework/integration/samples/xml/StockChecker.class deleted file mode 100644 index 07d18e2a92fba989ca8a70707020696ba98a97ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1238 zcmb7D+foxj5IvIw7LpBj0-{_LggHh~NMnPURD8UHQ_OBYA@O>&;VCdhr982ynuEQ?73ADMHn$1 z8gzzmGIcx%h9Mn&=w}!%T8=nu)+@q$$t$)X-bL5s_A&P?wQmO_^3?Jfwt7Mv!zctyng_4G0D%q`0`vY-IGYnYH zs;|7M7_R78#TtXA+7?GAicGmjcQIs<)3DAk-btnntRs(y47xAmt|ZwiO-UwM?rf{A zQb(ihh;m@K>Y5CR-V-H*s#~H=cTIF6ZaINl7+9I~FS$+66bF_v>1gK-TvKOBcPd5~ zn!uE`X%(Wih5>pG((ZuvA$mvCpXs0Zi1_;;XPBNt!O1y9Fi*J)7@=6Am5outQ@?0{ zN?b6Gi8kgNIv1gDne+$5GhZdpdyt diff --git a/getting-started/xml/target/classes/org/springframework/integration/samples/xml/WarehouseDispatch.class b/getting-started/xml/target/classes/org/springframework/integration/samples/xml/WarehouseDispatch.class deleted file mode 100644 index 28bc4383ea6cef13c45987964ebe3964d6a80ee4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 982 zcmbtT+iuf95Iviwb&?ud(k5-nE#;b|v3WjqEjr&w_^( zfy4*!QHa^xDwObmkfmAg?#!7pXJ&u?`t}3B4cxMjVz{fKt`qko8Ft@AJP?N}dhf_k zi*CfVRG|~|pzn*=`55@lYaWT7N@B4u<387J&qA7E^?-lij?crc^Q?0qT+Og_M}|`0 zV_2wE+YISP$`d&(AZue0OAISb8H%S#&=Ju~-th%PzNuX9w|OMZetekLJsC6HZ~hm_ z21CXh6J{t?hG>U%*YQ-~>?=13M5r6pb{40wW+DGaMXgV<7J-d*6sQ`NP;rIkuwbd2 z=OmkM=}7RPVPS(|<5&thCQTnE()UD^L5X2|Dqnd*hdjzEB8MlG{LmH z;`}Bv1G8yPSlZaHJUehB1QuId?OV*;DLo1_ov37*a=izmZthojX zSSD+a9B4g3JBE{3A!~wPAWd+<))%aPNAYcb^9WlzUvYMTivwI8VCNVyH}u>@i9Ul` U97T>%2?N*Z1sgIq={AM>Z^KXjbpQYW diff --git a/getting-started/xml/target/classes/org/springframework/integration/samples/xml/XmlUtil.class b/getting-started/xml/target/classes/org/springframework/integration/samples/xml/XmlUtil.class deleted file mode 100644 index 45854e3c0548054cec9610be48a143c540b9606e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1283 zcmbVMTTc@~6#fPZ+b%1u+yvx)?FCs7@m4f3Dv3#f1dzz%vJ7Q$FJyLV@mKg)^aYG0 z`tFZ1p4o-Anl&Uobfz=sobP<+oNxB$uW#Q0EaRDmHinfzRL$^IIDYj=SRStj;=Sqk zl2?T#oxnFk%R6;>Xr6hl`Ob6SO2^fZV#u9XA1u?g{HnQiaKdfL(7ERLj(pD0o-gb% zq+SMxTt_=H20GBmkgYgA->i8DTws*)Ir`3R=IVw;D7XTA#Tn#X-vE>xQQW8bod+YF0INmcDqSblgE2+xe&w|Q7| zrH&jjI{Gl6p`T$+fu2RZYWnY9M{==l*)k9x4cx&XG4*-!g+^w< zNzO}&a{jlnl#(00;)2GN*pQYEQv@R&^|vUyL6U5G+}CwSJv`&;DKDymFbQHw9|fR| z{?S{dRil$hJEOg$c!Bhn$gI<<%)l7BXf - - - - - smallbooks - 5 - - - - - - - - \ No newline at end of file diff --git a/getting-started/xml/target/classes/org/springframework/integration/samples/xml/order.xml b/getting-started/xml/target/classes/org/springframework/integration/samples/xml/order.xml deleted file mode 100644 index cb4c48cb..00000000 --- a/getting-started/xml/target/classes/org/springframework/integration/samples/xml/order.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - 0321200683 - 2 - - - 1590596439 - 1 - - \ No newline at end of file diff --git a/getting-started/xml/target/maven-archiver/pom.properties b/getting-started/xml/target/maven-archiver/pom.properties deleted file mode 100644 index eb873c1a..00000000 --- a/getting-started/xml/target/maven-archiver/pom.properties +++ /dev/null @@ -1,5 +0,0 @@ -#Generated by Maven -#Sat Sep 04 08:22:37 EDT 2010 -version=2.0.0.BUILD-SNAPSHOT -groupId=org.springframework.integration.samples -artifactId=xml diff --git a/getting-started/xml/target/xml-2.0.0.BUILD-SNAPSHOT.jar b/getting-started/xml/target/xml-2.0.0.BUILD-SNAPSHOT.jar deleted file mode 100644 index b12fabb4b41b6ee3ba0400eabed856066e6fe1f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9452 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