diff options
Diffstat (limited to 'Master/Daten- und Systemintegration/CamelPrototype')
20 files changed, 1151 insertions, 0 deletions
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/.classpath b/Master/Daten- und Systemintegration/CamelPrototype/.classpath new file mode 100644 index 0000000..130901c --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/.classpath @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry including="**/*.java" kind="src" path="src/main/java"/>
+ <classpathentry including="**/*.java" kind="src" path="target/generated/src/main/java"/>
+ <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+ <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/ws/rs/jsr311-api/1.0/jsr311-api-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4.1/mail-1.4.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/xml/soap/saaj-api/1.3/saaj-api-1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/abdera/abdera-core/0.4.0-incubating/abdera-core-0.4.0-incubating.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/abdera/abdera-extensions-json/0.4.0-incubating/abdera-extensions-json-0.4.0-incubating.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/abdera/abdera-extensions-main/0.4.0-incubating/abdera-extensions-main-0.4.0-incubating.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/abdera/abdera-i18n/0.4.0-incubating/abdera-i18n-0.4.0-incubating.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/abdera/abdera-parser/0.4.0-incubating/abdera-parser-0.4.0-incubating.jar"/>
+ <classpathentry kind="var" path="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/asm/asm/2.2.3/asm-2.2.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ws/commons/axiom/axiom-api/1.2.5/axiom-api-1.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ws/commons/axiom/axiom-impl/1.2.5/axiom-impl-1.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/camel/camel-core/2.1.0/camel-core-2.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/camel/camel-core/2.1.0/camel-core-2.1.0-tests.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/camel/camel-csv/2.1.0/camel-csv-2.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/camel/camel-cxf/2.1.0/camel-cxf-2.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/camel/camel-http/2.1.0/camel-http-2.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/camel/camel-jetty/2.1.0/camel-jetty-2.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/camel/camel-mail/2.1.0/camel-mail-2.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/camel/camel-spring/2.1.0/camel-spring-2.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/camel/camel-spring-javaconfig/2.1.0/camel-spring-javaconfig-2.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/camel/camel-velocity/2.1.0/camel-velocity-2.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sourceforge/cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-2.1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/aopalliance/com.springsource.org.aopalliance/1.0.0/com.springsource.org.aopalliance-1.0.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-1.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-1.2.15.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.3/commons-codec-1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-csv/1.0-r706899/commons-csv-1.0-r706899.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.4/commons-lang-2.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/fusesource/commonman/commons-management/1.0/commons-management-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-api/2.2.5/cxf-api-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-common-schemas/2.2.5/cxf-common-schemas-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-common-utilities/2.2.5/cxf-common-utilities-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-rt-bindings-soap/2.2.5/cxf-rt-bindings-soap-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-rt-bindings-xml/2.2.5/cxf-rt-bindings-xml-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-rt-core/2.2.5/cxf-rt-core-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-rt-databinding-aegis/2.2.5/cxf-rt-databinding-aegis-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-rt-databinding-jaxb/2.2.5/cxf-rt-databinding-jaxb-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-rt-frontend-jaxrs/2.2.5/cxf-rt-frontend-jaxrs-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-rt-frontend-jaxws/2.2.5/cxf-rt-frontend-jaxws-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-rt-frontend-simple/2.2.5/cxf-rt-frontend-simple-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-rt-transports-http/2.2.5/cxf-rt-transports-http-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-rt-transports-http-jetty/2.2.5/cxf-rt-transports-http-jetty-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-rt-ws-addr/2.2.5/cxf-rt-ws-addr-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/cxf/cxf-tools-common/2.2.5/cxf-tools-common-2.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/derby/derby/10.4.2.0/derby-10.4.2.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-activation_1.1_spec/1.0.2/geronimo-activation_1.1_spec-1.0.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-annotation_1.0_spec/1.1.1/geronimo-annotation_1.0_spec-1.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-javamail_1.4_spec/1.6/geronimo-javamail_1.4_spec-1.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jaxws_2.1_spec/1.0/geronimo-jaxws_2.1_spec-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.1.1/geronimo-servlet_2.4_spec-1.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-servlet_2.5_spec/1.2/geronimo-servlet_2.5_spec-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-stax-api_1.0_spec/1.0.1/geronimo-stax-api_1.0_spec-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-ws-metadata_2.0_spec/1.1.2/geronimo-ws-metadata_2.0_spec-1.1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-impl/2.1.12/jaxb-impl-2.1.12.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jaxen/jaxen/1.1.1/jaxen-1.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/jettison/jettison/1.1/jettison-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty/6.1.16/jetty-6.1.16.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty-client/6.1.16/jetty-client-6.1.16.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty-sslengine/6.1.16/jetty-sslengine-6.1.16.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty-util/6.1.16/jetty-util-6.1.16.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty-util5/6.1.16/jetty-util5-6.1.16.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.7/junit-4.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jvnet/mock-javamail/mock-javamail/1.7/mock-javamail-1.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/neethi/neethi/2.0.4/neethi-2.0.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/servicemix/bundles/org.apache.servicemix.bundles.javax.mail/1.4.1_2/org.apache.servicemix.bundles.javax.mail-1.4.1_2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/org.springframework.aop/2.5.6/org.springframework.aop-2.5.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/org.springframework.beans/2.5.6/org.springframework.beans-2.5.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/javaconfig/org.springframework.config.java/1.0.0-20090215/org.springframework.config.java-1.0.0-20090215.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/org.springframework.context/2.5.6/org.springframework.context-2.5.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/org.springframework.core/2.5.6/org.springframework.core-2.5.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/org.springframework.test/2.5.6/org.springframework.test-2.5.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/oro/oro/2.0.8/oro-2.0.8.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/sun/xml/messaging/saaj/saaj-impl/1.3.2/saaj-impl-1.3.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/servlet-api/2.5-20081211/servlet-api-2.5-20081211.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-jdk14/1.5.8/slf4j-jdk14-1.5.8.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-aop/2.5.6/spring-aop-2.5.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-beans/2.5.6/spring-beans-2.5.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-context/2.5.6/spring-context-2.5.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-context-support/2.5.6/spring-context-support-2.5.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-core/2.5.6/spring-core-2.5.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-tx/2.5.6/spring-tx-2.5.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/springframework/spring-web/2.5.5/spring-web-2.5.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/velocity/velocity/1.6.2/velocity-1.6.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/wsdl4j/wsdl4j/1.6.2/wsdl4j-1.6.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/woodstox/wstx-asl/3.2.9/wstx-asl-3.2.9.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.8.1/xercesImpl-2.8.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.3.03/xml-apis-1.3.03.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xml-resolver/xml-resolver/1.2/xml-resolver-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/xmlbeans/xmlbeans/2.4.0/xmlbeans-2.4.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ws/commons/schema/XmlSchema/1.4.5/XmlSchema-1.4.5.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="M2_REPO"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/.project b/Master/Daten- und Systemintegration/CamelPrototype/.project new file mode 100644 index 0000000..a61246b --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/.project @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>camelprototype</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ </natures>
+</projectDescription>
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/.settings/org.eclipse.jdt.core.prefs b/Master/Daten- und Systemintegration/CamelPrototype/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..d6bcbfb --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +#Tue Nov 10 12:21:39 CET 2009
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/pom.xml b/Master/Daten- und Systemintegration/CamelPrototype/pom.xml new file mode 100644 index 0000000..b74243b --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/pom.xml @@ -0,0 +1,200 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + <groupId>de.h_da.fbi.dsi.ws0910</groupId> + <artifactId>camelprototype</artifactId> + <packaging>war</packaging> + <version>1.0-SNAPSHOT</version> + <name>H_DA/FBI/DSI Camel Prototype WS2009/2010</name> +
+ <properties> + <cxf-version>2.2.5</cxf-version> + <jetty-version>6.1.9</jetty-version> + <camel-version>2.1.0</camel-version> + </properties> + <repositories> + </repositories> + + <dependencies> + <!-- camel --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core</artifactId> + <version>${camel-version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring-javaconfig</artifactId> + <version>${camel-version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring</artifactId> + <version>${camel-version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-csv</artifactId> + <version>${camel-version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-cxf</artifactId> + <version>${camel-version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-jetty</artifactId> + <version>${camel-version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-velocity</artifactId> + <version>${camel-version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-mail</artifactId> + <version>${camel-version}</version> + </dependency> + <dependency> + <groupId>xerces</groupId> + <artifactId>xercesImpl</artifactId> + <version>2.8.1</version> + </dependency> +
+ <!-- HSQLDB embedded db for OrderSystem stub -->
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.8.0.10</version>
+ </dependency>
+ <!-- Apache Derby embedded db for OrderSystem stub -->
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.4.2.0</version>
+ </dependency>
+ + <!-- cxf --> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-core</artifactId> + <version>${cxf-version}</version> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-frontend-jaxws</artifactId> + <version>${cxf-version}</version> + </dependency> + + <!-- Special Jetty http transport, so we can run mvn jetty:run --> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-transports-http-jetty</artifactId> + <version>${cxf-version}</version> + </dependency> + + <!-- logging --> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>1.2.14</version> + </dependency> + + <!-- cxf web container for unit testing --> + <!--<dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-transports-http-jetty</artifactId> + <version>${cxf-version}</version> + <scope>test</scope> + </dependency>--> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <!--<version>3.8.2</version>-->
+ <version>4.7</version> + <scope>test</scope> + </dependency> + <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>2.5.6</version>
+ </dependency> + <!-- unit testing mail using mock --> + <dependency> + <groupId>org.jvnet.mock-javamail</groupId> + <artifactId>mock-javamail</artifactId> + <version>1.7</version> + <scope>test</scope> + </dependency> + + <!-- Explicitly depend on javax.mail-1.4.1, because 1.4 is corruct--> + <dependency> + <groupId>javax.mail</groupId> + <artifactId>mail</artifactId> + <version>1.4.1</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core</artifactId> + <version>${camel-version}</version> + <scope>test</scope> + <type>test-jar</type> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- to compile with 1.5 --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>1.5</source> + <target>1.5</target> + </configuration> + </plugin> + <!-- CXF wsdl2java generator, will plugin to the compile goal --> + <plugin> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-codegen-plugin</artifactId> + <version>${cxf-version}</version> + <executions> + <execution> + <id>generate-sources</id> + <phase>generate-sources</phase> + <configuration> + <sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot> + <wsdlOptions> + <wsdlOption> + <wsdl>${basedir}/src/main/resources/OrderService.wsdl</wsdl> + </wsdlOption> + </wsdlOptions> + </configuration> + <goals> + <goal>wsdl2java</goal> + </goals> + </execution> + </executions> + </plugin> + <!-- so we can run mvn jetty:run --> + <plugin> + <groupId>org.mortbay.jetty</groupId> + <artifactId>maven-jetty-plugin</artifactId> + <version>${jetty-version}</version> + </plugin> + <!-- allows the route to be ran via 'mvn camel:run' --> + <plugin> + <groupId>org.apache.camel</groupId> + <artifactId>camel-maven-plugin</artifactId> + <version>${camel-version}</version> + </plugin>
+ </plugins> + </build> +</project> diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/FilenameGenerator.java b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/FilenameGenerator.java new file mode 100644 index 0000000..fbf4e04 --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/FilenameGenerator.java @@ -0,0 +1,9 @@ +package de.h_da.fbi.dsi.ws0910.camelprototype;
+
+import org.apache.camel.Exchange;
+
+public class FilenameGenerator {
+ public String getFilename(Exchange exchange) {
+ return "ordermail-"+exchange.getIn().getHeader("orderno")+".txt";
+ }
+}
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/Main.java b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/Main.java new file mode 100644 index 0000000..e3b4315 --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/Main.java @@ -0,0 +1,13 @@ +package de.h_da.fbi.dsi.ws0910.camelprototype; + +public final class Main { + + private Main() { + // do nothing here + } + + public static void main(String[] args) throws Exception { + org.apache.camel.spring.Main.main(args); + } + +} diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderNormalizer.java b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderNormalizer.java new file mode 100644 index 0000000..f7dc857 --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderNormalizer.java @@ -0,0 +1,26 @@ +package de.h_da.fbi.dsi.ws0910.camelprototype;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.dataformat.CsvDataFormat;
+
+public class OrderNormalizer extends RouteBuilder{
+ @Override
+ public void configure() throws Exception {
+ from("direct:new-orders-in")
+ .choice()
+ .when(header("from").isEqualTo(constant("csvinput")))
+ //csv order transformer
+ // convert CSV-File to InputNewOrder that further processing expects
+ .unmarshal(new CsvDataFormat())
+ .bean(OrderTransformer.class, "transformFromCsv")
+ // put the InputNewOrder into the channel
+ .to("direct:normalized-orders")
+
+ .when(header("from").isEqualTo(constant("cxf")))
+ // webservice order transformer
+ // we need to convert the CXF payload to InputNewOrder that further processing expects
+ .convertBodyTo(InputNewOrder.class)
+ // put the InputNewOrder into the channel
+ .to("direct:normalized-orders");
+ }
+}
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderRoutes.java b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderRoutes.java new file mode 100644 index 0000000..19686c7 --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderRoutes.java @@ -0,0 +1,74 @@ +package de.h_da.fbi.dsi.ws0910.camelprototype;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+
+public class OrderRoutes extends RouteBuilder {
+ //OrderSystemAdaptor orderSysAdaptor = new OrderSystemAdaptor();
+ private String email_authuser = null;
+ private String email_authpw = null;
+ private String email_recipient = null;
+
+ public OrderRoutes() {
+ this("neworders@eisy.net.eu.org","crasher@smtp.eisy.net.eu.org","crashm3");
+ }
+ public OrderRoutes(String email_recipient,String email_authuser,String email_authpw) {
+ super();
+ this.email_recipient = email_recipient;
+ this.email_authuser = email_authuser;
+ this.email_authpw = email_authpw;
+ }
+
+ public void configure() throws Exception {
+ // endpoint to our CXF webservice
+ String cxfEndpoint = "cxf://http://localhost:8080/camelprototype/webservices/order"
+ + "?serviceClass=de.h_da.fbi.dsi.ws0910.camelprototype.OrderEndpoint"
+ + "&wsdlURL=OrderService.wsdl";
+
+ from(cxfEndpoint)
+ // set header field to keep track of requester
+ .setHeader("from",constant("cxf"))
+ .to("direct:new-orders-in");
+ from("file://target/csvinput?recursive=true&delete=true")
+ .setHeader("from",constant("csvinput"))
+ .to("direct:new-orders-in");
+
+ from("direct:normalized-orders")
+ // pass the new order to the order management system gateway
+ // function integration
+ .processRef("ordersystemadaptor")
+ // send the notification email
+ .to("direct:sendordermail")
+ // CBR: if the order was sent by a webservice request
+ .choice()
+ .when(header("from").isEqualTo("cxf"))
+ // send a response back to webservice client
+ // return OK as response
+ .process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ OutputNewOrder res = new OutputNewOrder();
+ res.setStatus("0");
+ res.setMessage((String) exchange.getIn().getHeader("orderno"));
+ exchange.getOut().setBody(res,OutputNewOrder.class);
+ }
+ })
+ .otherwise().end();
+
+ // generate order mail file
+ from("direct:sendordermail")
+ // set the file name
+ .setHeader("CamelFileName", bean(FilenameGenerator.class,"getFilename"))
+ // and create the mail body using velocity templating
+ .to("velocity:OrderMailBody.vm")
+ // and store the file
+ .to("file://target/ordermails/");
+
+ // from the file -> send email
+ from("file://target/ordermails/?move=sent")
+ // set the subject of the email
+ .setHeader("subject", constant("New Order notification"))
+ // send the email
+ .to("smtp://"+email_authuser+"?password="+email_authpw+"&to="+email_recipient);
+ }
+}
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderSystem.java b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderSystem.java new file mode 100644 index 0000000..28a06d2 --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderSystem.java @@ -0,0 +1,148 @@ +package de.h_da.fbi.dsi.ws0910.camelprototype;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class OrderSystem {
+
+ private static final String DB_NAME = "jdbc:hsqldb:file:target/db/orderDB";
+ private static final String DB_USER="sa";
+ private static final String DB_PASSWORD="";
+ private static final String DB_DRV = "org.hsqldb.jdbcDriver";
+
+ private static final String CREATE_ORDERTBL_SQL = "CREATE TABLE \"orders\" (" +
+ "orderid INT generated by default as identity (start with 1) PRIMARY KEY, "+
+ "customerno VARCHAR(50) NOT NULL, " +
+ "order_created_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP )";
+ private static final String CREATE_ORDERPOSTBL_SQL = "CREATE TABLE \"orderpos\" (" +
+ "orderposid INT generated by default as identity (start with 1) PRIMARY KEY, "+
+ "orderid INT NOT NULL, "+
+ "articleno VARCHAR(50) NOT NULL,"+
+ "articlename VARCHAR(50) NOT NULL,"+
+ "amount INT NOT NULL )";
+
+ private static final String ORDER_INSERT_SQL = "INSERT INTO \"orders\" " +
+ "(orderid,customerno) VALUES(null,?)";
+ private static final String ORDERPOS_INSERT_SQL = "INSERT INTO \"orderpos\" " +
+ "(orderposid,orderid,articleno,articlename,amount) VALUES(null,?,?,?,?)";
+ private Connection con = null;
+ private static OrderSystem theInstance = null;
+
+ public static OrderSystem getInstance() throws ClassNotFoundException, SQLException {
+ if(theInstance == null) {
+ theInstance = new OrderSystem();
+ }
+ return theInstance;
+ }
+
+ public OrderSystem() throws ClassNotFoundException, SQLException {
+ Class.forName(DB_DRV);
+ initDB();
+ }
+
+ private void initDB() throws SQLException {
+ try {
+ Statement stmt = getDbConnection().createStatement();
+ ResultSet rs = getDbConnection().getMetaData().getTables(null,null, "orders", null);
+ if(!rs.next()) stmt.execute(CREATE_ORDERTBL_SQL);
+ rs = getDbConnection().getMetaData().getTables(null,null, "orderpos", null);
+ if(!rs.next()) stmt.execute(CREATE_ORDERPOSTBL_SQL);
+ stmt.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ private Connection getDbConnection() {
+ if (con == null) {
+ try {
+ con = DriverManager.getConnection(DB_NAME,DB_USER,DB_PASSWORD);
+ } catch (SQLException sqle) {
+ sqle.printStackTrace();
+ //throw new RuntimeException("Error connecting to DB",sqle);
+ }
+ }
+ return con;
+ }
+
+ private String insertNewOrder(InputNewOrder newOrder) {
+ int orderNo = -1;
+ try {
+ PreparedStatement pStmt = getDbConnection().prepareStatement(ORDER_INSERT_SQL);
+ pStmt.setString(1, newOrder.getCustomerNo());
+ pStmt.execute();
+ CallableStatement cstmt = getDbConnection().prepareCall("{CALL IDENTITY()}");
+ ResultSet row = cstmt.executeQuery();
+ if(row.next()) {
+ orderNo = row.getInt(1);
+ }
+ row.close();
+ cstmt.close();
+ if (orderNo != -1) {
+ for(OrderPosition pos : newOrder.getOrderpositions()) {
+ pStmt = getDbConnection().prepareStatement(ORDERPOS_INSERT_SQL);
+ int j = 0;
+ pStmt.setInt(++j, orderNo);
+ pStmt.setString(++j, pos.getArticleNo());
+ pStmt.setString(++j, pos.getArticle());
+ pStmt.setInt(++j, pos.getAmount());
+ pStmt.executeUpdate();
+ }
+ }
+ pStmt.close();
+ } catch (SQLException sqle) {
+ sqle.printStackTrace();
+ }
+ return Integer.toString(orderNo);
+ }
+
+ public synchronized String handleNewOrder(InputNewOrder newOrder) {
+ String orderNum = insertNewOrder(newOrder);
+ return orderNum;
+ }
+ public synchronized void dumpOrders() {
+ StringBuilder dump = new StringBuilder();
+ try {
+ dump.append("=============================\n");
+ dump.append("\tStart Order Dump\n");
+ dump.append("=============================\n");
+ dump.append("OrderID").append("\t").append("CustNo").append("\t");
+ dump.append("ArtNo").append("\t").append("Article").append("\t\t");
+ dump.append("Amount").append("\t").append("Created on").append("\n");
+ dump.append("--------------------------------------------------------\n");
+ Statement stmt = getDbConnection().createStatement();
+ String sql = "SELECT * from \"orders\" AS o JOIN \"orderpos\" AS op ON o.orderid = op.orderid";
+ ResultSet rs = stmt.executeQuery(sql);
+ while(rs.next()) {
+ dump.append(rs.getString("orderid")).append("\t");
+ dump.append(rs.getString("customerno")).append("\t");
+ dump.append(rs.getString("articleno")).append("\t");
+ dump.append(rs.getString("articlename")).append("\t");
+ dump.append(rs.getString("amount")).append("\t");
+ dump.append(rs.getTimestamp("order_created_ts")).append("\n");
+ }
+ rs.close();
+ stmt.close();
+ dump.append("=============================\n");
+ dump.append("\tFinish Order Dump\n");
+ dump.append("=============================\n");
+ System.out.println(dump.toString());
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ public synchronized void shutdown() {
+ try {
+ Statement stmt = getDbConnection().createStatement();
+ stmt.execute("SHUTDOWN");
+ stmt.close();
+ theInstance = null;
+ } catch (SQLException sqle) {
+ sqle.printStackTrace();
+ }
+ }
+}
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderSystemAdaptor.java b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderSystemAdaptor.java new file mode 100644 index 0000000..551454b --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderSystemAdaptor.java @@ -0,0 +1,18 @@ +package de.h_da.fbi.dsi.ws0910.camelprototype;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+
+public class OrderSystemAdaptor implements Processor{
+ private OrderSystem ordersystem;
+ public OrderSystemAdaptor(OrderSystem ordersystem) {
+ super();
+ this.ordersystem = ordersystem;
+ }
+ public void process(Exchange exchange) throws Exception {
+ InputNewOrder newOrder = exchange.getIn().getBody(InputNewOrder.class);
+ // here happens functional integration of a legacy system
+ String orderNum =ordersystem.handleNewOrder(newOrder);
+ exchange.getIn().setHeader("orderno", orderNum);
+ }
+}
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderSystemDerby.java b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderSystemDerby.java new file mode 100644 index 0000000..dff0acf --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderSystemDerby.java @@ -0,0 +1,173 @@ +package de.h_da.fbi.dsi.ws0910.camelprototype;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class OrderSystemDerby {
+
+ private static final String DB_URL = "jdbc:derby:;databaseName=orderDB;create=true;";
+ private static final String DB_DRV = "org.apache.derby.jdbc.EmbeddedDriver";
+
+ private static final String CREATE_ORDERTBL_SQL = "CREATE TABLE \"orders\" (" +
+ "orderid INT generated by default as identity (start with 1) PRIMARY KEY, "+
+ "customerno VARCHAR(50) NOT NULL, " +
+ "order_created_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP )";
+ private static final String CREATE_ORDERPOSTBL_SQL = "CREATE TABLE \"orderpos\" (" +
+ "orderposid INT generated by default as identity (start with 1) PRIMARY KEY, "+
+ "orderid INT NOT NULL, "+
+ "articleno VARCHAR(50) NOT NULL,"+
+ "articlename VARCHAR(50) NOT NULL,"+
+ "amount INT NOT NULL )";
+
+ private static Connection con = null;
+
+ static {
+ String dbdir = System.getProperty("user.dir");
+ dbdir += System.getProperty("file.separator")+"target";
+ dbdir += System.getProperty("file.separator")+"db";
+ System.setProperty("derby.system.home", dbdir);
+ try {
+ Class.forName(DB_DRV);
+
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ initDB();
+ }
+
+ private static void initDB() {
+ try {
+ Statement stmt = getDbConnection().createStatement();
+ ResultSet rs = getDbConnection().getMetaData().getTables(null,"APP", "orders", null);
+ if(!rs.next()) stmt.execute(CREATE_ORDERTBL_SQL);
+ rs = getDbConnection().getMetaData().getTables(null,"APP", "orderpos", null);
+ if(!rs.next()) stmt.execute(CREATE_ORDERPOSTBL_SQL);
+ stmt.close();
+ } catch (SQLException e) {
+ if(!e.getSQLState().equals("X0Y32")) {
+ e.printStackTrace();
+ }
+ }
+ }
+ private static Connection getDbConnection() {
+ if (con == null) {
+ try {
+ con = DriverManager.getConnection(DB_URL);
+ } catch (SQLException sqle) {
+ sqle.printStackTrace();
+ if(!sqle.getSQLState().equals("XBM0J")) {
+ try {
+ Class.forName(DB_DRV);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ try {
+ con = DriverManager.getConnection(DB_URL);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ throw new RuntimeException("Error connecting to DB",sqle);
+ }
+ initDB();
+ } else {
+ shutdown();
+ try {
+ con = DriverManager.getConnection(DB_URL);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ throw new RuntimeException("Error connecting to DB",sqle);
+ }
+ }
+ } catch (NullPointerException npe) {
+ try {
+ Class.forName(DB_DRV);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ initDB();
+ }
+ }
+ return con;
+ }
+
+ private static String insertNewOrder(InputNewOrder newOrder) {
+ int orderNo = -1;
+ try {
+ Statement stmt = getDbConnection().createStatement();
+ String sql = "INSERT INTO \"orders\" (customerno) VALUES('"+newOrder.getCustomerNo()+"')";
+ stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
+ ResultSet row = stmt.getGeneratedKeys();
+ if(row.next()) {
+ orderNo = row.getInt(1);
+ }
+ row.close();
+ if (orderNo != -1) {
+
+ for(OrderPosition pos : newOrder.getOrderpositions()) {
+ sql = "INSERT INTO \"orderpos\" " +
+ "(orderid,articleno,articlename,amount) " +
+ "VALUES("+orderNo+",'"+pos.getArticleNo()+"','"
+ +pos.getArticle()+"',"+pos.getAmount()+")";
+ stmt.executeUpdate(sql);
+ }
+ }
+ stmt.close();
+ } catch (SQLException sqle) {
+ sqle.printStackTrace();
+ }
+ return Integer.toString(orderNo);
+ }
+
+ public static String handleNewOrder(InputNewOrder newOrder) {
+ String orderNum = insertNewOrder(newOrder);
+ return orderNum;
+ }
+ public static void dumpOrders() {
+ StringBuilder dump = new StringBuilder();
+ try {
+ dump.append("=============================\n");
+ dump.append("\tStart Order Dump\n");
+ dump.append("=============================\n");
+ dump.append("OrderID").append("\t").append("CustNo").append("\t");
+ dump.append("ArtNo").append("\t").append("Article").append("\t\t");
+ dump.append("Amount").append("\t").append("Created on").append("\n");
+ dump.append("--------------------------------------------------------\n");
+ Statement stmt = getDbConnection().createStatement();
+ String sql = "SELECT * from \"orders\" AS o JOIN \"orderpos\" AS op ON o.orderid = op.orderid";
+ ResultSet rs = stmt.executeQuery(sql);
+ while(rs.next()) {
+ dump.append(rs.getString("orderid")).append("\t");
+ dump.append(rs.getString("customerno")).append("\t");
+ dump.append(rs.getString("articleno")).append("\t");
+ dump.append(rs.getString("articlename")).append("\t");
+ dump.append(rs.getString("amount")).append("\t");
+ dump.append(rs.getTimestamp("order_created_ts")).append("\n");
+ }
+ rs.close();
+ stmt.close();
+ dump.append("=============================\n");
+ dump.append("\tFinish Order Dump\n");
+ dump.append("=============================\n");
+ System.out.println(dump.toString());
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ public static void shutdown() {
+ boolean gotSQLExc = false;
+ try {
+ DriverManager.getConnection("jdbc:derby:;shutdown=true");
+ } catch (SQLException se) {
+ if ( se.getSQLState().equals("XJ015") ) {
+ gotSQLExc = true;
+ }
+ }
+ if (!gotSQLExc) {
+ System.out.println("Database did not shut down normally");
+ } else {
+ System.out.println("Database shut down normally");
+ }
+ }
+}
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderTransformer.java b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderTransformer.java new file mode 100644 index 0000000..6c27c7b --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderTransformer.java @@ -0,0 +1,25 @@ +package de.h_da.fbi.dsi.ws0910.camelprototype;
+
+import java.util.List;
+import org.apache.camel.Exchange;
+
+public class OrderTransformer {
+ public void transformFromCsv(Exchange ex) {
+ String filename = ex.getIn().getHeader("CamelFileName",String.class);
+ // csv format will generate a List<List<String>> as body
+ // to avoid unchecked casting this ugly thing is necessary
+ List<?> lines = (List<?>) ex.getIn().getBody();
+ InputNewOrder res = new InputNewOrder();
+ String customerNo = filename.split("\\.")[0];
+ res.setCustomerNo(customerNo);
+ for(Object line: lines) {
+ List<?> cols = (List<?>) line;
+ OrderPosition orderPos = new OrderPosition();
+ orderPos.articleNo = (String) cols.get(0);
+ orderPos.article = (String) cols.get(1);
+ orderPos.amount = Integer.parseInt((String) cols.get(2));
+ res.getOrderpositions().add(orderPos);
+ }
+ ex.getIn().setBody(res);
+ }
+}
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/META-INF/spring/camel-context.xml b/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/META-INF/spring/camel-context.xml new file mode 100644 index 0000000..c412226 --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/META-INF/spring/camel-context.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+ <import resource="classpath:META-INF/cxf/cxf.xml"/>
+ <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
+ <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
+
+ <!-- create a camel context as to start Camel -->
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+ <package>de.h_da.fbi.dsi.ws0910.camelprototype</package>
+ </camelContext>
+ <bean id="ordersystem"
+ class="de.h_da.fbi.dsi.ws0910.camelprototype.OrderSystem"
+ destroy-method="shutdown"/>
+ <bean id="ordersystemadaptor"
+ class="de.h_da.fbi.dsi.ws0910.camelprototype.OrderSystemAdaptor">
+ <constructor-arg ref="ordersystem" />
+ </bean>
+</beans>
\ No newline at end of file diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/OrderMailBody.vm b/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/OrderMailBody.vm new file mode 100644 index 0000000..0b85af6 --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/OrderMailBody.vm @@ -0,0 +1,12 @@ +Customer $body.customerNo has placed a new order via $headers.from
+
+Order-No.: $headers.orderno
+Cust.No.: $body.customerNo
+
+Art.-No. Article Amount
+====================================================
+#foreach($orderPos in $body.orderpositions)
+$orderPos.articleNo $orderPos.article $orderPos.amount
+#end
+
+This is an auto generated email. You cannot reply.
\ No newline at end of file diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/OrderService.wsdl b/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/OrderService.wsdl new file mode 100644 index 0000000..296f6be --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/OrderService.wsdl @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://camelprototype.ws0910.dsi.fbi.h_da.de" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="OrderService" targetNamespace="http://camelprototype.ws0910.dsi.fbi.h_da.de">
+ <wsdl:types>
+ <xsd:schema targetNamespace="http://camelprototype.ws0910.dsi.fbi.h_da.de">
+ <xsd:element name="inputNewOrder">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="customerNo" type="xsd:string" />
+ <xsd:element name="orderpositions"
+ type="tns:orderPosition" maxOccurs="unbounded"
+ minOccurs="1">
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="outputNewOrder">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="status" type="xsd:string"></xsd:element>
+ <xsd:element name="message" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+ <xsd:complexType name="orderPosition">
+ <xsd:sequence>
+ <xsd:element name="article" type="xsd:string"></xsd:element>
+
+ <xsd:element name="amount" type="xsd:int"></xsd:element>
+ <xsd:element name="articleNo" type="xsd:string"></xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:schema>
+ </wsdl:types>
+ <wsdl:message name="inputNewOrder">
+ <wsdl:part name="in" element="tns:inputNewOrder"></wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="outputNewOrder">
+ <wsdl:part name="out" element="tns:outputNewOrder"></wsdl:part>
+ </wsdl:message>
+ <wsdl:portType name="OrderEndpoint">
+ <wsdl:operation name="CreateOrder">
+ <wsdl:input message="tns:inputNewOrder" name="input"/>
+ <wsdl:output message="tns:outputNewOrder" name="output"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="OrderServiceBinding" type="tns:OrderEndpoint">
+
+ <soap:binding style="document"
+ transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="CreateOrder">
+
+ <soap:operation
+ soapAction="http://camelprototype.ws0910.dsi.fbi.h_da.de/PlaceNewOrder" />
+ <wsdl:input name="input">
+
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output name="output">
+
+ <soap:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="OrderEndpointService">
+ <wsdl:port binding="tns:OrderServiceBinding" name="OrderService">
+ <soap:address location="http://localhost:8080/camelprototype/webservices/order"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/log4j.properties b/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/log4j.properties new file mode 100644 index 0000000..82dd219 --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/resources/log4j.properties @@ -0,0 +1,22 @@ + +# default properties to initialise log4j +log4j.rootLogger=INFO, console + +# Console appender +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n + +# File appender +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n +log4j.appender.file.file=target/dsi-order.log +log4j.appender.file.append=true + +# settings for specific packages +#log4j.logger.org.springframework=WARN +#log4j.logger.org.apache.cxf=WARN + +# Camel logging +log4j.logger.org.apache.camel=INFO
\ No newline at end of file diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/main/webapp/WEB-INF/web.xml b/Master/Daten- und Systemintegration/CamelPrototype/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..da15020 --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> + + <display-name>DSI CamelPrototype Web Application</display-name> + + <!-- location of spring xml files --> + <context-param> + <param-name>contextConfigLocation</param-name> + <param-value>classpath:camel-config.xml</param-value> + </context-param> + + <!-- the listener that kick-starts Spring --> + <listener> + <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> + </listener> + + <!-- CXF servlet --> + <servlet> + <servlet-name>CXFServlet</servlet-name> + <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> + <load-on-startup>1</load-on-startup> + </servlet> + + <!-- all our webservices are mapped under this URI pattern --> + <servlet-mapping> + <servlet-name>CXFServlet</servlet-name> + <url-pattern>/webservices/*</url-pattern> + </servlet-mapping> + +</web-app> diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/test/java/de/h_da/fbi/dsi/ws0910/camelprototype/CreateOrderRoutesTest.java b/Master/Daten- und Systemintegration/CamelPrototype/src/test/java/de/h_da/fbi/dsi/ws0910/camelprototype/CreateOrderRoutesTest.java new file mode 100644 index 0000000..20a9bbd --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/test/java/de/h_da/fbi/dsi/ws0910/camelprototype/CreateOrderRoutesTest.java @@ -0,0 +1,112 @@ +package de.h_da.fbi.dsi.ws0910.camelprototype;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.jvnet.mock_javamail.Mailbox;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+
+@ContextConfiguration(locations="/CreateOrderRoutesTest-context.xml")
+public class CreateOrderRoutesTest extends AbstractJUnit4SpringContextTests{
+ private static final long WAIT = 2000;
+ private static Mailbox inbox;
+ private static String EMAILRECIPIENT = "neworders@mycompany.com";
+ // should be the same address as we have in our route
+ private static String ADDRESS = "http://localhost:8080/camelprototype/webservices/order";
+
+ protected static OrderEndpoint createCXFClient() {
+ // we use CXF to create a client for us as its easier than JAXWS and works
+ JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
+ factory.setServiceClass(OrderEndpoint.class);
+ factory.setAddress(ADDRESS);
+ return (OrderEndpoint) factory.create();
+ }
+ protected InputNewOrder createWSTestData() {
+ // create input parameter
+ InputNewOrder input = new InputNewOrder();
+ input.setCustomerNo("456");
+ OrderPosition orderPos1 = new OrderPosition();
+ orderPos1.setAmount(2);
+ orderPos1.setArticle("Super Gadget");
+ orderPos1.setArticleNo("7890");
+ input.getOrderpositions().add(orderPos1);
+
+ OrderPosition orderPos2 = new OrderPosition();
+ orderPos2.setAmount(8);
+ orderPos2.setArticle("Mega Gadget");
+ orderPos2.setArticleNo("6543");
+ input.getOrderpositions().add(orderPos2);
+
+ OrderPosition orderPos3 = new OrderPosition();
+ orderPos3.setAmount(3);
+ orderPos3.setArticle("Great Nonsens");
+ orderPos3.setArticleNo("N6543");
+ input.getOrderpositions().add(orderPos3);
+ return input;
+ }
+ private void createCsvTestData() throws IOException {
+ BufferedWriter bw = new BufferedWriter(new FileWriter("target/csvinput/34524.csv"));
+ bw.write("574,One Article,3\n");
+ bw.write("575,Second Article,4\n");
+ bw.write("852,Another Article,5");
+ bw.close();
+ }
+ @Test
+ public void testWebserviceNewOrder() throws Exception {
+ try {
+ // assert mailbox is empty before starting
+ assertEquals("Should not have mails", 0, inbox.size());
+ // create the webservice client
+ OrderEndpoint client = createCXFClient();
+ // create Test Order for webservice testclient
+ InputNewOrder testOrder = createWSTestData();
+ for (int count=1;count<=5;count++) {
+ // send the request
+ OutputNewOrder out = client.createOrder(testOrder);
+ // assert we got a OK back
+ assertEquals("0", out.getStatus());
+ //assert we got an order number back
+ assertFalse("Should have an order number", out.getMessage().isEmpty());
+ System.out.println("Received orderno: "+out.getMessage());
+ // let some time pass to allow Camel to pickup the file and send it as an email
+ Thread.sleep(WAIT);
+ // assert mail box
+ assertEquals("Should have got "+count+" mails", count, inbox.size());
+ }
+ } catch (Exception ex) {
+ throw new Exception("Error executing Webservice Test", ex);
+ }
+ }
+
+ @Test
+ public void testCSVNewOrder() throws Exception {
+ // assert mailbox is empty before starting
+ assertEquals("Should not have mails", 0, inbox.size());
+ // create csv test data
+ createCsvTestData();
+ // let some time pass to allow Camel to pickup the file and send it as an email
+ Thread.sleep(WAIT);
+ // assert mail box
+ assertEquals("Should have got 1 mail", 1, inbox.size());
+ }
+ @Before
+ public void cleanInbox() {
+ inbox.clear();
+ }
+ @BeforeClass
+ public static void setUp() throws Exception {
+ inbox = Mailbox.get(EMAILRECIPIENT);
+ }
+ @AfterClass
+ public static void tearDown() throws Exception {
+ OrderSystem.getInstance().dumpOrders();
+ }
+}
diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/test/resources/CreateOrderRoutesTest-context.xml b/Master/Daten- und Systemintegration/CamelPrototype/src/test/resources/CreateOrderRoutesTest-context.xml new file mode 100644 index 0000000..c485b04 --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/test/resources/CreateOrderRoutesTest-context.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+ <import resource="classpath:META-INF/cxf/cxf.xml"/>
+ <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
+ <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
+
+ <!-- create a camel context as to start Camel -->
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+ <routeBuilder ref="orderroutes" />
+ <routeBuilder ref="ordernormalizer" />
+ </camelContext>
+ <bean id="ordernormalizer" class="de.h_da.fbi.dsi.ws0910.camelprototype.OrderNormalizer"/>
+ <bean id="ordersystem"
+ class="de.h_da.fbi.dsi.ws0910.camelprototype.OrderSystem"
+ destroy-method="shutdown"/>
+ <bean id="ordersystemadaptor"
+ class="de.h_da.fbi.dsi.ws0910.camelprototype.OrderSystemAdaptor">
+ <constructor-arg ref="ordersystem" />
+ </bean>
+ <bean id="orderroutes"
+ class="de.h_da.fbi.dsi.ws0910.camelprototype.OrderRoutes">
+ <constructor-arg index="0" type="java.lang.String" value="neworders@mycompany.com" />
+ <constructor-arg index="1" type="java.lang.String" value="someone@localhost" />
+ <constructor-arg index="2" type="java.lang.String" value="" />
+ </bean>
+</beans>
\ No newline at end of file diff --git a/Master/Daten- und Systemintegration/CamelPrototype/src/test/resources/log4j.properties b/Master/Daten- und Systemintegration/CamelPrototype/src/test/resources/log4j.properties new file mode 100644 index 0000000..6d3a2b3 --- /dev/null +++ b/Master/Daten- und Systemintegration/CamelPrototype/src/test/resources/log4j.properties @@ -0,0 +1,22 @@ + +# default properties to initialise log4j +log4j.rootLogger=INFO, file + +# Console appender +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n + +# File appender +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n +log4j.appender.file.file=target/dsi-order-test.log +log4j.appender.file.append=true + +# settings for specific packages +log4j.logger.org.springframework=WARN +log4j.logger.org.apache.cxf=WARN + +# Camel logging +log4j.logger.org.apache.camel=DEBUG
\ No newline at end of file |
