diff --git a/spring-integration-mqtt/README.md b/spring-integration-mqtt/README.md index 3fd8e81..c5e4d4c 100644 --- a/spring-integration-mqtt/README.md +++ b/spring-integration-mqtt/README.md @@ -4,95 +4,5 @@ Spring Integration MQTT Support ####Note: as of version 4.0.0, this extension has been moved to the main [Spring Integration Project](https://github.com/spring-projects/spring-integration) -`inbound` and `outbound` channel adapters are provided for [MQ Telemetry Transport (MQTT)][]. The current implementation uses the [Eclipse Paho][] client. +For a version of this extension that is compatible with Spring Integration 3.0.x/2.2.x, see the [SPR3.x branch](https://github.com/spring-projects/spring-integration-extensions/tree/SPR3.x/spring-integration-mqtt). -__Note:__ Starting with version 4.0.0, this module has been moved to the main [Spring Integration][] project. - -This extension project has essentially the same features, more fully documented in the [main project documentation][] and is compatible with Spring Integration 3.0.x and 2.2.x. - -Currently, the release candidate for the extension is 1.0.0.RC1 and will be released soon. - -[Spring Integration]:https://github.com/spring-projects/spring-integration -[main project documentation]:http://docs.spring.io/spring-integration/docs/4.0.0.BUILD-SNAPSHOT/reference/html/mqtt.html - -## Example Configurations - -```xml - - - -``` - -*Spring Integration* messages sent to the outbound adapter can have headers `mqtt_topic, mqtt_qos, mqtt_retained` which will override the defaults configured on the adapter. - -Inbound messages will have headers - - mqtt_topic - the topic from which the message was received - mqtt_duplicate - true if the message is a duplicate - mqtt_qos - the quality of service - -Both adapters use a `MqttPahoClientFactory` to get a client instance; the same factory also provides connection options from configured properties (such as user/password). The client factory bean (`DefaultMqttPahoClientFactory`) is provided to the adapter using the `client-factory` attribute. When not provided, a default factory instance is used. - -Currently tested with the RabbitMQ MQTT plugin. - -## Maven - -### Repository - - - repository.springframework.maven.milestone - Spring Framework Maven Milestone Repository - http://repo.springsource.org/milestone - - -### Artifact - - - org.springframework.integration - spring-integration-mqtt - 1.0.0.M1 - - -## Support - -Check out the [Spring Integration forums][] and the [spring-integration][spring-integration tag] tag -on [Stack Overflow][]. [Commercial support][] is available, too. - -## Resources - -* [Eclipse Paho][] - -## Related GitHub projects - -* [Spring Integration][] -* [Spring Integration Samples][] -* [Spring Integration Templates][] -* [Spring Integration Dsl Groovy][] -* [Spring Integration Dsl Scala][] -* [Spring Integration Pattern Catalog][] - -For more information, please also don't forget to visit the [Spring Integration][] website. - -[Spring Integration]: https://github.com/SpringSource/spring-integration -[Commercial support]: http://springsource.com/support/springsupport -[Spring Integration forums]: http://forum.springsource.org/forumdisplay.php?42-Integration -[spring-integration tag]: http://stackoverflow.com/questions/tagged/spring-integration -[Spring Integration Samples]: https://github.com/SpringSource/spring-integration-samples -[Spring Integration Templates]: https://github.com/SpringSource/spring-integration-templates/tree/master/si-sts-templates -[Spring Integration Dsl Groovy]: https://github.com/SpringSource/spring-integration-dsl-groovy -[Spring Integration Dsl Scala]: https://github.com/SpringSource/spring-integration-dsl-scala -[Spring Integration Pattern Catalog]: https://github.com/SpringSource/spring-integration-pattern-catalog -[Stack Overflow]: http://stackoverflow.com/faq -[Eclipse Paho]: http://www.eclipse.org/paho/ -[open paho bug]: https://bugs.eclipse.org/bugs/show_bug.cgi?id=382471 -[MQ Telemetry Transport (MQTT)]: http://mqtt.org/ diff --git a/spring-integration-mqtt/build.gradle b/spring-integration-mqtt/build.gradle deleted file mode 100644 index 01d4842..0000000 --- a/spring-integration-mqtt/build.gradle +++ /dev/null @@ -1,239 +0,0 @@ -description = 'Spring Integration MQTT Adapter' - -buildscript { - repositories { - maven { url 'https://repo.springsource.org/plugins-snapshot' } - } -} - -apply plugin: 'java' -apply from: "${rootProject.projectDir}/publish-maven.gradle" -apply plugin: 'eclipse' -apply plugin: 'idea' - -group = 'org.springframework.integration' - -repositories { - maven { url 'http://repo.spring.io/milestone' } - maven { url 'https://repo.eclipse.org/content/repositories/paho-releases/' } - maven { url 'http://repo.springsource.org/plugins-release' } -} - -sourceCompatibility=1.6 -targetCompatibility=1.6 - -ext { - junitVersion = '4.11' - log4jVersion = '1.2.17' - mockitoVersion = '1.9.5' - springVersion = '4.0.5.RELEASE' - springIntegrationVersion = '4.0.1.RELEASE' - idPrefix = 'mqtt' - - linkHomepage = 'https://github.com/SpringSource/spring-integration-extensions' - linkCi = 'https://build.springsource.org/browse/INTEXT' - linkIssue = 'https://jira.springsource.org/browse/INTEXT' - linkScmUrl = 'https://github.com/SpringSource/spring-integration-extensions' - linkScmConnection = 'https://github.com/SpringSource/spring-integration-extensions.git' - linkScmDevConnection = 'git@github.com:SpringSource/spring-integration-extensions.git' -} - -eclipse { - project { - natures += 'org.springframework.ide.eclipse.core.springnature' - } -} - -sourceSets { - test { - resources { - srcDirs = ['src/test/resources', 'src/test/java'] - } - } -} - -// See http://www.gradle.org/docs/current/userguide/dependency_management.html#sub:configurations -// and http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.ConfigurationContainer.html -configurations { - jacoco //Configuration Group used by Sonar to provide Code Coverage using JaCoCo -} - -dependencies { - compile "org.springframework.integration:spring-integration-core:$springIntegrationVersion" - compile "org.eclipse.paho:mqtt-client:0.4.0" - testCompile "org.springframework.integration:spring-integration-test:$springIntegrationVersion" - testCompile "junit:junit-dep:$junitVersion" - testCompile "log4j:log4j:$log4jVersion" - testCompile "org.mockito:mockito-all:$mockitoVersion" - testCompile "org.springframework:spring-test:$springVersion" - jacoco group: "org.jacoco", name: "org.jacoco.agent", version: "0.6.2.201302030002", classifier: "runtime" -} - - -// enable all compiler warnings; individual projects may customize further -ext.xLintArg = '-Xlint:all' -[compileJava, compileTestJava]*.options*.compilerArgs = [xLintArg] - -test { - // suppress all console output during testing unless running `gradle -i` - logging.captureStandardOutput(LogLevel.INFO) - jvmArgs "-javaagent:${configurations.jacoco.asPath}=destfile=${buildDir}/jacoco.exec,includes=*" -} - -task sourcesJar(type: Jar) { - classifier = 'sources' - from sourceSets.main.allJava -} - -task javadocJar(type: Jar) { - classifier = 'javadoc' - from javadoc -} - -artifacts { - archives sourcesJar - archives javadocJar -} - -apply plugin: 'sonar-runner' - -sonarRunner { - sonarProperties { - property "sonar.jacoco.reportPath", "${buildDir.name}/jacoco.exec" - property "sonar.links.homepage", linkHomepage - property "sonar.links.ci", linkCi - property "sonar.links.issue", linkIssue - property "sonar.links.scm", linkScmUrl - property "sonar.links.scm_dev", linkScmDevConnection - property "sonar.java.coveragePlugin", "jacoco" - } -} - -task api(type: Javadoc) { - group = 'Documentation' - description = 'Generates the Javadoc API documentation.' - title = "${rootProject.description} ${version} API" - options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED - options.author = true - options.header = rootProject.description - options.overview = 'src/api/overview.html' - - source = sourceSets.main.allJava - classpath = project.sourceSets.main.compileClasspath - destinationDir = new File(buildDir, "api") -} - -task schemaZip(type: Zip) { - group = 'Distribution' - classifier = 'schema' - description = "Builds -${classifier} archive containing all " + - "XSDs for deployment at static.springframework.org/schema." - - def Properties schemas = new Properties(); - def shortName = idPrefix.replaceFirst("${idPrefix}-", '') - - project.sourceSets.main.resources.find { - it.path.endsWith('META-INF/spring.schemas') - }?.withInputStream { schemas.load(it) } - - for (def key : schemas.keySet()) { - File xsdFile = project.sourceSets.main.resources.find { - it.path.endsWith(schemas.get(key)) - } - assert xsdFile != null - into ("integration/${shortName}") { - from xsdFile.path - } - } - -} - -task docsZip(type: Zip) { - group = 'Distribution' - classifier = 'docs' - description = "Builds -${classifier} archive containing the api " + - "for deployment at static.springframework.org/spring-integration/docs." - - from('src/dist') { - include 'changelog.txt' - } - - from (api) { - into 'api' - } -} - -task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) { - group = 'Distribution' - classifier = 'dist' - description = "Builds -${classifier} archive, containing all jars and docs, " + - "suitable for community download page." - - ext.baseDir = "${project.name}-${project.version}"; - - from('src/dist') { - include 'readme.txt' - include 'license.txt' - include 'notice.txt' - into "${baseDir}" - } - - from(zipTree(docsZip.archivePath)) { - into "${baseDir}/docs" - } - - from(zipTree(schemaZip.archivePath)) { - into "${baseDir}/schema" - } - - into ("${baseDir}/libs") { - from project.jar - from project.sourcesJar - from project.javadocJar - } -} - -// Create an optional "with dependencies" distribution. -// Not published by default; only for use when building from source. -task depsZip(type: Zip, dependsOn: distZip) { zipTask -> - group = 'Distribution' - classifier = 'dist-with-deps' - description = "Builds -${classifier} archive, containing everything " + - "in the -${distZip.classifier} archive plus all dependencies." - - from zipTree(distZip.archivePath) - - gradle.taskGraph.whenReady { taskGraph -> - if (taskGraph.hasTask(":${zipTask.name}")) { - def projectName = rootProject.name - def artifacts = new HashSet() - - rootProject.configurations.runtime.resolvedConfiguration.resolvedArtifacts.each { artifact -> - def dependency = artifact.moduleVersion.id - if (!projectName.equals(dependency.name)) { - artifacts << artifact.file - } - } - - zipTask.from(artifacts) { - into "${distZip.baseDir}/deps" - } - } - } -} - -artifacts { - archives distZip - archives docsZip - archives schemaZip -} - -task dist(dependsOn: assemble) { - group = 'Distribution' - description = 'Builds -dist, -docs and -schema distribution archives.' -} - -task wrapper(type: Wrapper) { - description = 'Generates gradlew[.bat] scripts' - gradleVersion = '1.6' -} diff --git a/spring-integration-mqtt/gradle.properties b/spring-integration-mqtt/gradle.properties deleted file mode 100644 index 2db7ae7..0000000 --- a/spring-integration-mqtt/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -version=4.0.0.BUILD-SNAPSHOT diff --git a/spring-integration-mqtt/gradle/wrapper/gradle-wrapper.jar b/spring-integration-mqtt/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7f1e239..0000000 Binary files a/spring-integration-mqtt/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/spring-integration-mqtt/gradle/wrapper/gradle-wrapper.properties b/spring-integration-mqtt/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 6281daf..0000000 --- a/spring-integration-mqtt/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Wed May 15 15:57:24 EDT 2013 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.6-bin.zip diff --git a/spring-integration-mqtt/gradlew b/spring-integration-mqtt/gradlew deleted file mode 100755 index e61422d..0000000 --- a/spring-integration-mqtt/gradlew +++ /dev/null @@ -1,164 +0,0 @@ -#!/bin/bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" -APP_HOME="`pwd -P`" -cd "$SAVED" - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/spring-integration-mqtt/gradlew.bat b/spring-integration-mqtt/gradlew.bat deleted file mode 100644 index aec9973..0000000 --- a/spring-integration-mqtt/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/spring-integration-mqtt/publish-maven.gradle b/spring-integration-mqtt/publish-maven.gradle deleted file mode 100644 index 113adda..0000000 --- a/spring-integration-mqtt/publish-maven.gradle +++ /dev/null @@ -1,61 +0,0 @@ -apply plugin: 'maven' - -ext.optionalDeps = [] -ext.providedDeps = [] - -ext.optional = { optionalDeps << it } -ext.provided = { providedDeps << it } - -install { - repositories.mavenInstaller { - customizePom(pom, project) - } -} - -def customizePom(pom, gradleProject) { - pom.whenConfigured { generatedPom -> - // respect 'optional' and 'provided' dependencies - gradleProject.optionalDeps.each { dep -> - generatedPom.dependencies.find { it.artifactId == dep.name }?.optional = true - } - gradleProject.providedDeps.each { dep -> - generatedPom.dependencies.find { it.artifactId == dep.name }?.scope = 'provided' - } - - // eliminate test-scoped dependencies (no need in maven central poms) - generatedPom.dependencies.removeAll { dep -> - dep.scope == 'test' - } - - // add all items necessary for maven central publication - generatedPom.project { - name = gradleProject.description - description = gradleProject.description - url = 'https://github.com/SpringSource/spring-integration-extensions' - organization { - name = 'SpringSource' - url = 'http://springsource.org' - } - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0.txt' - distribution 'repo' - } - } - scm { - url = 'https://github.com/SpringSource/spring-integration-extensions' - connection = 'scm:git:git://github.com/SpringSource/spring-integration-extensions' - developerConnection = 'scm:git:git://github.com/SpringSource/spring-integration-extensions' - } - - developers { - developer { - id = 'not specified' - name = 'Gary Russell' - email = 'not specified' - } - } - } - } -} diff --git a/spring-integration-mqtt/src/api/overview.html b/spring-integration-mqtt/src/api/overview.html deleted file mode 100644 index fb0198b..0000000 --- a/spring-integration-mqtt/src/api/overview.html +++ /dev/null @@ -1,22 +0,0 @@ - - -This document is the API specification for Spring Integration -
-
-

- For further API reference and developer documentation, see the - Spring - Integration reference documentation. - That documentation contains more detailed, developer-targeted - descriptions, with conceptual overviews, definitions of terms, - workarounds, and working code examples. -

- -

- If you are interested in commercial training, consultancy, and - support for Spring Integration, please visit - http://www.springsource.com -

-
- - diff --git a/spring-integration-mqtt/src/dist/changelog.txt b/spring-integration-mqtt/src/dist/changelog.txt deleted file mode 100644 index 672b7ef..0000000 --- a/spring-integration-mqtt/src/dist/changelog.txt +++ /dev/null @@ -1,15 +0,0 @@ -Spring Integration MqttAdapter Adapter CHANGELOG -========================================= - -For the full detailed changelog, see: -https://.... - - -Changes in version 1.0 GA (insert date here) -https://.... - - -*** GENERAL *** - -Upgraded Spring Framework dependency to ... -... diff --git a/spring-integration-mqtt/src/dist/license.txt b/spring-integration-mqtt/src/dist/license.txt deleted file mode 100644 index 261eeb9..0000000 --- a/spring-integration-mqtt/src/dist/license.txt +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/spring-integration-mqtt/src/dist/notice.txt b/spring-integration-mqtt/src/dist/notice.txt deleted file mode 100644 index f62045a..0000000 --- a/spring-integration-mqtt/src/dist/notice.txt +++ /dev/null @@ -1,21 +0,0 @@ - ======================================================================== - == NOTICE file corresponding to section 4 d of the Apache License, == - == Version 2.0, in this case for the Spring Integration distribution. == - ======================================================================== - - This product includes software developed by - the Apache Software Foundation (http://www.apache.org). - - The end-user documentation included with a redistribution, if any, - must include the following acknowledgement: - - "This product includes software developed by the Spring Framework - Project (http://www.springframework.org)." - - Alternatively, this acknowledgement may appear in the software itself, - if and wherever such third-party acknowledgements normally appear. - - The names "Spring", "Spring Framework", and "Spring Integration" must - not be used to endorse or promote products derived from this software - without prior written permission. For written permission, please contact - enquiries@springsource.com. diff --git a/spring-integration-mqtt/src/dist/readme.txt b/spring-integration-mqtt/src/dist/readme.txt deleted file mode 100644 index de9fd7e..0000000 --- a/spring-integration-mqtt/src/dist/readme.txt +++ /dev/null @@ -1,13 +0,0 @@ -Spring Integration Mqtt Adapters ------------------------------------ - -To find out what has changed since any earlier releases, see 'changelog.txt'. - -Please consult the documentation located within the 'docs/reference' directory -of this release and also visit the official Spring Integration home at -http://www.springsource.org/spring-integration - -There you will find links to the forum, issue tracker, and several other resources. - -See https://github.com/SpringSource/spring-integration#readme for additional -information including instructions on building from source. diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParser.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParser.java deleted file mode 100644 index 09e155b..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParser.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.config.xml; - -import org.springframework.beans.factory.support.AbstractBeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.config.xml.AbstractChannelAdapterParser; -import org.springframework.integration.config.xml.IntegrationNamespaceUtils; -import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter; -import org.w3c.dom.Element; - -/** - * The MqttAdapter Message Driven Channel adapter parser - * - * @author Gary Russell - * @since 1.0 - * - */ -public class MqttMessageDrivenChannelAdapterParser extends AbstractChannelAdapterParser { - - - @Override - protected AbstractBeanDefinition doParse(Element element, ParserContext parserContext, String channelName) { - - BeanDefinitionBuilder builder = BeanDefinitionBuilder - .genericBeanDefinition(MqttPahoMessageDrivenChannelAdapter.class); - - MqttParserUtils.parseCommon(element, builder); - builder.addConstructorArgValue(element.getAttribute("topics")); - builder.addPropertyReference("outputChannel", channelName); - IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "error-channel"); - - return builder.getBeanDefinition(); - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParser.java~ b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParser.java~ deleted file mode 100644 index b86b774..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParser.java~ +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.config.xml; - -import org.springframework.beans.factory.support.AbstractBeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.config.xml.AbstractChannelAdapterParser; -import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter; -import org.w3c.dom.Element; - -/** - * The MqttAdapter Message Driven Channel adapter parser - * - * @author Gary Russell - * @since 1.0 - * - */ -public class MqttMessageDrivenChannelAdapterParser extends AbstractChannelAdapterParser { - - - @Override - protected AbstractBeanDefinition doParse(Element element, ParserContext parserContext, String channelName) { - - BeanDefinitionBuilder builder = BeanDefinitionBuilder - .genericBeanDefinition(MqttPahoMessageDrivenChannelAdapter.class); - - MqttParserUtils.parseCommon(element, builder); - builder.addConstructorArgValue(element.getAttribute("topics")); - builder.addPropertyReference("outputChannel", channelName); - IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "error-channel"); - - return builder.getBeanDefinition(); - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttNamespaceHandler.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttNamespaceHandler.java deleted file mode 100644 index ea99d71..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttNamespaceHandler.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.config.xml; - -import org.springframework.integration.config.xml.AbstractIntegrationNamespaceHandler; - -/** - * The namespace handler for the MqttAdapter namespace - * - * @author Gary Russell - * @since 1.0 - * - */ -public class MqttNamespaceHandler extends AbstractIntegrationNamespaceHandler { - - /* (non-Javadoc) - * @see org.springframework.beans.factory.xml.NamespaceHandler#init() - */ - public void init() { - this.registerBeanDefinitionParser("message-driven-channel-adapter", new MqttMessageDrivenChannelAdapterParser()); - this.registerBeanDefinitionParser("outbound-channel-adapter", new MqttOutboundChannelAdapterParser()); - } -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttOutboundChannelAdapterParser.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttOutboundChannelAdapterParser.java deleted file mode 100644 index e9635c8..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttOutboundChannelAdapterParser.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.config.xml; - -import org.springframework.beans.factory.support.AbstractBeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.config.xml.AbstractOutboundChannelAdapterParser; -import org.springframework.integration.config.xml.IntegrationNamespaceUtils; -import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler; -import org.springframework.util.StringUtils; -import org.w3c.dom.Element; - -/** - * The parser for the MqttAdapter Outbound Channel Adapter. - * - * @author Gary Russell - * @since 1.0 - * - */ -public class MqttOutboundChannelAdapterParser extends AbstractOutboundChannelAdapterParser { - - @Override - protected boolean shouldGenerateId() { - return false; - } - - @Override - protected boolean shouldGenerateIdAsFallback() { - return true; - } - - @Override - protected AbstractBeanDefinition parseConsumer(Element element, ParserContext parserContext) { - - final BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MqttPahoMessageHandler.class); - - MqttParserUtils.parseCommon(element, builder); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "default-topic"); - if (StringUtils.hasText(element.getAttribute("converter")) && - (StringUtils.hasText(element.getAttribute("default-qos")) || - StringUtils.hasText(element.getAttribute("default-retained")))) { - parserContext.getReaderContext().error("If a 'converter' is provided, you cannot provide " + - "'default-qos' or 'default-retained'", element); - } - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "default-qos"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "default-retained"); - - return builder.getBeanDefinition(); - - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttParserUtils.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttParserUtils.java deleted file mode 100644 index 123cf5f..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttParserUtils.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.config.xml; - -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.integration.config.xml.IntegrationNamespaceUtils; -import org.springframework.util.StringUtils; -import org.w3c.dom.Element; - -/** - * Contains various utility methods for parsing Mqtt Adapter - * specific namesspace elements as well as for the generation of the the - * respective {@link BeanDefinition}s. - * - * @author Gary Russell - * @since 1.0 - * - */ -public final class MqttParserUtils { - - /** Prevent instantiation. */ - private MqttParserUtils() { - throw new AssertionError(); - } - - public static void parseCommon(Element element, BeanDefinitionBuilder builder) { - builder.addConstructorArgValue(element.getAttribute("url")); - builder.addConstructorArgValue(element.getAttribute("client-id")); - String clientFactory = element.getAttribute("client-factory"); - if (StringUtils.hasText(clientFactory)) { - builder.addConstructorArgReference(clientFactory); - } - IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "converter"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "auto-startup"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "phase"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "send-timeout"); - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/package-info.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/package-info.java deleted file mode 100644 index 9c047f7..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Provides parser classes to provide Xml namespace support for the MqttAdapter components. - */ -package org.springframework.integration.mqtt.config.xml; diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/core/DefaultMqttPahoClientFactory.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/core/DefaultMqttPahoClientFactory.java deleted file mode 100644 index 2445bb4..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/core/DefaultMqttPahoClientFactory.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.core; - -import java.util.Properties; - -import javax.net.SocketFactory; - -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttClientPersistence; -import org.eclipse.paho.client.mqttv3.MqttConnectOptions; -import org.eclipse.paho.client.mqttv3.MqttException; - -/** - * Creates a default {@link MqttClient} and a set of options as configured. - * @author Gary Russell - * @author Gunnar Hillert - * @since 1.0 - * - */ -public class DefaultMqttPahoClientFactory implements MqttPahoClientFactory { - - private volatile Boolean cleanSession; - - private volatile Integer connectionTimeout; - - private volatile Integer keepAliveInterval; - - private volatile String password; - - private volatile SocketFactory socketFactory; - - private volatile Properties sslProperties; - - private volatile String userName; - - private volatile MqttClientPersistence persistence; - - private volatile Will will; - - public void setCleanSession(Boolean cleanSession) { - this.cleanSession = cleanSession; - } - - public void setConnectionTimeout(Integer connectionTimeout) { - this.connectionTimeout = connectionTimeout; - } - - public void setKeepAliveInterval(Integer keepAliveInterval) { - this.keepAliveInterval = keepAliveInterval; - } - - public void setPassword(String password) { - this.password = password; - } - - public void setSocketFactory(SocketFactory socketFactory) { - this.socketFactory = socketFactory; - } - - public void setSslProperties(Properties sslProperties) { - this.sslProperties = sslProperties; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - /** - * Will be used to set the "Last Will and Testament" (LWT) for the connection. - * - * @see MqttConnectOptions - */ - public void setWill(Will will) { - this.will = will; - } - - public void setPersistence(MqttClientPersistence persistence) { - this.persistence = persistence; - } - - @Override - public MqttClient getClientInstance(String url, String clientId) throws MqttException { - return new MqttClient(url, clientId, this.persistence); - } - - @Override - public MqttConnectOptions getConnectionOptions() { - MqttConnectOptions options = new MqttConnectOptions(); - if (this.cleanSession != null) { - options.setCleanSession(this.cleanSession); - } - if (this.connectionTimeout != null) { - options.setConnectionTimeout(this.connectionTimeout); - } - if (this.keepAliveInterval != null) { - options.setKeepAliveInterval(this.keepAliveInterval); - } - if (this.password != null) { - options.setPassword(this.password.toCharArray()); - } - if (this.socketFactory != null) { - options.setSocketFactory(this.socketFactory); - } - if (this.sslProperties != null) { - options.setSSLProperties(this.sslProperties); - } - if (this.userName != null) { - options.setUserName(this.userName); - } - if (this.will != null) { - options.setWill(this.will.getTopic(), this.will.getPayload(), this.will.getQos(), this.will.isRetained()); - } - return options; - } - - public static class Will { - - private final String topic; - - private final byte[] payload; - - private final int qos; - - private final boolean retained; - - public Will(String topic, byte[] payload, int qos, boolean retained) { - this.topic = topic; - this.payload = payload; - this.qos = qos; - this.retained = retained; - } - - protected String getTopic() { - return topic; - } - - protected byte[] getPayload() { - return payload; - } - - protected int getQos() { - return qos; - } - - protected boolean isRetained() { - return retained; - } - - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/core/MqttPahoClientFactory.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/core/MqttPahoClientFactory.java deleted file mode 100644 index d7dcf74..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/core/MqttPahoClientFactory.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.core; - -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttConnectOptions; -import org.eclipse.paho.client.mqttv3.MqttException; - -/** - * @author Gary Russell - * @since 1.0 - * - */ -public interface MqttPahoClientFactory { - - MqttClient getClientInstance(String url, String clientId) throws MqttException; - - MqttConnectOptions getConnectionOptions(); -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/core/package-info.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/core/package-info.java deleted file mode 100644 index 1488613..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/core/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Provides core classes of the MqttAdapter module. - */ -package org.springframework.integration.mqtt.core; diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/AbstractMqttMessageDrivenChannelAdapter.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/AbstractMqttMessageDrivenChannelAdapter.java deleted file mode 100644 index 5e21c72..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/AbstractMqttMessageDrivenChannelAdapter.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.inbound; - -import org.springframework.integration.endpoint.MessageProducerSupport; -import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter; -import org.springframework.integration.mqtt.support.MqttMessageConverter; -import org.springframework.util.Assert; - -/** - * Abstract class for MQTT Message-Driven Channel Adapters. - * @author Gary Russell - * @since 1.0 - * - */ -public abstract class AbstractMqttMessageDrivenChannelAdapter extends MessageProducerSupport { - - private final String url; - - private final String clientId; - - private final String[] topic; - - private volatile MqttMessageConverter converter; - - public AbstractMqttMessageDrivenChannelAdapter(String url, String clientId, String... topic) { - Assert.hasText(url, "'url' cannot be null or empty"); - Assert.hasText(clientId, "'clientId' cannot be null or empty"); - Assert.notNull(topic, "'topics' cannot be null"); - Assert.isTrue(topic.length > 0, "'topics' cannot be empty"); - Assert.noNullElements(topic, "'topics' cannot have null elements"); - this.url = url; - this.clientId = clientId; - this.topic = topic; - } - - public void setConverter(MqttMessageConverter converter) { - Assert.notNull(converter, "'converter' cannot be null"); - this.converter = converter; - } - - protected String getUrl() { - return url; - } - - protected String getClientId() { - return clientId; - } - - protected MqttMessageConverter getConverter() { - return converter; - } - - protected String[] getTopic() { - return topic; - } - - @Override - protected void onInit() { - super.onInit(); - if (this.converter == null) { - this.converter = new DefaultPahoMessageConverter(); - } - } - - @Override - public String getComponentType(){ - return "mqtt:inbound-channel-adapter"; - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/MqttPahoMessageDrivenChannelAdapter.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/MqttPahoMessageDrivenChannelAdapter.java deleted file mode 100644 index 99be20b..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/MqttPahoMessageDrivenChannelAdapter.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.inbound; - -import java.util.Arrays; -import java.util.concurrent.ScheduledFuture; - -import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; -import org.eclipse.paho.client.mqttv3.MqttCallback; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; - -import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory; -import org.springframework.integration.mqtt.core.MqttPahoClientFactory; -import org.springframework.messaging.Message; - -/** - * Eclipse Paho Implementation. - * - * @author Gary Russell - * @since 1.0 - * - */ -public class MqttPahoMessageDrivenChannelAdapter extends AbstractMqttMessageDrivenChannelAdapter - implements MqttCallback { - - private final MqttPahoClientFactory clientFactory; - - private volatile MqttClient client; - - private volatile ScheduledFuture reconnectFuture; - - private volatile boolean connected; - - - public MqttPahoMessageDrivenChannelAdapter(String url, String clientId, MqttPahoClientFactory clientFactory, - String... topic) { - super(url, clientId, topic); - this.clientFactory = clientFactory; - } - - public MqttPahoMessageDrivenChannelAdapter(String url, String clientId, String... topic) { - this(url, clientId, new DefaultMqttPahoClientFactory(), topic); - } - - @Override - protected void doStart() { - super.doStart(); - try { - this.connectAndSubscribe(); - } - catch (Exception e) { - logger.error("Exception while connecting and subscribing, retrying", e); - this.scheduleReconnect(); - } - } - - @Override - protected void doStop() { - this.cancelReconnect(); - super.doStop(); - try { - this.client.unsubscribe(this.getTopic()); - } - catch (MqttException e) { - logger.error("Exception while unsubscribing", e); - } - try { - this.client.disconnect(); - } - catch (MqttException e) { - logger.error("Exception while disconnecting", e); - } - try { - this.client.close(); - } - catch (MqttException e) { - logger.error("Exception while closing", e); - } - this.connected = false; - this.client = null; - } - - private void connectAndSubscribe() throws MqttException { - this.client = this.clientFactory.getClientInstance(this.getUrl(), this.getClientId()); - this.client.connect(this.clientFactory.getConnectionOptions()); - try { - this.client.subscribe(this.getTopic()); - } - catch (MqttException e) { - this.client.disconnect(); - throw e; - } - if (this.client.isConnected()) { - this.client.setCallback(this); - this.connected = true; - if (this.reconnectFuture != null) { - this.cancelReconnect(); - } - if (logger.isDebugEnabled()) { - logger.debug("Connected and subscribed to " + Arrays.asList(this.getTopic())); - } - } - } - - private synchronized void cancelReconnect() { - if (this.reconnectFuture != null) { - this.reconnectFuture.cancel(false); - this.reconnectFuture = null; - } - } - - private void scheduleReconnect() { - try { - this.reconnectFuture = this.getTaskScheduler().scheduleWithFixedDelay(new Runnable() { - - @Override - public void run() { - try { - if (logger.isDebugEnabled()) { - logger.debug("Attempting reconnect"); - } - if (!connected) { - connectAndSubscribe(); - } - } - catch (MqttException e) { - logger.error("Exception while connecting and subscribing", e); - } - } - }, 10000); - } - catch (Exception e) { - logger.error("Failed to schedule reconnect", e); - } - } - - @Override - public void connectionLost(Throwable cause) { - this.logger.error("Lost connection:" + cause.getMessage() + "; retrying..."); - this.connected = false; - this.scheduleReconnect(); - } - - @Override - public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { - Message message = this.getConverter().toMessage(topic, mqttMessage); - try { - this.sendMessage(message); - } - catch (RuntimeException e) { - logger.error("Unhandled exception for " + message.toString(), e); - throw e; - } - } - - @Override - public void deliveryComplete(IMqttDeliveryToken token) { - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/MqttPahoMessageDrivenChannelAdapter.java~ b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/MqttPahoMessageDrivenChannelAdapter.java~ deleted file mode 100644 index 55b760a..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/MqttPahoMessageDrivenChannelAdapter.java~ +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.inbound; - -import java.util.concurrent.ScheduledFuture; - -import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; -import org.eclipse.paho.client.mqttv3.MqttCallback; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; - -import org.springframework.integration.Message; -import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory; -import org.springframework.integration.mqtt.core.MqttPahoClientFactory; - -/** - * Eclipse Paho Implementation. - * - * @author Gary Russell - * @since 1.0 - * - */ -public class MqttPahoMessageDrivenChannelAdapter extends AbstractMqttMessageDrivenChannelAdapter - implements MqttCallback { - - private final MqttPahoClientFactory clientFactory; - - private volatile MqttClient client; - - private volatile ScheduledFuture reconnectFuture; - - private volatile boolean connected; - - - public MqttPahoMessageDrivenChannelAdapter(String url, String clientId, MqttPahoClientFactory clientFactory, - String... topic) { - super(url, clientId, topic); - this.clientFactory = clientFactory; - } - - public MqttPahoMessageDrivenChannelAdapter(String url, String clientId, String... topic) { - this(url, clientId, new DefaultMqttPahoClientFactory(), topic); - } - - @Override - protected void doStart() { - super.doStart(); - try { - this.connectAndSubscribe(); - } - catch (Exception e) { - logger.error("Exception while connecting and subscribing, retrying", e); - this.scheduleReconnect(); - } - } - - @Override - protected void doStop() { - this.cancelReconnect(); - super.doStop(); - try { - this.client.unsubscribe(this.getTopic()); - } - catch (MqttException e) { - logger.error("Exception while unsubscribing", e); - } - try { - this.client.disconnect(); - } - catch (MqttException e) { - logger.error("Exception while disconnecting", e); - } - try { - this.client.close(); - } - catch (MqttException e) { - logger.error("Exception while closing", e); - } - this.connected = false; - this.client = null; - } - - private void connectAndSubscribe() throws MqttException { - this.client = this.clientFactory.getClientInstance(this.getUrl(), this.getClientId()); - this.client.connect(this.clientFactory.getConnectionOptions()); - try { - this.client.subscribe(this.getTopic()); - } - catch (MqttException e) { - this.client.disconnect(); - throw e; - } - if (this.client.isConnected()) { - this.client.setCallback(this); - this.connected = true; - if (this.reconnectFuture != null) { - this.cancelReconnect(); - } - if (logger.isDebugEnabled()) { - logger.debug("Connected and subscribed to " + Arrays.asList(this.getTopic())); - } - } - } - - private synchronized void cancelReconnect() { - if (this.reconnectFuture != null) { - this.reconnectFuture.cancel(false); - this.reconnectFuture = null; - } - } - - private void scheduleReconnect() { - try { - this.reconnectFuture = this.getTaskScheduler().scheduleWithFixedDelay(new Runnable() { - - @Override - public void run() { - try { - if (logger.isDebugEnabled()) { - logger.debug("Attempting reconnect"); - } - if (!connected) { - connectAndSubscribe(); - } - } - catch (MqttException e) { - logger.error("Exception while connecting and subscribing", e); - } - } - }, 10000); - } - catch (Exception e) { - logger.error("Failed to schedule reconnect", e); - } - } - - @Override - public void connectionLost(Throwable cause) { - this.logger.error("Lost connection:" + cause.getMessage() + "; retrying..."); - this.connected = false; - this.scheduleReconnect(); - } - - @Override - public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { - Message message = this.getConverter().toMessage(topic, mqttMessage); - try { - this.sendMessage(message); - } - catch (RuntimeException e) { - logger.error("Unhandled exception for " + message.toString(), e); - throw e; - } - } - - @Override - public void deliveryComplete(IMqttDeliveryToken token) { - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/package-info.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/package-info.java deleted file mode 100644 index 5dc35d5..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Provides inbound Spring Integration MqttAdapter components. - */ -package org.springframework.integration.mqtt.inbound; diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/outbound/AbstractMqttMessageHandler.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/outbound/AbstractMqttMessageHandler.java deleted file mode 100644 index 3dc7240..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/outbound/AbstractMqttMessageHandler.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.mqtt.outbound; - -import org.eclipse.paho.client.mqttv3.MqttMessage; - -import org.springframework.context.SmartLifecycle; -import org.springframework.integration.MessageHandlingException; -import org.springframework.integration.handler.AbstractMessageHandler; -import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter; -import org.springframework.integration.mqtt.support.MqttHeaders; -import org.springframework.integration.mqtt.support.MqttMessageConverter; -import org.springframework.messaging.Message; -import org.springframework.util.Assert; - -/** - * Abstract class for MQTT outbound channel adapters. - * @author Gary Russell - * @since 1.0 - * - */ -public abstract class AbstractMqttMessageHandler extends AbstractMessageHandler implements SmartLifecycle { - - private final String url; - - private final String clientId; - - private volatile String defaultTopic; - - private volatile int defaultQos = 0; - - private volatile boolean defaultRetained = false; - - private volatile MqttMessageConverter converter; - - private boolean running; - - private volatile int phase; - - private volatile boolean autoStartup; - - public AbstractMqttMessageHandler(String url, String clientId) { - Assert.hasText(url, "'url' cannot be null or empty"); - Assert.hasText(clientId, "'clientId' cannot be null or empty"); - this.url = url; - this.clientId = clientId; - } - - public void setDefaultTopic(String defaultTopic) { - this.defaultTopic = defaultTopic; - } - - public void setDefaultQos(int defaultQos) { - this.defaultQos = defaultQos; - } - - public void setDefaultRetained(boolean defaultRetain) { - this.defaultRetained = defaultRetain; - } - - public void setConverter(MqttMessageConverter converter) { - Assert.notNull(converter, "'converter' cannot be null"); - this.converter = converter; - } - - protected String getUrl() { - return url; - } - - protected String getClientId() { - return clientId; - } - - @Override - protected void onInit() throws Exception { - super.onInit(); - if (this.converter == null) { - this.converter = new DefaultPahoMessageConverter(this.defaultQos, this.defaultRetained); - } - } - - @Override - public final void start() { - this.doStart(); - } - - protected abstract void doStart(); - - @Override - public final void stop() { - this.doStop(); - } - - protected abstract void doStop(); - - @Override - public boolean isRunning() { - return this.running; - } - - @Override - public int getPhase() { - return this.phase; - } - - public void setPhase(int phase) { - this.phase = phase; - } - - public void setAutoStartup(boolean autoStartup) { - this.autoStartup = autoStartup; - } - - @Override - public boolean isAutoStartup() { - return this.autoStartup; - } - - @Override - public void stop(Runnable callback) { - this.stop(); - callback.run(); - } - - @Override - protected void handleMessageInternal(Message message) throws Exception { - this.connectIfNeeded(); - String topic = (String) message.getHeaders().get(MqttHeaders.TOPIC); - MqttMessage mqttMessage = (MqttMessage) this.converter.fromMessage(message, MqttMessage.class); - if (topic == null && this.defaultTopic == null) { - throw new MessageHandlingException(message, - "No '" + MqttHeaders.TOPIC + "' header and no default topic defined"); - } - this.publish(topic == null ? this.defaultTopic : topic, mqttMessage); - } - - protected abstract void connectIfNeeded(); - - protected abstract void publish(String topic, Object mqttMessage) throws Exception; - - @Override - public String getComponentType() { - return "mqtt:outbound-channel-adapter"; - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/outbound/MqttPahoMessageHandler.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/outbound/MqttPahoMessageHandler.java deleted file mode 100644 index e0570be..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/outbound/MqttPahoMessageHandler.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.outbound; - -import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; -import org.eclipse.paho.client.mqttv3.MqttCallback; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; - -import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory; -import org.springframework.integration.mqtt.core.MqttPahoClientFactory; -import org.springframework.messaging.MessagingException; -import org.springframework.util.Assert; - -/** - * Eclipse Paho implementation. - * @author Gary Russell - * @since 1.0 - * - */ -public class MqttPahoMessageHandler extends AbstractMqttMessageHandler - implements MqttCallback { - - private final MqttPahoClientFactory clientFactory; - - private volatile MqttClient client; - - public MqttPahoMessageHandler(String url, String clientId, MqttPahoClientFactory factory) { - super(url, clientId); - this.clientFactory = factory; - } - - public MqttPahoMessageHandler(String url, String clientId) { - this(url, clientId, new DefaultMqttPahoClientFactory()); - } - - @Override - protected void doStart() { - } - - @Override - protected void doStop() { - try { - if (this.client != null) { - this.client.disconnect(); - this.client.close(); - this.client = null; - } - } - catch (MqttException e) { - logger.error("Failed to disconnect", e); - } - } - - private synchronized void doConnect() throws MqttException { - if (this.client != null && !this.client.isConnected()) { - this.client.close(); - this.client = null; - } - if (this.client == null) { - this.client = this.clientFactory.getClientInstance(this.getUrl(), this.getClientId()); - this.client.connect(this.clientFactory.getConnectionOptions()); - this.client.setCallback(this); - if (logger.isDebugEnabled()) { - logger.debug("Client connected"); - } - } - } - - @Override - protected void connectIfNeeded() { - if (this.client == null || !this.client.isConnected()) { - try { - this.doConnect(); - } - catch (MqttException e) { - throw new MessagingException("Failed to connect", e); - } - } - } - - @Override - protected void publish(String topic, Object mqttMessage) throws Exception { - Assert.isInstanceOf(MqttMessage.class, mqttMessage); - this.client.publish(topic, (MqttMessage) mqttMessage); - } - - @Override - public void connectionLost(Throwable cause) { - logger.error("Lost connection; will attempt reconnect on next request"); - this.client = null; - } - - @Override - public void messageArrived(String topic, MqttMessage message) throws Exception { - - } - - @Override - public void deliveryComplete(IMqttDeliveryToken token) { - - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/outbound/package-info.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/outbound/package-info.java deleted file mode 100644 index 6b5d4e4..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/outbound/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Provides Spring Integration components for doing outbound operations. - */ -package org.springframework.integration.mqtt.outbound; diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/package-info.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/package-info.java deleted file mode 100644 index 79304d7..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Root package of the MqttAdapter Module. - */ -package org.springframework.integration.mqtt; diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/DefaultPahoMessageConverter.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/DefaultPahoMessageConverter.java deleted file mode 100644 index 5f4a5f0..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/DefaultPahoMessageConverter.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.support; - -import org.eclipse.paho.client.mqttv3.MqttMessage; - -import org.springframework.integration.support.MessageBuilder; -import org.springframework.messaging.Message; -import org.springframework.messaging.MessageHeaders; -import org.springframework.messaging.converter.MessageConversionException; -import org.springframework.util.Assert; - - -/** - * Default implementation allowing most connection options to be configured. - * @author Gary Russell - * @since 1.0 - * - */ -public class DefaultPahoMessageConverter implements MqttMessageConverter { - - private final String charset; - - private final Integer defaultQos; - - private final Boolean defaultRetained; - - public DefaultPahoMessageConverter() { - this (0, false); - } - - public DefaultPahoMessageConverter(int defaultQos, boolean defaultRetain) { - this(defaultQos, defaultRetain, "UTF-8"); - } - - public DefaultPahoMessageConverter(int defaultQos, boolean defaultRetained, String charset) { - this.defaultQos = defaultQos; - this.defaultRetained = defaultRetained; - this.charset = charset; - } - - @Override - public Message toMessage(Object mqttMessage, MessageHeaders headers) { - Assert.isInstanceOf(MqttMessage.class, mqttMessage); - return toMessage(null, (MqttMessage) mqttMessage); - } - - @Override - public Message toMessage(String topic, MqttMessage mqttMessage) { - try { - MessageBuilder messageBuilder = MessageBuilder.withPayload(new String(mqttMessage.getPayload(), this.charset)) - .setHeader(MqttHeaders.QOS, mqttMessage.getQos()) - .setHeader(MqttHeaders.DUPLICATE, mqttMessage.isDuplicate()) - .setHeader(MqttHeaders.RETAINED, mqttMessage.isRetained()); - if (topic != null) { - messageBuilder.setHeader(MqttHeaders.TOPIC, topic); - } - return messageBuilder.build(); - } - catch (Exception e) { - throw new MessageConversionException("failed to convert object to Message", e); - } - } - - @Override - public MqttMessage fromMessage(Message message, Class targetClass) { - Object payload = message.getPayload(); - Assert.isTrue(payload instanceof byte[] || payload instanceof String); - byte[] payloadBytes; - if (payload instanceof String) { - try { - payloadBytes = ((String) payload).getBytes(this.charset); - } - catch (Exception e) { - throw new MessageConversionException("failed to convert Message to object", e); - } - } - else { - payloadBytes = (byte[]) payload; - } - MqttMessage mqttMessage = new MqttMessage(payloadBytes); - Object header = message.getHeaders().get(MqttHeaders.RETAINED); - Assert.isTrue(header == null || header instanceof Boolean, MqttHeaders.RETAINED + " header must be Boolean"); - mqttMessage.setRetained(header == null ? this.defaultRetained : (Boolean) header); - header = message.getHeaders().get(MqttHeaders.QOS); - Assert.isTrue(header == null || header instanceof Integer, MqttHeaders.QOS + " header must be Integer"); - mqttMessage.setQos(header == null ? this.defaultQos : (Integer) header); - return mqttMessage; - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/MqttHeaders.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/MqttHeaders.java deleted file mode 100644 index b114ad6..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/MqttHeaders.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.support; - -/** - * Spring Integration headers. - * @author Gary Russell - * @since 3.0 - * - */ -public class MqttHeaders { - - private static final String prefix = "mqtt_"; - - public static final String QOS = prefix + "qos"; - - public static final String DUPLICATE = prefix + "duplicate"; - - public static final String RETAINED = prefix + "retained"; - - public static final String TOPIC = prefix + "topic"; - private MqttHeaders() { - throw new AssertionError(); - } -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/MqttMessageConverter.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/MqttMessageConverter.java deleted file mode 100644 index aefbff3..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/MqttMessageConverter.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.support; - -import org.eclipse.paho.client.mqttv3.MqttMessage; - -import org.springframework.messaging.Message; -import org.springframework.messaging.converter.MessageConverter; - -/** - * Extension of {@link MessageConverter} allowing the topic to be added as - * a header. - * @author Gary Russell - * @since 1.0 - * - */ -public interface MqttMessageConverter extends MessageConverter { - - Message toMessage(String topic, MqttMessage mqttMessage); -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/MqttUtils.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/MqttUtils.java deleted file mode 100644 index 1f69d23..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/MqttUtils.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.support; - - -/** - * Contains utility methods used by the MqttAdapter components. - * - * @author Gary Russell - * @since 1.0 - * - */ -public final class MqttUtils { - - /** Prevent instantiation. */ - private MqttUtils() { - throw new AssertionError(); - } - -} diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/package-info.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/package-info.java deleted file mode 100644 index c711af2..0000000 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Provides various support classes used across Spring Integration MqttAdapter Components. - */ -package org.springframework.integration.mqtt.support; diff --git a/spring-integration-mqtt/src/main/resources/META-INF/spring.handlers b/spring-integration-mqtt/src/main/resources/META-INF/spring.handlers deleted file mode 100644 index fdbf583..0000000 --- a/spring-integration-mqtt/src/main/resources/META-INF/spring.handlers +++ /dev/null @@ -1 +0,0 @@ -http\://www.springframework.org/schema/integration/mqtt=org.springframework.integration.mqtt.config.xml.MqttNamespaceHandler diff --git a/spring-integration-mqtt/src/main/resources/META-INF/spring.schemas b/spring-integration-mqtt/src/main/resources/META-INF/spring.schemas deleted file mode 100644 index f4273c5..0000000 --- a/spring-integration-mqtt/src/main/resources/META-INF/spring.schemas +++ /dev/null @@ -1,2 +0,0 @@ -http\://www.springframework.org/schema/integration/mqtt/spring-integration-mqtt-1.0.xsd=org/springframework/integration/mqtt/config/xml/spring-integration-mqtt-1.0.xsd -http\://www.springframework.org/schema/integration/mqtt/spring-integration-mqtt.xsd=org/springframework/integration/mqtt/config/xml/spring-integration-mqtt-1.0.xsd diff --git a/spring-integration-mqtt/src/main/resources/META-INF/spring.tooling b/spring-integration-mqtt/src/main/resources/META-INF/spring.tooling deleted file mode 100644 index a062077..0000000 --- a/spring-integration-mqtt/src/main/resources/META-INF/spring.tooling +++ /dev/null @@ -1,4 +0,0 @@ -# Tooling related information for the integration MqttAdapter namespace -http\://www.springframework.org/schema/integration/mqttadapter@name=integration MqttAdapter Namespace -http\://www.springframework.org/schema/integration/mqttadapter@prefix=int-mqttadapter -http\://www.springframework.org/schema/integration/mqttadapter@icon=org/springframework/integration/config/xml/spring-integration-mqttadapter.gif diff --git a/spring-integration-mqtt/src/main/resources/org/springframework/integration/mqtt/config/xml/spring-integration-mqtt-1.0.xsd b/spring-integration-mqtt/src/main/resources/org/springframework/integration/mqtt/config/xml/spring-integration-mqtt-1.0.xsd deleted file mode 100644 index 3f11fe6..0000000 --- a/spring-integration-mqtt/src/main/resources/org/springframework/integration/mqtt/config/xml/spring-integration-mqtt-1.0.xsd +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - - - - - - - The definition for the Spring Integration MqttAdapter - Inbound Channel Adapter. - - - - - - - - - - - - - - - - - Specifies one or more (comma-delimited) topics on which to listen for messages. - - - - - - - - - - - - - - - - - - If a downstream exception is thrown and an error-channel is specified, - the MessagingException will be sent to this channel. Otherwise, any such exception - will be logged. - - - - - - - - - - Defines an outbound Channel Adapter. - - - - - - - - - - - - Channel from which messages will be output. - When a message is sent to this channel it will - cause the query - to be executed. - - - - - - - - - - - Specifies the order for invocation when this endpoint is connected as a - subscriber to a SubscribableChannel. - - - - - - - Specifies the default topic to which messages will be sent. Required if an - outbound message does not have an 'mqtt_topic' header. - - - - - - - Specifies the default quality of service. Default 0. - - - - - - - Specifies the default value of the 'retained' flag. Default false. - - - - - - - - - - - Identifies the underlying Spring bean definition, which is an - instance of either 'EventDrivenConsumer' or 'PollingConsumer', - depending on whether the component's input channel is a - 'SubscribableChannel' or 'PollableChannel'. - - - - - - - Flag to indicate that the component should start automatically - on startup (default true). - - - - - - - - - - Flag to indicate the phase in which the component should start automatically - on startup. See SmartLifecycle. - - - - - - - - - - MQTT broker URL. - - - - - - - MQTT client ID. - - - - - - - to/from - a paho MqttMessage. Default is DefaultMqttMessageConverter. - ]]> - - - - - - - - - - - - - - - - - - - diff --git a/spring-integration-mqtt/src/main/resources/org/springframework/integration/mqtt/config/xml/spring-integration-mqtt-1.0.xsd~ b/spring-integration-mqtt/src/main/resources/org/springframework/integration/mqtt/config/xml/spring-integration-mqtt-1.0.xsd~ deleted file mode 100644 index ecf59a9..0000000 --- a/spring-integration-mqtt/src/main/resources/org/springframework/integration/mqtt/config/xml/spring-integration-mqtt-1.0.xsd~ +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - The definition for the Spring Integration MqttAdapter - Inbound Channel Adapter. - - - - - - - - - - - - - - - - - Specifies one or more (comma-delimited) topics on which to listen for messages. - - - - - - - - - - - - - - - - Defines an outbound Channel Adapter. - - - - - - - - - - - - Channel from which messages will be output. - When a message is sent to this channel it will - cause the query - to be executed. - - - - - - - - - - - Specifies the order for invocation when this endpoint is connected as a - subscriber to a SubscribableChannel. - - - - - - - Specifies the default topic to which messages will be sent. Required if an - outbound message does not have an 'mqtt_topic' header. - - - - - - - Specifies the default quality of service. Default 0. - - - - - - - Specifies the default value of the 'retained' flag. Default false. - - - - - - - - - - - Identifies the underlying Spring bean definition, which is an - instance of either 'EventDrivenConsumer' or 'PollingConsumer', - depending on whether the component's input channel is a - 'SubscribableChannel' or 'PollableChannel'. - - - - - - - Flag to indicate that the component should start automatically - on startup (default true). - - - - - - - - - - Flag to indicate the phase in which the component should start automatically - on startup. See SmartLifecycle. - - - - - - - - - - MQTT broker URL. - - - - - - - MQTT client ID. - - - - - - - to/from - a paho MqttMessage. Default is DefaultMqttMessageConverter. - ]]> - - - - - - - - - - - - - - - - - - - diff --git a/spring-integration-mqtt/src/main/resources/org/springframework/integration/mqtt/config/xml/spring-integration-mqttadapter.gif b/spring-integration-mqtt/src/main/resources/org/springframework/integration/mqtt/config/xml/spring-integration-mqttadapter.gif deleted file mode 100644 index 210e076..0000000 Binary files a/spring-integration-mqtt/src/main/resources/org/springframework/integration/mqtt/config/xml/spring-integration-mqttadapter.gif and /dev/null differ diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BackTobackAdapterTests.java b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BackTobackAdapterTests.java deleted file mode 100644 index 45a17f8..0000000 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BackTobackAdapterTests.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import org.junit.Rule; -import org.junit.Test; - -import org.springframework.integration.channel.QueueChannel; -import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter; -import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler; -import org.springframework.integration.mqtt.support.MqttHeaders; -import org.springframework.integration.support.MessageBuilder; -import org.springframework.messaging.Message; -import org.springframework.messaging.support.GenericMessage; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; - -/** - * @author Gary Russell - * @since 1.0 - * - */ -public class BackTobackAdapterTests { - - @Rule - public final BrokerRunning brokerRunning = BrokerRunning.isRunning(1883); - - @Test - public void testSingleTopic() { - MqttPahoMessageHandler adapter = new MqttPahoMessageHandler("tcp://localhost:1883", "si-test-out"); - adapter.setDefaultTopic("mqtt-foo"); - adapter.afterPropertiesSet(); - adapter.start(); - MqttPahoMessageDrivenChannelAdapter inbound = new MqttPahoMessageDrivenChannelAdapter("tcp://localhost:1883", "si-test-in", "mqtt-foo"); - QueueChannel outputChannel = new QueueChannel(); - inbound.setOutputChannel(outputChannel); - ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); - taskScheduler.initialize(); - inbound.setTaskScheduler(taskScheduler); - inbound.afterPropertiesSet(); - inbound.start(); - adapter.handleMessage(new GenericMessage("foo")); - adapter.stop(); - Message out = outputChannel.receive(1000); - assertNotNull(out); - inbound.stop(); - assertEquals("foo", out.getPayload()); - assertEquals("mqtt-foo", out.getHeaders().get(MqttHeaders.TOPIC)); - } - - @Test - public void testTwoTopics() { - MqttPahoMessageHandler adapter = new MqttPahoMessageHandler("tcp://localhost:1883", "si-test-out"); - adapter.setDefaultTopic("mqtt-foo"); - adapter.afterPropertiesSet(); - adapter.start(); - MqttPahoMessageDrivenChannelAdapter inbound = new MqttPahoMessageDrivenChannelAdapter("tcp://localhost:1883", "si-test-in", "mqtt-foo", "mqtt-bar"); - QueueChannel outputChannel = new QueueChannel(); - inbound.setOutputChannel(outputChannel); - ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); - taskScheduler.initialize(); - inbound.setTaskScheduler(taskScheduler); - inbound.afterPropertiesSet(); - inbound.start(); - adapter.handleMessage(new GenericMessage("foo")); - Message message = MessageBuilder.withPayload("bar").setHeader(MqttHeaders.TOPIC, "mqtt-bar").build(); - adapter.handleMessage(message); - adapter.stop(); - Message out = outputChannel.receive(1000); - assertNotNull(out); - inbound.stop(); - assertEquals("foo", out.getPayload()); - assertEquals("mqtt-foo", out.getHeaders().get(MqttHeaders.TOPIC)); - out = outputChannel.receive(1000); - assertNotNull(out); - inbound.stop(); - assertEquals("bar", out.getPayload()); - assertEquals("mqtt-bar", out.getHeaders().get(MqttHeaders.TOPIC)); } - -} diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BrokerRunning.java b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BrokerRunning.java deleted file mode 100644 index 6c15e53..0000000 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BrokerRunning.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt; - -import static org.junit.Assume.assumeNoException; -import static org.junit.Assume.assumeTrue; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.junit.rules.TestWatcher; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; -import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory; - -/** - * @author Gary Russell - * @since 1.0 - * - */ -public class BrokerRunning extends TestWatcher { - - private static Log logger = LogFactory.getLog(BrokerRunning.class); - - // Static so that we only test once on failure: speeds up test suite - private static Map brokerOnline = new HashMap(); - - private final int port; - - private BrokerRunning(int port) { - this.port = port; - brokerOnline.put(port, true); - } - - @Override - public Statement apply(Statement base, Description description) { - assumeTrue(brokerOnline.get(port)); - String url = "tcp://localhost:" + port; - MqttClient client = null; - try { - client = new DefaultMqttPahoClientFactory().getClientInstance(url, "junit-" + System.currentTimeMillis()); - client.connect(); - } - catch (MqttException e) { - logger.warn("Tests not running because no broker on " + url + ":", e); - assumeNoException(e); - } - finally { - if (client != null) { - try { - client.disconnect(); - client.close(); - } - catch (MqttException e) { - } - } - } - return super.apply(base, description); - } - - - - public static BrokerRunning isRunning(int port) { - return new BrokerRunning(port); - } -} diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BrokerRunning.java~ b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BrokerRunning.java~ deleted file mode 100644 index 57587d8..0000000 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BrokerRunning.java~ +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt; - -import static org.junit.Assume.assumeNoException; -import static org.junit.Assume.assumeTrue; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.junit.rules.TestWatcher; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; -import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory; - -/** - * @author Gary Russell - * @since 1.0 - * - */ -public class BrokerRunning extends TestWatcher { - - private static Log logger = LogFactory.getLog(BrokerRunning.class); - - // Static so that we only test once on failure: speeds up test suite - private static Map brokerOnline = new HashMap(); - - private final int port; - - private BrokerRunning(int port) { - this.port = port; - brokerOnline.put(port, true); - } - - @Override - public Statement apply(Statement base, Description description) { - assumeTrue(brokerOnline.get(port)); - String url = "tcp://localhost:" + port; - MqttClient client = null; - try { - client = new DefaultMqttPahoClientFactory().getClientInstance(url, "junit-" + System.currentTimeMillis()); - client.connect(); - } - catch (MqttException e) { - logger.warn("Tests not running because no broker on " + url + ":", e); - assumeNoException(e); - } - finally { - if (client != null) { - try { - client.close(); - } - catch (MqttException e) { - } - } - } - return super.apply(base, description); - } - - - - public static BrokerRunning isRunning(int port) { - return new BrokerRunning(port); - } -} diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/DownstreamExceptionTests-context.xml b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/DownstreamExceptionTests-context.xml deleted file mode 100644 index 8576476..0000000 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/DownstreamExceptionTests-context.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/DownstreamExceptionTests.java b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/DownstreamExceptionTests.java deleted file mode 100644 index 847847d..0000000 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/DownstreamExceptionTests.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright 2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.contains; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; - -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.CyclicBarrier; -import java.util.concurrent.TimeUnit; - -import org.apache.commons.logging.Log; -import org.junit.ClassRule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; - -import org.springframework.beans.DirectFieldAccessor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter; -import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler; -import org.springframework.integration.test.util.TestUtils; -import org.springframework.integration.core.PollableChannel; -import org.springframework.integration.message.GenericMessage; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -/** - * @author Gary Russell - * @since 4.0 - * - */ -@ContextConfiguration -@RunWith(SpringJUnit4ClassRunner.class) -@DirtiesContext -public class DownstreamExceptionTests { - - @ClassRule - public static final BrokerRunning brokerRunning = BrokerRunning.isRunning(1883); - - @Autowired - private Service service; - - @Autowired - private MqttPahoMessageDrivenChannelAdapter noErrorChannel; - - @Autowired - private MqttPahoMessageDrivenChannelAdapter withErrorChannel; - - @Autowired - private PollableChannel errors; - - @Test - public void testNoErrorChannel() throws Exception { - service.barrier.reset(); - service.n = 0; - Log logger = spy(TestUtils.getPropertyValue(noErrorChannel, "logger", Log.class)); - final CountDownLatch latch = new CountDownLatch(1); - doAnswer(new Answer() { - - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - if (((String) invocation.getArguments()[0]).contains("Unhandled")) { - latch.countDown(); - } - return null; - } - }).when(logger).error(anyString(), any(Throwable.class)); - new DirectFieldAccessor(noErrorChannel).setPropertyValue("logger", logger); - MqttPahoMessageHandler adapter = new MqttPahoMessageHandler("tcp://localhost:1883", "si-test-out"); - adapter.setDefaultTopic("mqtt-fooEx1"); - adapter.afterPropertiesSet(); - adapter.start(); - adapter.handleMessage(new GenericMessage("foo")); - service.barrier.await(10, TimeUnit.SECONDS); - service.barrier.reset(); - adapter.handleMessage(new GenericMessage("foo")); - service.barrier.await(10, TimeUnit.SECONDS); - assertTrue(latch.await(10, TimeUnit.SECONDS)); - verify(logger).error(contains("Unhandled exception for"), any(Throwable.class)); - service.barrier.reset(); - adapter.stop(); - } - - @Test - public void testWithErrorChannel() throws Exception { - service.barrier.reset(); - assertSame(this.errors, TestUtils.getPropertyValue(this.withErrorChannel, "errorChannel")); - service.n = 0; - MqttPahoMessageHandler adapter = new MqttPahoMessageHandler("tcp://localhost:1883", "si-test-out"); - adapter.setDefaultTopic("mqtt-fooEx2"); - adapter.afterPropertiesSet(); - adapter.start(); - adapter.handleMessage(new GenericMessage("foo")); - service.barrier.await(10, TimeUnit.SECONDS); - service.barrier.reset(); - adapter.handleMessage(new GenericMessage("foo")); - service.barrier.await(10, TimeUnit.SECONDS); - assertNotNull(errors.receive(10000)); - service.barrier.reset(); - adapter.stop(); - } - - public static class Service { - - public CyclicBarrier barrier = new CyclicBarrier(2); - - public int n; - - public void foo(String foo) throws Exception { - barrier.await(10, TimeUnit.SECONDS); - if (n++ > 0) { - throw new RuntimeException("bar"); - } - } - - } - -} diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/MqttAdapterTests.java b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/MqttAdapterTests.java deleted file mode 100644 index e55800e..0000000 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/MqttAdapterTests.java +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.util.Properties; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicReference; - -import javax.net.SocketFactory; - -import org.eclipse.paho.client.mqttv3.MqttCallback; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttConnectOptions; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; -import org.junit.Test; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; - -import org.springframework.integration.channel.QueueChannel; -import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory; -import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory.Will; -import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter; -import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler; -import org.springframework.messaging.Message; -import org.springframework.messaging.support.GenericMessage; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; - -/** - * @author Gary Russell - * @since 1.0 - * - */ -public class MqttAdapterTests { - - @Test - public void testPahoConnectOptions() { - DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory(); - factory.setCleanSession(false); - factory.setConnectionTimeout(23); - factory.setKeepAliveInterval(45); - factory.setPassword("pass"); - SocketFactory socketFactory = mock(SocketFactory.class); - factory.setSocketFactory(socketFactory); - Properties props = new Properties(); - factory.setSslProperties(props); - factory.setUserName("user"); - Will will = new Will("foo", "bar".getBytes(), 2, true); - factory.setWill(will); - - MqttConnectOptions options = factory.getConnectionOptions(); - - assertEquals(23, options.getConnectionTimeout()); - assertEquals(45, options.getKeepAliveInterval()); - assertEquals("pass", new String(options.getPassword())); - assertSame(socketFactory, options.getSocketFactory()); - assertSame(props, options.getSSLProperties()); - assertEquals("user", options.getUserName()); - assertEquals("foo", options.getWillDestination()); - assertEquals("bar", new String(options.getWillMessage().getPayload())); - assertEquals(2, options.getWillMessage().getQos()); - - } - - @Test - public void testOutboundOptionsApplied() throws Exception { - DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory(); - factory.setCleanSession(false); - factory.setConnectionTimeout(23); - factory.setKeepAliveInterval(45); - factory.setPassword("pass"); - MemoryPersistence persistence = new MemoryPersistence(); - factory.setPersistence(persistence); - final SocketFactory socketFactory = mock(SocketFactory.class); - factory.setSocketFactory(socketFactory); - final Properties props = new Properties(); - factory.setSslProperties(props); - factory.setUserName("user"); - Will will = new Will("foo", "bar".getBytes(), 2, true); - factory.setWill(will); - - factory = spy(factory); - final MqttClient client = mock(MqttClient.class); - doAnswer(new Answer() { - - @Override - public MqttClient answer(InvocationOnMock invocation) throws Throwable { - return client; - } - }).when(factory).getClientInstance(anyString(), anyString()); - - MqttPahoMessageHandler handler = new MqttPahoMessageHandler("foo", "bar", factory); - handler.setDefaultTopic("mqtt-foo"); - handler.afterPropertiesSet(); - handler.start(); - final AtomicBoolean connectCalled = new AtomicBoolean(); - doAnswer(new Answer(){ - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - MqttConnectOptions options = (MqttConnectOptions) invocation.getArguments()[0]; - assertEquals(23, options.getConnectionTimeout()); - assertEquals(45, options.getKeepAliveInterval()); - assertEquals("pass", new String(options.getPassword())); - assertSame(socketFactory, options.getSocketFactory()); - assertSame(props, options.getSSLProperties()); - assertEquals("user", options.getUserName()); - assertEquals("foo", options.getWillDestination()); - assertEquals("bar", new String(options.getWillMessage().getPayload())); - assertEquals(2, options.getWillMessage().getQos()); - connectCalled.set(true); - return null; - } - }).when(client).connect(any(MqttConnectOptions.class)); - final AtomicBoolean publishCalled = new AtomicBoolean(); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - assertEquals("mqtt-foo", invocation.getArguments()[0]); - MqttMessage message = (MqttMessage) invocation.getArguments()[1]; - assertEquals("Hello, world!", new String(message.getPayload())); - publishCalled.set(true); - return null; - } - }).when(client).publish(anyString(), any(MqttMessage.class)); - - handler.handleMessage(new GenericMessage("Hello, world!")); - - verify(client, times(1)).connect(any(MqttConnectOptions.class)); - assertTrue(connectCalled.get()); - } - - @Test - public void testInboundOptionsApplied() throws Exception { - DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory(); - factory.setCleanSession(false); - factory.setConnectionTimeout(23); - factory.setKeepAliveInterval(45); - factory.setPassword("pass"); - MemoryPersistence persistence = new MemoryPersistence(); - factory.setPersistence(persistence); - final SocketFactory socketFactory = mock(SocketFactory.class); - factory.setSocketFactory(socketFactory); - final Properties props = new Properties(); - factory.setSslProperties(props); - factory.setUserName("user"); - Will will = new Will("foo", "bar".getBytes(), 2, true); - factory.setWill(will); - - factory = spy(factory); - final MqttClient client = mock(MqttClient.class); - doAnswer(new Answer() { - - @Override - public MqttClient answer(InvocationOnMock invocation) throws Throwable { - return client; - } - }).when(factory).getClientInstance(anyString(), anyString()); - - final AtomicBoolean connectCalled = new AtomicBoolean(); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - MqttConnectOptions options = (MqttConnectOptions) invocation.getArguments()[0]; - assertEquals(23, options.getConnectionTimeout()); - assertEquals(45, options.getKeepAliveInterval()); - assertEquals("pass", new String(options.getPassword())); - assertSame(socketFactory, options.getSocketFactory()); - assertSame(props, options.getSSLProperties()); - assertEquals("user", options.getUserName()); - assertEquals("foo", options.getWillDestination()); - assertEquals("bar", new String(options.getWillMessage().getPayload())); - assertEquals(2, options.getWillMessage().getQos()); - connectCalled.set(true); - return null; - } - }).when(client).connect(any(MqttConnectOptions.class)); - - final AtomicReference callback = new AtomicReference(); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - callback.set((MqttCallback) invocation.getArguments()[0]); - return null; - } - }).when(client).setCallback(any(MqttCallback.class)); - - when(client.isConnected()).thenReturn(true); - - MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter("foo", "bar", factory, "baz"); - QueueChannel outputChannel = new QueueChannel(); - adapter.setOutputChannel(outputChannel); - ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); - taskScheduler.initialize(); - adapter.setTaskScheduler(taskScheduler); - adapter.afterPropertiesSet(); - adapter.start(); - - verify(client, times(1)).connect(any(MqttConnectOptions.class)); - assertTrue(connectCalled.get()); - - MqttMessage message = new MqttMessage("qux".getBytes()); - callback.get().messageArrived("baz", message); - Message outMessage = outputChannel.receive(0); - assertNotNull(outMessage); - assertEquals("qux", outMessage.getPayload()); - } - -} diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParserTests-context.xml b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParserTests-context.xml deleted file mode 100644 index 9416250..0000000 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParserTests-context.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParserTests.java b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParserTests.java deleted file mode 100644 index 00d4fe5..0000000 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParserTests.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.config.xml; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertSame; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory; -import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter; -import org.springframework.integration.mqtt.support.MqttMessageConverter; -import org.springframework.integration.test.util.TestUtils; -import org.springframework.messaging.MessageChannel; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -/** - * @author Gary Russell - * @since 1.0 - * - */ -@ContextConfiguration -@RunWith(SpringJUnit4ClassRunner.class) -public class MqttMessageDrivenChannelAdapterParserTests { - - @Autowired - private MqttPahoMessageDrivenChannelAdapter oneTopicAdapter; - - @Autowired - private MqttPahoMessageDrivenChannelAdapter twoTopicsAdapter; - - @Autowired - private MessageChannel out; - - @Autowired - private MqttMessageConverter converter; - - @Autowired - private DefaultMqttPahoClientFactory clientFactory; - - @Test - public void testOneTopic() { - assertEquals("tcp://localhost:1883", TestUtils.getPropertyValue(oneTopicAdapter, "url")); - assertFalse(TestUtils.getPropertyValue(oneTopicAdapter, "autoStartup", Boolean.class)); - assertEquals(25, TestUtils.getPropertyValue(oneTopicAdapter, "phase")); - assertEquals("foo", TestUtils.getPropertyValue(oneTopicAdapter, "clientId")); - assertEquals("bar", TestUtils.getPropertyValue(oneTopicAdapter, "topic", String[].class)[0]); - assertSame(converter, TestUtils.getPropertyValue(oneTopicAdapter, "converter")); - assertEquals(123L, TestUtils.getPropertyValue(oneTopicAdapter, "messagingTemplate.sendTimeout")); - assertSame(out, TestUtils.getPropertyValue(oneTopicAdapter, "outputChannel")); - assertSame(clientFactory, TestUtils.getPropertyValue(oneTopicAdapter, "clientFactory")); - } - - @Test - public void testTwoTopics() { - assertEquals("tcp://localhost:1883", TestUtils.getPropertyValue(oneTopicAdapter, "url")); - assertFalse(TestUtils.getPropertyValue(twoTopicsAdapter, "autoStartup", Boolean.class)); - assertEquals(25, TestUtils.getPropertyValue(twoTopicsAdapter, "phase")); - assertEquals("foo", TestUtils.getPropertyValue(twoTopicsAdapter, "clientId")); - assertEquals("bar", TestUtils.getPropertyValue(twoTopicsAdapter, "topic", String[].class)[0]); - assertEquals("baz", TestUtils.getPropertyValue(twoTopicsAdapter, "topic", String[].class)[1]); - assertSame(converter, TestUtils.getPropertyValue(twoTopicsAdapter, "converter")); - assertEquals(123L, TestUtils.getPropertyValue(twoTopicsAdapter, "messagingTemplate.sendTimeout")); - assertSame(out, TestUtils.getPropertyValue(twoTopicsAdapter, "outputChannel")); - assertSame(clientFactory, TestUtils.getPropertyValue(twoTopicsAdapter, "clientFactory")); - } - -} diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttOutboundChannelAdapterParserTests-context.xml b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttOutboundChannelAdapterParserTests-context.xml deleted file mode 100644 index 203066d..0000000 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttOutboundChannelAdapterParserTests-context.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttOutboundChannelAdapterParserTests.java b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttOutboundChannelAdapterParserTests.java deleted file mode 100644 index bea91f5..0000000 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttOutboundChannelAdapterParserTests.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.integration.mqtt.config.xml; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory; -import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler; -import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter; -import org.springframework.integration.mqtt.support.MqttMessageConverter; -import org.springframework.integration.test.util.TestUtils; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -/** - * @author Gary Russell - * @since 1.0 - * - */ -@ContextConfiguration -@RunWith(SpringJUnit4ClassRunner.class) -public class MqttOutboundChannelAdapterParserTests { - - @Autowired @Qualifier("withConverter.handler") - private MqttPahoMessageHandler withConverterHandler; - - @Autowired @Qualifier("withDefaultConverter.handler") - private MqttPahoMessageHandler withDefaultConverterHandler; - - @Autowired - private MqttMessageConverter converter; - - @Autowired - private DefaultMqttPahoClientFactory clientFactory; - - @Test - public void testWithConverter() { - assertEquals("tcp://localhost:1883", TestUtils.getPropertyValue(withConverterHandler, "url")); - assertFalse(TestUtils.getPropertyValue(withConverterHandler, "autoStartup", Boolean.class)); - assertEquals(25, TestUtils.getPropertyValue(withConverterHandler, "phase")); - assertEquals("foo", TestUtils.getPropertyValue(withConverterHandler, "clientId")); - assertEquals("bar", TestUtils.getPropertyValue(withConverterHandler, "defaultTopic")); - assertSame(converter, TestUtils.getPropertyValue(withConverterHandler, "converter")); - assertSame(clientFactory, TestUtils.getPropertyValue(withConverterHandler, "clientFactory")); - } - - @Test - public void testWithDefaultConverter() { - assertEquals("tcp://localhost:1883", TestUtils.getPropertyValue(withDefaultConverterHandler, "url")); - assertFalse(TestUtils.getPropertyValue(withDefaultConverterHandler, "autoStartup", Boolean.class)); - assertEquals(25, TestUtils.getPropertyValue(withDefaultConverterHandler, "phase")); - assertEquals("foo", TestUtils.getPropertyValue(withDefaultConverterHandler, "clientId")); - assertEquals("bar", TestUtils.getPropertyValue(withDefaultConverterHandler, "defaultTopic")); - assertEquals(1, TestUtils.getPropertyValue(withDefaultConverterHandler, "defaultQos")); - assertTrue(TestUtils.getPropertyValue(withDefaultConverterHandler, "defaultRetained", Boolean.class)); - MqttMessageConverter defaultConverter = TestUtils.getPropertyValue(withDefaultConverterHandler, "converter", - MqttMessageConverter.class); - assertTrue(defaultConverter instanceof DefaultPahoMessageConverter); - assertEquals(1, TestUtils.getPropertyValue(defaultConverter, "defaultQos")); - assertTrue(TestUtils.getPropertyValue(defaultConverter, "defaultRetained", Boolean.class)); - assertSame(clientFactory, TestUtils.getPropertyValue(withDefaultConverterHandler, "clientFactory")); - } - -} diff --git a/spring-integration-mqtt/src/test/resources/log4j.properties b/spring-integration-mqtt/src/test/resources/log4j.properties deleted file mode 100644 index 69750fc..0000000 --- a/spring-integration-mqtt/src/test/resources/log4j.properties +++ /dev/null @@ -1,8 +0,0 @@ -log4j.rootCategory=WARN, stdout - -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss.SSS} %-5p [%t][%c] %m%n - -log4j.category.org.springframework.integration=WARN -log4j.category.org.springframework.integration.mqtt=INFO