diff --git a/Jenkinsfile b/Jenkinsfile index 92d5b4f6..83e06ad5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -11,7 +11,7 @@ pipeline { } stages { - stage('Publish OpenJDK 8 + jq docker image') { + stage('Publish OpenJDK 17 + jq docker image') { when { changeset "ci/Dockerfile" } @@ -19,7 +19,7 @@ pipeline { steps { script { - def image = docker.build("springci/spring-ws-openjdk8-with-jq", "ci/") + def image = docker.build("springci/spring-ws-openjdk17-with-jq", "ci/") docker.withRegistry('', 'hub.docker.com-springbuildmaster') { image.push() } @@ -27,10 +27,10 @@ pipeline { } } - stage("Test: baseline (jdk8)") { + stage("Test: baseline (jdk17)") { agent { docker { - image 'adoptopenjdk/openjdk8:latest' + image 'openjdk:17-bullseye' args '-v $HOME/.m2:/root/.m2' } } @@ -44,10 +44,10 @@ pipeline { stage("Test other configurations") { parallel { - stage("Test: spring-buildsnapshot (jdk8)") { + stage("Test: spring-buildsnapshot (jdk17)") { agent { docker { - image 'adoptopenjdk/openjdk8:latest' + image 'openjdk:17-bullseye' args '-v $HOME/.m2:/root/.m2' } } @@ -58,69 +58,13 @@ pipeline { sh "PROFILE=spring-buildsnapshot,convergence ci/test.sh" } } - stage("Test: baseline (jdk11)") { - agent { - docker { - image 'adoptopenjdk/openjdk11:latest' - args '-v $HOME/.m2:/root/.m2' - } - } - environment { - ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c') - } - steps { - sh "PROFILE=distribute,java11,convergence ci/test.sh" - } - } - stage("Test: spring-buildsnapshot (jdk11)") { - agent { - docker { - image 'adoptopenjdk/openjdk11:latest' - args '-v $HOME/.m2:/root/.m2' - } - } - environment { - ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c') - } - steps { - sh "PROFILE=spring-buildsnapshot,java11,convergence ci/test.sh" - } - } - stage("Test: baseline (jdk16)") { - agent { - docker { - image 'adoptopenjdk/openjdk16:latest' - args '-v $HOME/.m2:/root/.m2' - } - } - environment { - ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c') - } - steps { - sh "PROFILE=distribute,java11,convergence ci/test.sh" - } - } - stage("Test: spring-buildsnapshot (jdk16)") { - agent { - docker { - image 'adoptopenjdk/openjdk16:latest' - args '-v $HOME/.m2:/root/.m2' - } - } - environment { - ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c') - } - steps { - sh "PROFILE=spring-buildsnapshot,java11,convergence ci/test.sh" - } - } } } stage('Deploy') { agent { docker { - image 'springci/spring-ws-openjdk8-with-jq:latest' + image 'springci/spring-ws-openjdk17-with-jq:latest' args '-v $HOME/.m2:/tmp/jenkins-home/.m2' } } @@ -167,13 +111,13 @@ pipeline { stage('Release documentation') { when { anyOf { - branch 'main' - branch 'release' + branch '4.0.x' + branch 'release-4.0.x' } } agent { docker { - image 'adoptopenjdk/openjdk8:latest' + image 'openjdk:17-bullseye' args '-v $HOME/.m2:/tmp/jenkins-home/.m2' } } diff --git a/README.adoc b/README.adoc index 440e5bf2..abb3a9e3 100644 --- a/README.adoc +++ b/README.adoc @@ -38,9 +38,9 @@ You can also import the project into your IDE. 2. With the release tagged, push the tagged version to the release branch. + ---- -% git checkout -b release +% git checkout -b release-4.0.x % git reset --hard -% git push -f origin release +% git push -f origin release-4.0.x ---- NOTE: You can chain the previous set of commands together using `&&`. diff --git a/ci/Dockerfile b/ci/Dockerfile index 6f084e3c..ceebadd3 100644 --- a/ci/Dockerfile +++ b/ci/Dockerfile @@ -1,4 +1,4 @@ -FROM adoptopenjdk/openjdk8:latest +FROM openjdk:17-bullseye RUN apt-get update && apt-get install -y jq gpg diff --git a/pom.xml b/pom.xml index 871e695d..b4321b27 100644 --- a/pom.xml +++ b/pom.xml @@ -1,871 +1,792 @@ - 4.0.0 - - org.springframework.ws - spring-ws - 4.0.0-SNAPSHOT - pom - - Spring Web Services - https://spring.io/projects/spring-ws - Spring-based Web Services support - - - - apoutsma - Arjen Poutsma - apoutsma@pivotal.io - Pivotal Software, Inc. - - Project Creator - - - - tareqa - Tareq Abed Rabbo - tareq.abedrabbo@gmail.com - Pivotal Software, Inc. - - Developer - - - - gturnquist - Greg Turnquist - gturnquist@pivotal.io - Pivotal Software, Inc. - - Project Lead - - - - - - Pivotal Software - https://spring.io - - - - - Apache License, Version 2.0 - https://www.apache.org/licenses/LICENSE-2.0 - - Copyright 2011 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 - - https://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. - - - - - - spring-ws-core - spring-ws-security - spring-ws-support - spring-ws-test - spring-xml - - - - UTF-8 - UTF-8 - 1.8 - 1.8 - false - - 4.1.2 - 1.9.6 - 3.9.0 - 1.2.20 - 3.1 - 2.5 - 1.6.1 - 3.6 - 2.10.6 - 4.5.3 - 1.6.0 - 3.1.0 - 1.1.4 - 2.0.6 - 6.1.26 - 2.0.1 - 5.7.0 - 1.2.17 - 2.11.0 - 1.4.7 - 1.9 - 1.5.2 - 1.7.25 - 4.2.1 - 1.4.0 - 5.3.7 - 5.5.0 - 1.7.8 - 1.6.0 - 4.2.0 - 1.6.3 - 2.3.0 - 2.2.0 - 2.2.2 - 1.6 - 2.7.0 - 3.0 - 1.2.5 - 0.2.5 - - - - - - org.springframework - spring-framework-bom - ${spring.version} - pom - import - - - - org.springframework.security - spring-security-bom - ${spring-security.version} - pom - import - - - - org.junit - junit-bom - ${junit.version} - pom - import - - - - - - - - - org.springframework - spring-core - - - org.junit.jupiter - junit-jupiter-api - test - - - org.junit.jupiter - junit-jupiter-engine - test - - - org.easymock - easymock - ${easymock.version} - test - - - org.xmlunit - xmlunit-assertj - ${xmlunit.version} - test - - - org.assertj - assertj-core - - - - - org.assertj - assertj-core - ${assertj.version} - test - - - com.sun.mail - javax.mail - ${sun-mail.version} - test - - - org.codehaus.woodstox - woodstox-core-asl - ${woodstox.version} - test - - - io.spring.docresources - spring-doc-resources - ${docs.resources.version} - zip - true - - - - - - - maven-compiler-plugin - 3.6.1 - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.22.1 - - false - - - - - - - - - spring-buildsnapshot - - 5.3.8-SNAPSHOT - - - - - convergence - - - - - org.apache.maven.plugins - maven-enforcer-plugin - 3.0.0-M2 - - - default-cli - - enforce - - validate - - - - - commons-logging:*:* - - true - - - - true - - - - - - - - - - - distribute - - - - - org.apache.maven.plugins - maven-source-plugin - 3.0.0 - - - attach-sources - - jar-no-fork - - - - - - - maven-javadoc-plugin - 2.10.4 - - -Xdoclint:none - -quiet - - - - attach-javadocs - - jar - - - - - - - - - - snapshot - - - - - org.jfrog.buildinfo - artifactory-maven-plugin - 2.6.1 - false - - - build-info - - publish - - - - {{BUILD_URL}} - - - spring-ws - spring-ws - false - docs - *:*:*:*@zip - - - https://repo.spring.io - {{ARTIFACTORY_USR}} - {{ARTIFACTORY_PSW}} - libs-snapshot-local - libs-snapshot-local - - - - - - - - - - - milestone - - - - - org.jfrog.buildinfo - artifactory-maven-plugin - 2.6.1 - false - - - build-info - - publish - - - - {{BUILD_URL}} - - - spring-ws - spring-ws - false - docs - *:*:*:*@zip - - - https://repo.spring.io - {{ARTIFACTORY_USR}} - {{ARTIFACTORY_PSW}} - libs-milestone-local - libs-milestone-local - - - - - - - - - - - central - - - true - true - true - - - - - - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - --pinentry-mode - loopback - - - - - - - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.8 - true - - sonatype - https://s01.oss.sonatype.org/ - false - true - true - - - - - - - - - - org.apache.maven.plugins - maven-gpg-plugin - - - - org.sonatype.plugins - nexus-staging-maven-plugin - - - - - - - - - sonatype - https://s01.oss.sonatype.org//service/local/staging/deploy/maven2/ - - - - - - - docs - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-doc-resources - - unpack-dependencies - - generate-resources - false - - io.spring.docresources - spring-doc-resources - zip - true - ${project.build.directory}/refdocs/ - - - - - - org.apache.maven.plugins - maven-resources-plugin - - - copy-asciidoc-resources - generate-resources - false - - copy-resources - - - ${project.build.directory}/refdocs/ - - - src/main/asciidoctor - false - - - - - - - - org.asciidoctor - asciidoctor-maven-plugin - 2.1.0 - - - org.asciidoctor - asciidoctorj-pdf - 1.5.4 - - - org.asciidoctor - asciidoctorj-epub3 - 1.5.1 - - - - - html - generate-resources - false - - process-asciidoc - - - html5 - ${project.build.directory}/site/reference/html - highlight.js - - // these attributes are required to use the doc resources - shared - css/ - spring.css - true - font - js/highlight - github - true - - - - - - pdf - generate-resources - false - - process-asciidoc - - - ${project.build.directory}/site/reference/pdf - pdf - coderay - - - - - epub - generate-resources - false - - process-asciidoc - - - ${project.build.directory}/site/reference/epub - epub3 - coderay - - - - - - ${project.build.directory}/refdocs/ - index.adoc - book - - ${project.version} - ${project.name} - ${project.version} - true - 4 - true - ${project.basedir} - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.4 - - -Xdoclint:none - - - - - aggregate - - aggregate - - prepare-package - false - - ${project.root}/target/site/apidocs - - - - attach-javadocs - - jar - - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - docs - - single - - package - - - docs.xml - - spring-ws-${project.version} - true - - - - - - - org.jfrog.buildinfo - artifactory-maven-plugin - 2.6.1 - - - deploy-docs - - publish - - deploy - - - false - - - spring-ws-docs - spring-ws-docs - false - docs - - - - Spring Docs spring-ws ${project.version} - 1 - - - {{artifactory.server}} - {{artifactory.username}} - {{artifactory.password}} - {{artifactory.distribution-repository}} - {{artifactory.distribution-repository}} - *-docs.zip - - - - - - - - - - - java11 - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.22.1 - - false - - --illegal-access=permit - - - - - - - - - com.sun.xml.ws - jaxws-ri - 2.3.3 - pom - - - com.fasterxml.woodstox - woodstox-core - - - org.jvnet.staxex - stax-ex - - - com.sun.xml.messaging.saaj - saaj-impl - - - org.jvnet.mimepull - mimepull - - - org.codehaus.woodstox - stax2-api - - - jakarta.xml.bind - jakarta.xml.bind-api - - - - - - com.sun.xml.messaging.saaj - saaj-impl - ${saaj-impl.version} - - - javax.xml.soap - javax.xml.soap-api - - - jakarta.xml.soap - jakarta.xml.soap-api - - - org.jvnet.staxex - stax-ex - - - - - - javax.xml.soap - javax.xml.soap-api - ${soap-api.version} - - - - org.jvnet.staxex - stax-ex - ${stax.version} - - - - javax.xml.ws - jaxws-api - 2.3.1 - - - javax.xml.bind - jaxb-api - - - - - - jakarta.xml.bind - jakarta.xml.bind-api - 2.3.2 - - - - - - - - - - spring-libs-snapshot - https://repo.spring.io/libs-snapshot - - true - - - - spring-libs-milestone - https://repo.spring.io/libs-milestone - - - spring-libs-release - https://repo.spring.io/libs-release - - - - - - spring-libs-snapshot - Spring Snapshots - https://repo.spring.io/libs-snapshot - - true - - - - spring-libs-milestone - Spring Milestones - https://repo.spring.io/libs-milestone - - - spring-libs-release - Spring Releases - https://repo.spring.io/libs-release - - - - - https://github.com/spring-projects/spring-ws - scm:git:git://github.com/spring-projects/spring-ws.git - scm:git:ssh://git@github.com:spring-projects/spring-ws.git - + 4.0.0 + + org.springframework.ws + spring-ws + 4.0.0-SNAPSHOT + pom + + Spring Web Services + https://spring.io/projects/spring-ws + Spring-based Web Services support + + + + apoutsma + Arjen Poutsma + apoutsma@pivotal.io + Pivotal Software, Inc. + + Project Creator + + + + tareqa + Tareq Abed Rabbo + tareq.abedrabbo@gmail.com + Pivotal Software, Inc. + + Developer + + + + gturnquist + Greg Turnquist + gturnquist@pivotal.io + Pivotal Software, Inc. + + Project Lead + + + + + + Pivotal Software + https://spring.io + + + + + Apache License, Version 2.0 + https://www.apache.org/licenses/LICENSE-2.0 + + Copyright 2011 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 + + https://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. + + + + + + spring-ws-core + spring-ws-security + spring-ws-support + spring-ws-test + spring-xml + + + + UTF-8 + UTF-8 + 17 + 17 + false + + 2.19.0 + 1.9.6 + 3.9.0 + 3.1 + 2.5 + 1.6.1 + 4.3 + 2.10.6 + 2.0.0-alpha-2 + 4.5.3 + 9.0.0 + 3.0.0 + 2.0.1 + 3.0.1 + 1.1.4 + 2.0.6 + 11.0.7 + 5.7.0 + 2.14.1 + 1.4.7 + 4.0.0 + 2.0.1 + 1.7.32 + 4.2.1 + 6.0.0-SNAPSHOT + 6.0.0-SNAPSHOT + 2.0.1 + 4.2.0 + 1.6.3 + 2.3.0 + 2.2.0 + 2.2.2 + 1.6 + 2.7.0 + 1.3.7 + 0.2.5 + + + + + + org.springframework + spring-framework-bom + ${spring.version} + pom + import + + + + org.springframework.security + spring-security-bom + ${spring-security.version} + pom + import + + + + org.junit + junit-bom + ${junit.version} + pom + import + + + + + + + + + org.springframework + spring-core + + + + jakarta.platform + jakarta.jakartaee-api + ${jakarta-api.version} + + + + com.sun.xml.messaging.saaj + saaj-impl + ${saaj-impl.version} + + + jakarta.xml.soap + jakarta.xml.soap-api + + + + + + org.jvnet.staxex + stax-ex + ${stax.version} + + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.easymock + easymock + ${easymock.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + org.xmlunit + xmlunit-assertj + ${xmlunit.version} + test + + + org.assertj + assertj-core + + + javax.xml.bind + jaxb-api + + + + + org.assertj + assertj-core + ${assertj.version} + test + + + org.codehaus.woodstox + woodstox-core-asl + ${woodstox.version} + test + + + io.spring.docresources + spring-doc-resources + ${docs.resources.version} + zip + true + + + + + + + maven-compiler-plugin + 3.8.1 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.1 + + false + + --illegal-access=permit + + + + + + + + + + spring-buildsnapshot + + + + convergence + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + distribute + + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.0 + + + attach-sources + + jar-no-fork + + + + + + + maven-javadoc-plugin + 2.10.4 + + -Xdoclint:none + -quiet + + + + attach-javadocs + + jar + + + + + + + + + + snapshot + + + + + org.jfrog.buildinfo + artifactory-maven-plugin + 2.6.1 + false + + + build-info + + publish + + + + {{BUILD_URL}} + + + spring-ws + spring-ws + false + docs + *:*:*:*@zip + + + https://repo.spring.io + {{ARTIFACTORY_USR}} + {{ARTIFACTORY_PSW}} + libs-snapshot-local + libs-snapshot-local + + + + + + + + + + + milestone + + + + + org.jfrog.buildinfo + artifactory-maven-plugin + 2.6.1 + false + + + build-info + + publish + + + + {{BUILD_URL}} + + + spring-ws + spring-ws + false + docs + *:*:*:*@zip + + + https://repo.spring.io + {{ARTIFACTORY_USR}} + {{ARTIFACTORY_PSW}} + libs-milestone-local + libs-milestone-local + + + + + + + + + + + central + + + true + true + true + + + + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + --pinentry-mode + loopback + + + + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + sonatype + https://s01.oss.sonatype.org/ + false + true + true + + + + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + + + + org.sonatype.plugins + nexus-staging-maven-plugin + + + + + + + + + sonatype + https://s01.oss.sonatype.org//service/local/staging/deploy/maven2/ + + + + + + + docs + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack-doc-resources + + unpack-dependencies + + generate-resources + false + + io.spring.docresources + spring-doc-resources + zip + true + ${project.build.directory}/refdocs/ + + + + + + org.apache.maven.plugins + maven-resources-plugin + + + copy-asciidoc-resources + generate-resources + false + + copy-resources + + + ${project.build.directory}/refdocs/ + + + src/main/asciidoctor + false + + + + + + + + org.asciidoctor + asciidoctor-maven-plugin + 2.1.0 + + + org.asciidoctor + asciidoctorj-pdf + 1.5.4 + + + org.asciidoctor + asciidoctorj-epub3 + 1.5.1 + + + + + html + generate-resources + false + + process-asciidoc + + + html5 + ${project.build.directory}/site/reference/html + highlight.js + + // these attributes are required to use the doc resources + shared + css/ + spring.css + true + font + js/highlight + github + true + + + + + + pdf + generate-resources + false + + process-asciidoc + + + ${project.build.directory}/site/reference/pdf + pdf + coderay + + + + + epub + generate-resources + false + + process-asciidoc + + + ${project.build.directory}/site/reference/epub + epub3 + coderay + + + + + + ${project.build.directory}/refdocs/ + index.adoc + book + + ${project.version} + ${project.name} + ${project.version} + true + 4 + true + ${project.basedir} + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.4 + + -Xdoclint:none + + + + + aggregate + + aggregate + + prepare-package + false + + ${project.root}/target/site/apidocs + + + + attach-javadocs + + jar + + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + docs + + single + + package + + + docs.xml + + spring-ws-${project.version} + true + + + + + + + org.jfrog.buildinfo + artifactory-maven-plugin + 2.6.1 + + + deploy-docs + + publish + + deploy + + + false + + + spring-ws-docs + spring-ws-docs + false + docs + + + + Spring Docs spring-ws ${project.version} + 1 + + + {{artifactory.server}} + {{artifactory.username}} + {{artifactory.password}} + {{artifactory.distribution-repository}} + {{artifactory.distribution-repository}} + *-docs.zip + + + + + + + + + + + + + + spring-libs-snapshot + https://repo.spring.io/libs-snapshot + + true + + + + spring-libs-milestone + https://repo.spring.io/libs-milestone + + + spring-libs-release + https://repo.spring.io/libs-release + + + + + + spring-libs-snapshot + Spring Snapshots + https://repo.spring.io/libs-snapshot + + true + + + + spring-libs-milestone + Spring Milestones + https://repo.spring.io/libs-milestone + + + spring-libs-release + Spring Releases + https://repo.spring.io/libs-release + + + + + https://github.com/spring-projects/spring-ws + scm:git:git://github.com/spring-projects/spring-ws.git + scm:git:ssh://git@github.com:spring-projects/spring-ws.git + diff --git a/spring-ws-core/pom.xml b/spring-ws-core/pom.xml index 5fee2349..317d8b9d 100644 --- a/spring-ws-core/pom.xml +++ b/spring-ws-core/pom.xml @@ -2,232 +2,254 @@ - 4.0.0 + 4.0.0 - - org.springframework.ws - spring-ws - 4.0.0-SNAPSHOT - + + org.springframework.ws + spring-ws + 4.0.0-SNAPSHOT + - spring-ws-core - jar + spring-ws-core + jar - Spring WS Core + Spring WS Core - + - - org.springframework.ws - spring-xml - ${project.parent.version} - + + org.springframework.ws + spring-xml + ${project.parent.version} + - - org.springframework - spring-aop - - - org.springframework - spring-beans - - - org.springframework - spring-oxm - - - org.springframework - spring-web - - - org.springframework - spring-webmvc - - - org.springframework - spring-test - test - - - commons-io - commons-io - ${commons-io.version} - test - + + org.springframework + spring-aop + + + org.springframework + spring-beans + + + org.springframework + spring-oxm + + + org.springframework + spring-web + + + org.springframework + spring-webmvc + + + org.springframework + spring-test + test + + + commons-io + commons-io + ${commons-io.version} + test + - - - org.jdom - jdom2 - ${jdom2.version} - true - - - dom4j - dom4j - ${dom4j.version} - true - - - xom - xom - ${xom.version} - true - - - xml-apis - xml-apis - - - xerces - xercesImpl - - - xalan - xalan - - - - - org.apache.ws.xmlschema - xmlschema-core - ${xml-schema-core.version} - true - + + + jakarta.xml.bind + jakarta.xml.bind-api + ${jakarta-xml-bind.version} + + + com.sun.xml.bind + jaxb-impl + ${jakarta-xml-bind.version} + runtime + + + org.jdom + jdom2 + ${jdom2.version} + true + + + dom4j + dom4j + ${dom4j.version} + true + + + xom + xom + ${xom.version} + true + + + xml-apis + xml-apis + + + xerces + xercesImpl + + + xalan + xalan + + + + + org.apache.ws.xmlschema + xmlschema-core + ${xml-schema-core.version} + true + - - - org.apache.ws.commons.axiom - axiom-api - ${axiom.version} - true - - - commons-logging - commons-logging - - - - - org.apache.ws.commons.axiom - axiom-impl - ${axiom.version} - true - - - org.codehaus.woodstox - wstx-asl - - - commons-logging - commons-logging - - - + + + wsdl4j + wsdl4j + ${wsdl4j.version} + true + - - - wsdl4j - wsdl4j - ${wsdl4j.version} - true - + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + true + + + commons-logging + commons-logging + + + + + commons-httpclient + commons-httpclient + ${commons-httpclient.version} + true + + + commons-codec + commons-codec + + + commons-logging + commons-logging + + + - - - javax.servlet - javax.servlet-api - ${javax-servlet.version} - provided - - - org.apache.httpcomponents - httpclient - ${httpclient.version} - true - - - commons-logging - commons-logging - - - - - commons-httpclient - commons-httpclient - ${commons-httpclient.version} - true - - - commons-codec - commons-codec - - - commons-logging - commons-logging - - - - - org.mortbay.jetty - jetty - ${jetty.version} - test - - - org.mortbay.jetty - servlet-api - - - + + + jakarta.mail + jakarta.mail-api + ${jakarta-mail.version} + + + com.sun.mail + jakarta.mail + ${jakarta-mail.version} + - - org.apache.logging.log4j - log4j-api - ${log4j2.version} - test - - - org.aspectj - aspectjrt - ${aspectj.version} - test - - - org.aspectj - aspectjweaver - ${aspectj.version} - test - + + org.eclipse.jetty + jetty-server + ${jetty.version} + + + org.slf4j + slf4j-api + + + - + + org.eclipse.jetty + jetty-servlet + ${jetty.version} + + + org.slf4j + slf4j-api + + + - - - docs + + org.apache.logging.log4j + log4j-core + ${log4j2.version} + test + + + org.slf4j + slf4j-api + ${slf4j.version} + test + + + org.apache.logging.log4j + log4j-slf4j18-impl + 2.14.1 + test + + + org.slf4j + slf4j-api + + + org.apache.logging.log4j + log4j-core + + + - - - - org.apache.maven.plugins - maven-assembly-plugin - - - docs - - single - - package - - true - - - - - - + + org.aspectj + aspectjrt + ${aspectj.version} + test + + + org.aspectj + aspectjweaver + ${aspectj.version} + test + - - + - \ No newline at end of file + + + docs + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + docs + + single + + package + + true + + + + + + + + + + + diff --git a/spring-ws-core/src/main/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParser.java b/spring-ws-core/src/main/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParser.java index 9532181a..467f7184 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParser.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/config/AnnotationDrivenBeanDefinitionParser.java @@ -59,7 +59,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { private static final boolean dom4jPresent = ClassUtils.isPresent("org.dom4j.Element", AnnotationDrivenBeanDefinitionParser.class.getClassLoader()); - private static final boolean jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", + private static final boolean jaxb2Present = ClassUtils.isPresent("jakarta.xml.bind.Binder", AnnotationDrivenBeanDefinitionParser.class.getClassLoader()); private static final boolean jdomPresent = ClassUtils.isPresent("org.jdom2.Element", diff --git a/spring-ws-core/src/main/java/org/springframework/ws/mime/AbstractMimeMessage.java b/spring-ws-core/src/main/java/org/springframework/ws/mime/AbstractMimeMessage.java index f811c0ef..7a1ceb82 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/mime/AbstractMimeMessage.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/mime/AbstractMimeMessage.java @@ -16,15 +16,15 @@ package org.springframework.ws.mime; +import jakarta.activation.DataHandler; +import jakarta.activation.DataSource; +import jakarta.activation.FileDataSource; + import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import javax.activation.DataHandler; -import javax.activation.DataSource; -import javax.activation.FileDataSource; - import org.springframework.core.io.InputStreamSource; import org.springframework.core.io.Resource; import org.springframework.util.Assert; @@ -81,7 +81,7 @@ public abstract class AbstractMimeMessage implements MimeMessage { @Override public OutputStream getOutputStream() { - throw new UnsupportedOperationException("Read-only javax.activation.DataSource"); + throw new UnsupportedOperationException("Read-only jakarta.activation.DataSource"); } @Override diff --git a/spring-ws-core/src/main/java/org/springframework/ws/mime/Attachment.java b/spring-ws-core/src/main/java/org/springframework/ws/mime/Attachment.java index daacaa85..e7d93f5f 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/mime/Attachment.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/mime/Attachment.java @@ -16,11 +16,11 @@ package org.springframework.ws.mime; +import jakarta.activation.DataHandler; + import java.io.IOException; import java.io.InputStream; -import javax.activation.DataHandler; - /** * Represents an attachment to a {@link org.springframework.ws.mime.MimeMessage} * diff --git a/spring-ws-core/src/main/java/org/springframework/ws/mime/MimeMessage.java b/spring-ws-core/src/main/java/org/springframework/ws/mime/MimeMessage.java index 55ad66fe..96451de3 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/mime/MimeMessage.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/mime/MimeMessage.java @@ -16,11 +16,11 @@ package org.springframework.ws.mime; +import jakarta.activation.DataHandler; + import java.io.File; import java.util.Iterator; -import javax.activation.DataHandler; - import org.springframework.core.io.InputStreamSource; import org.springframework.ws.WebServiceMessage; diff --git a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/DefaultMethodEndpointAdapter.java b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/DefaultMethodEndpointAdapter.java index 8c334f86..b7eb720c 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/DefaultMethodEndpointAdapter.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/DefaultMethodEndpointAdapter.java @@ -54,7 +54,7 @@ public class DefaultMethodEndpointAdapter extends AbstractMethodEndpointAdapter private static final String DOM4J_CLASS_NAME = "org.dom4j.Element"; - private static final String JAXB2_CLASS_NAME = "javax.xml.bind.Binder"; + private static final String JAXB2_CLASS_NAME = "jakarta.xml.bind.Binder"; private static final String JDOM_CLASS_NAME = "org.jdom2.Element"; diff --git a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/AbstractJaxb2PayloadMethodProcessor.java b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/AbstractJaxb2PayloadMethodProcessor.java index 08731918..86ac19e6 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/AbstractJaxb2PayloadMethodProcessor.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/AbstractJaxb2PayloadMethodProcessor.java @@ -16,6 +16,14 @@ package org.springframework.ws.server.endpoint.adapter.method.jaxb; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBIntrospector; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.Unmarshaller; +import jakarta.xml.bind.UnmarshallerHandler; + import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -25,13 +33,6 @@ import java.net.URL; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.JAXBIntrospector; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.UnmarshallerHandler; import javax.xml.namespace.QName; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLEventWriter; @@ -184,7 +185,7 @@ public abstract class AbstractJaxb2PayloadMethodProcessor extends AbstractPayloa /** * Creates a new {@link Marshaller} to be used for marshalling objects to XML. Defaults to - * {@link javax.xml.bind.JAXBContext#createMarshaller()}, but can be overridden in subclasses for further + * {@link jakarta.xml.bind.JAXBContext#createMarshaller()}, but can be overridden in subclasses for further * customization. * * @param jaxbContext the JAXB context to create a marshaller for @@ -201,7 +202,7 @@ public abstract class AbstractJaxb2PayloadMethodProcessor extends AbstractPayloa /** * Creates a new {@link Unmarshaller} to be used for unmarshalling XML to objects. Defaults to - * {@link javax.xml.bind.JAXBContext#createUnmarshaller()}, but can be overridden in subclasses for further + * {@link jakarta.xml.bind.JAXBContext#createUnmarshaller()}, but can be overridden in subclasses for further * customization. * * @param jaxbContext the JAXB context to create a unmarshaller for diff --git a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/JaxbElementPayloadMethodProcessor.java b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/JaxbElementPayloadMethodProcessor.java index d1a4ab64..ecde7019 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/JaxbElementPayloadMethodProcessor.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/JaxbElementPayloadMethodProcessor.java @@ -16,12 +16,12 @@ package org.springframework.ws.server.endpoint.adapter.method.jaxb; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.JAXBException; + import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; - import org.springframework.core.MethodParameter; import org.springframework.ws.context.MessageContext; diff --git a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/XmlRootElementPayloadMethodProcessor.java b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/XmlRootElementPayloadMethodProcessor.java index 409a7e3c..cae1f4fa 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/XmlRootElementPayloadMethodProcessor.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/XmlRootElementPayloadMethodProcessor.java @@ -16,10 +16,10 @@ package org.springframework.ws.server.endpoint.adapter.method.jaxb; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import org.springframework.core.MethodParameter; import org.springframework.ws.context.MessageContext; diff --git a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/mapping/UriEndpointMapping.java b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/mapping/UriEndpointMapping.java index 5bdd86ea..f81c5b08 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/mapping/UriEndpointMapping.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/mapping/UriEndpointMapping.java @@ -20,7 +20,7 @@ import java.net.URI; import java.net.URISyntaxException; import org.springframework.ws.context.MessageContext; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; +import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; import org.springframework.ws.transport.WebServiceConnection; import org.springframework.ws.transport.context.TransportContext; import org.springframework.ws.transport.context.TransportContextHolder; @@ -38,22 +38,22 @@ import org.springframework.ws.transport.context.TransportContextHolder; *

* Mappings to bean names can be set via the {@code mappings} property, in a form accepted by the {@code * java.util.Properties} class, like as follows: - * + * *

  * http://example.com:8080/services/bookFlight=bookFlightEndpoint
  * jms://exampleQueue=getFlightsEndpoint
  * 
- * + * * or, when the {@code usePath} property is enabled: - * + * *
  * /services/bookFlight=bookFlightEndpoint
  * 
- * + * * The syntax is [URI|PATH]=ENDPOINT_BEAN_NAME. *

* This endpoint mapping does not read from the request message, and therefore is more suitable for message factories - * which directly read from the transport request (such as the {@link AxiomSoapMessageFactory} with the {@code + * which directly read from the transport request (such as the {@link SaajSoapMessageFactory} with the {@code * payloadCaching} disabled). However, this endpoint mapping obviously is transport specific. * * @author Arjen Poutsma diff --git a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/mapping/jaxb/XmlRootElementEndpointMapping.java b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/mapping/jaxb/XmlRootElementEndpointMapping.java index 3334dff2..ffc5f71b 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/mapping/jaxb/XmlRootElementEndpointMapping.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/server/endpoint/mapping/jaxb/XmlRootElementEndpointMapping.java @@ -16,12 +16,13 @@ package org.springframework.ws.server.endpoint.mapping.jaxb; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBIntrospector; +import jakarta.xml.bind.annotation.XmlRootElement; + import java.lang.reflect.Method; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.JAXBIntrospector; -import javax.xml.bind.annotation.XmlRootElement; import javax.xml.namespace.QName; import org.springframework.core.MethodParameter; @@ -35,7 +36,7 @@ import org.springframework.xml.transform.TransformerHelper; * JAXB2 {@link XmlRootElement} annotation to map methods to request payload root elements. *

* Endpoints typically have the following form: - * + * *

  * @Endpoint
  * public class MyEndpoint{
@@ -44,9 +45,9 @@ import org.springframework.xml.transform.TransformerHelper;
  *	  }
  * }
  * 
- * + * * where MyRootElement is annotated with {@code @XmlRootElement}: - * + * *
  * @XmlRootElement(name = "myRoot", namespace = "http://springframework.org/spring-ws")
  * public class MyRootElement {
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AbstractPayload.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AbstractPayload.java
deleted file mode 100644
index c40c6c89..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AbstractPayload.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2005-2010 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.ws.soap.axiom;
-
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.soap.SOAPBody;
-import org.apache.axiom.soap.SOAPFactory;
-import org.springframework.util.Assert;
-import org.springframework.util.xml.StaxUtils;
-import org.springframework.ws.soap.axiom.support.AxiomUtils;
-
-/**
- * Abstract base class for {@link Payload} implementations.
- *
- * @author Arjen Poutsma
- * @since 2.0
- */
-abstract class AbstractPayload extends Payload {
-
-	private final SOAPBody axiomBody;
-
-	private final SOAPFactory axiomFactory;
-
-	protected AbstractPayload(SOAPBody axiomBody, SOAPFactory axiomFactory) {
-		Assert.notNull(axiomBody, "'axiomBody' must not be null");
-		Assert.notNull(axiomFactory, "'axiomFactory' must not be null");
-		this.axiomBody = axiomBody;
-		this.axiomFactory = axiomFactory;
-	}
-
-	@Override
-	public final Source getSource() {
-		try {
-			OMElement payloadElement = getPayloadElement();
-			if (payloadElement != null) {
-				XMLStreamReader streamReader = getStreamReader(payloadElement);
-				return StaxUtils.createCustomStaxSource(streamReader);
-			} else {
-				return null;
-			}
-		} catch (OMException ex) {
-			throw new AxiomSoapBodyException(ex);
-		}
-	}
-
-	protected abstract XMLStreamReader getStreamReader(OMElement payloadElement);
-
-	@Override
-	public final Result getResult() {
-		AxiomUtils.removeContents(getAxiomBody());
-		return getResultInternal();
-	}
-
-	protected abstract Result getResultInternal();
-
-	public SOAPFactory getAxiomFactory() {
-		return axiomFactory;
-	}
-
-	protected SOAPBody getAxiomBody() {
-		return axiomBody;
-	}
-
-	protected OMElement getPayloadElement() throws OMException {
-		return getAxiomBody().getFirstElement();
-	}
-
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomAttachment.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomAttachment.java
deleted file mode 100644
index b1e37626..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomAttachment.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.activation.DataHandler;
-
-import org.springframework.util.Assert;
-import org.springframework.ws.mime.Attachment;
-
-/**
- * Axiom-specific implementation of {@link org.springframework.ws.mime.Attachment}
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-class AxiomAttachment implements Attachment {
-
-	private final DataHandler dataHandler;
-
-	private final String contentId;
-
-	public AxiomAttachment(String contentId, DataHandler dataHandler) {
-		Assert.notNull(contentId, "contentId must not be null");
-		Assert.notNull(dataHandler, "dataHandler must not be null");
-		this.contentId = contentId;
-		this.dataHandler = dataHandler;
-	}
-
-	@Override
-	public String getContentId() {
-		return contentId;
-	}
-
-	@Override
-	public String getContentType() {
-		return dataHandler.getContentType();
-	}
-
-	@Override
-	public InputStream getInputStream() throws IOException {
-		return dataHandler.getInputStream();
-	}
-
-	@Override
-	public long getSize() {
-		// Axiom does not support getting the size of attachments.
-		return -1;
-	}
-
-	@Override
-	public DataHandler getDataHandler() {
-		return dataHandler;
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomAttachmentException.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomAttachmentException.java
deleted file mode 100644
index e4180307..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomAttachmentException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import org.springframework.ws.mime.AttachmentException;
-
-/** @author Arjen Poutsma */
-@SuppressWarnings("serial")
-public class AxiomAttachmentException extends AttachmentException {
-
-	public AxiomAttachmentException(String msg) {
-		super(msg);
-	}
-
-	public AxiomAttachmentException(String msg, Throwable ex) {
-		super(msg, ex);
-	}
-
-	public AxiomAttachmentException(Throwable ex) {
-		super(ex);
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap11Body.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap11Body.java
deleted file mode 100644
index da4b2206..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap11Body.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import java.util.Locale;
-
-import javax.xml.namespace.QName;
-
-import org.apache.axiom.om.OMAttribute;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.axiom.soap.SOAPBody;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPFault;
-import org.apache.axiom.soap.SOAPFaultCode;
-import org.apache.axiom.soap.SOAPFaultReason;
-import org.apache.axiom.soap.SOAPProcessingException;
-import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
-import org.springframework.ws.soap.axiom.support.AxiomUtils;
-import org.springframework.ws.soap.soap11.Soap11Body;
-import org.springframework.ws.soap.soap11.Soap11Fault;
-
-/**
- * Axiom-specific version of {@code org.springframework.ws.soap.Soap11Body}.
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-class AxiomSoap11Body extends AxiomSoapBody implements Soap11Body {
-
-	private final boolean langAttributeOnSoap11FaultString;
-
-	AxiomSoap11Body(SOAPBody axiomBody, SOAPFactory axiomFactory, boolean payloadCaching,
-			boolean langAttributeOnSoap11FaultString) {
-		super(axiomBody, axiomFactory, payloadCaching);
-		this.langAttributeOnSoap11FaultString = langAttributeOnSoap11FaultString;
-	}
-
-	@Override
-	public Soap11Fault addMustUnderstandFault(String faultString, Locale locale) {
-		SOAPFault fault = addStandardFault(SOAP11Constants.FAULT_CODE_MUST_UNDERSTAND, faultString, locale);
-		return new AxiomSoap11Fault(fault, getAxiomFactory());
-	}
-
-	@Override
-	public Soap11Fault addClientOrSenderFault(String faultString, Locale locale) {
-		SOAPFault fault = addStandardFault(SOAP11Constants.FAULT_CODE_SENDER, faultString, locale);
-		return new AxiomSoap11Fault(fault, getAxiomFactory());
-	}
-
-	@Override
-	public Soap11Fault addServerOrReceiverFault(String faultString, Locale locale) {
-		SOAPFault fault = addStandardFault(SOAP11Constants.FAULT_CODE_RECEIVER, faultString, locale);
-		return new AxiomSoap11Fault(fault, getAxiomFactory());
-	}
-
-	@Override
-	public Soap11Fault addVersionMismatchFault(String faultString, Locale locale) {
-		SOAPFault fault = addStandardFault(SOAP11Constants.FAULT_CODE_VERSION_MISMATCH, faultString, locale);
-		return new AxiomSoap11Fault(fault, getAxiomFactory());
-	}
-
-	@Override
-	public Soap11Fault addFault(QName code, String faultString, Locale faultStringLocale) {
-		Assert.notNull(code, "No faultCode given");
-		Assert.hasLength(faultString, "faultString cannot be empty");
-		if (!StringUtils.hasLength(code.getNamespaceURI())) {
-			throw new IllegalArgumentException(
-					"A fault code with namespace and local part must be specific for a custom fault code");
-		}
-		if (!langAttributeOnSoap11FaultString) {
-			faultStringLocale = null;
-		}
-		try {
-			AxiomUtils.removeContents(getAxiomBody());
-			SOAPFault fault = getAxiomFactory().createSOAPFault(getAxiomBody());
-			SOAPFaultCode faultCode = getAxiomFactory().createSOAPFaultCode(fault);
-			setValueText(code, fault, faultCode);
-			SOAPFaultReason faultReason = getAxiomFactory().createSOAPFaultReason(fault);
-			if (faultStringLocale != null) {
-				addLangAttribute(faultStringLocale, faultReason);
-			}
-			faultReason.setText(faultString);
-			return new AxiomSoap11Fault(fault, getAxiomFactory());
-
-		} catch (SOAPProcessingException ex) {
-			throw new AxiomSoapFaultException(ex);
-		}
-	}
-
-	private void setValueText(QName code, SOAPFault fault, SOAPFaultCode faultCode) {
-		String prefix = code.getPrefix();
-		if (StringUtils.hasLength(code.getNamespaceURI()) && StringUtils.hasLength(prefix)) {
-			OMNamespace namespace = fault.findNamespaceURI(prefix);
-			if (namespace == null) {
-				fault.declareNamespace(code.getNamespaceURI(), prefix);
-			}
-		} else if (StringUtils.hasLength(code.getNamespaceURI())) {
-			OMNamespace namespace = fault.findNamespace(code.getNamespaceURI(), null);
-			if (namespace == null) {
-				namespace = fault.declareNamespace(code.getNamespaceURI(), "");
-			}
-			code = new QName(code.getNamespaceURI(), code.getLocalPart(), namespace.getPrefix());
-		}
-		faultCode.setText(code);
-	}
-
-	private SOAPFault addStandardFault(String localName, String faultString, Locale locale) {
-		Assert.notNull(faultString, "No faultString given");
-		try {
-			AxiomUtils.removeContents(getAxiomBody());
-			SOAPFault fault = getAxiomFactory().createSOAPFault(getAxiomBody());
-			SOAPFaultCode faultCode = getAxiomFactory().createSOAPFaultCode(fault);
-			faultCode.setText(new QName(fault.getNamespace().getNamespaceURI(), localName, fault.getNamespace().getPrefix()));
-			SOAPFaultReason faultReason = getAxiomFactory().createSOAPFaultReason(fault);
-			if (locale != null) {
-				addLangAttribute(locale, faultReason);
-			}
-			faultReason.setText(faultString);
-			return fault;
-		} catch (SOAPProcessingException ex) {
-			throw new AxiomSoapFaultException(ex);
-		}
-	}
-
-	private void addLangAttribute(Locale locale, SOAPFaultReason faultReason) {
-		OMNamespace xmlNamespace = getAxiomFactory().createOMNamespace("http://www.w3.org/XML/1998/namespace", "xml");
-		OMAttribute langAttribute = getAxiomFactory().createOMAttribute("lang", xmlNamespace,
-				AxiomUtils.toLanguage(locale));
-		faultReason.addAttribute(langAttribute);
-	}
-
-	@Override
-	public Soap11Fault getFault() {
-		SOAPFault axiomFault = getAxiomBody().getFault();
-		return axiomFault != null ? new AxiomSoap11Fault(axiomFault, getAxiomFactory()) : null;
-	}
-
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap11Fault.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap11Fault.java
deleted file mode 100644
index f9596095..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap11Fault.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import java.util.Locale;
-
-import javax.xml.namespace.QName;
-
-import org.apache.axiom.om.OMAttribute;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPFault;
-import org.springframework.ws.soap.axiom.support.AxiomUtils;
-import org.springframework.ws.soap.soap11.Soap11Fault;
-
-/**
- * Axiom-specific version of {@code org.springframework.ws.soap.Soap11Fault}.
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-class AxiomSoap11Fault extends AxiomSoapFault implements Soap11Fault {
-
-	AxiomSoap11Fault(SOAPFault axiomFault, SOAPFactory axiomFactory) {
-		super(axiomFault, axiomFactory);
-	}
-
-	@Override
-	public QName getFaultCode() {
-		return getAxiomFault().getCode().getTextAsQName();
-	}
-
-	@Override
-	public String getFaultStringOrReason() {
-		if (getAxiomFault().getReason() != null) {
-			return getAxiomFault().getReason().getText();
-		}
-		return null;
-	}
-
-	@Override
-	public Locale getFaultStringLocale() {
-		if (getAxiomFault().getReason() != null) {
-			OMAttribute langAttribute = getAxiomFault().getReason()
-					.getAttribute(new QName("http://www.w3.org/XML/1998/namespace", "lang"));
-			if (langAttribute != null) {
-				String xmlLangString = langAttribute.getAttributeValue();
-				if (xmlLangString != null) {
-					return AxiomUtils.toLocale(xmlLangString);
-				}
-
-			}
-		}
-		return null;
-	}
-
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap11Header.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap11Header.java
deleted file mode 100644
index 6aebf216..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap11Header.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.axiom.soap.RolePlayer;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPHeader;
-import org.apache.axiom.soap.SOAPHeaderBlock;
-import org.springframework.util.ObjectUtils;
-import org.springframework.ws.soap.SoapHeaderElement;
-import org.springframework.ws.soap.soap11.Soap11Header;
-
-/**
- * Axiom-specific version of {@code org.springframework.ws.soap.Soap11Header}.
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-class AxiomSoap11Header extends AxiomSoapHeader implements Soap11Header {
-
-	AxiomSoap11Header(SOAPHeader axiomHeader, SOAPFactory axiomFactory) {
-		super(axiomHeader, axiomFactory);
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public Iterator examineHeaderElementsToProcess(final String[] actors) {
-		RolePlayer rolePlayer = null;
-		if (!ObjectUtils.isEmpty(actors)) {
-			rolePlayer = new RolePlayer() {
-
-				public List getRoles() {
-					return Arrays.asList(actors);
-				}
-
-				public boolean isUltimateDestination() {
-					return false;
-				}
-			};
-		}
-		Iterator result = (Iterator) getAxiomHeader().getHeadersToProcess(rolePlayer);
-		return new AxiomSoapHeaderElementIterator(result);
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap12Body.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap12Body.java
deleted file mode 100644
index 94942a7b..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap12Body.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import java.util.Locale;
-
-import javax.xml.namespace.QName;
-
-import org.apache.axiom.soap.SOAP12Constants;
-import org.apache.axiom.soap.SOAPBody;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPFault;
-import org.apache.axiom.soap.SOAPFaultCode;
-import org.apache.axiom.soap.SOAPFaultReason;
-import org.apache.axiom.soap.SOAPFaultText;
-import org.apache.axiom.soap.SOAPFaultValue;
-import org.apache.axiom.soap.SOAPProcessingException;
-import org.springframework.util.Assert;
-import org.springframework.ws.soap.axiom.support.AxiomUtils;
-import org.springframework.ws.soap.soap12.Soap12Body;
-import org.springframework.ws.soap.soap12.Soap12Fault;
-
-/**
- * Axiom-specific version of {@code org.springframework.ws.soap.Soap12Body}.
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-class AxiomSoap12Body extends AxiomSoapBody implements Soap12Body {
-
-	AxiomSoap12Body(SOAPBody axiomBody, SOAPFactory axiomFactory, boolean payloadCaching) {
-		super(axiomBody, axiomFactory, payloadCaching);
-	}
-
-	@Override
-	public Soap12Fault addMustUnderstandFault(String reason, Locale locale) {
-		Assert.notNull(locale, "No locale given");
-		SOAPFault fault = addStandardFault(SOAP12Constants.FAULT_CODE_MUST_UNDERSTAND, reason, locale);
-		return new AxiomSoap12Fault(fault, getAxiomFactory());
-	}
-
-	@Override
-	public Soap12Fault addClientOrSenderFault(String reason, Locale locale) {
-		Assert.notNull(locale, "No locale given");
-		SOAPFault fault = addStandardFault(SOAP12Constants.FAULT_CODE_SENDER, reason, locale);
-		return new AxiomSoap12Fault(fault, getAxiomFactory());
-	}
-
-	@Override
-	public Soap12Fault addServerOrReceiverFault(String reason, Locale locale) {
-		Assert.notNull(locale, "No locale given");
-		SOAPFault fault = addStandardFault(SOAP12Constants.FAULT_CODE_RECEIVER, reason, locale);
-		return new AxiomSoap12Fault(fault, getAxiomFactory());
-	}
-
-	@Override
-	public Soap12Fault addVersionMismatchFault(String reason, Locale locale) {
-		Assert.notNull(locale, "No locale given");
-		SOAPFault fault = addStandardFault(SOAP12Constants.FAULT_CODE_VERSION_MISMATCH, reason, locale);
-		return new AxiomSoap12Fault(fault, getAxiomFactory());
-	}
-
-	@Override
-	public Soap12Fault addDataEncodingUnknownFault(QName[] subcodes, String reason, Locale locale) {
-		Assert.notNull(locale, "No locale given");
-		SOAPFault fault = addStandardFault(SOAP12Constants.FAULT_CODE_DATA_ENCODING_UNKNOWN, reason, locale);
-		return new AxiomSoap12Fault(fault, getAxiomFactory());
-	}
-
-	private SOAPFault addStandardFault(String localName, String faultStringOrReason, Locale locale) {
-		Assert.notNull(faultStringOrReason, "No faultStringOrReason given");
-		try {
-			AxiomUtils.removeContents(getAxiomBody());
-			SOAPFault fault = getAxiomFactory().createSOAPFault(getAxiomBody());
-			SOAPFaultCode code = getAxiomFactory().createSOAPFaultCode(fault);
-			SOAPFaultValue value = getAxiomFactory().createSOAPFaultValue(code);
-			value.setText(fault.getNamespace().getPrefix() + ":" + localName);
-			SOAPFaultReason reason = getAxiomFactory().createSOAPFaultReason(fault);
-			SOAPFaultText text = getAxiomFactory().createSOAPFaultText(reason);
-			if (locale != null) {
-				text.setLang(AxiomUtils.toLanguage(locale));
-			}
-			text.setText(faultStringOrReason);
-			return fault;
-		} catch (SOAPProcessingException ex) {
-			throw new AxiomSoapFaultException(ex);
-		}
-	}
-
-	@Override
-	public Soap12Fault getFault() {
-		SOAPFault axiomFault = getAxiomBody().getFault();
-		return axiomFault != null ? new AxiomSoap12Fault(axiomFault, getAxiomFactory()) : null;
-	}
-
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap12Fault.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap12Fault.java
deleted file mode 100644
index 984ba78f..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap12Fault.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-
-import javax.xml.namespace.QName;
-
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPFault;
-import org.apache.axiom.soap.SOAPFaultCode;
-import org.apache.axiom.soap.SOAPFaultNode;
-import org.apache.axiom.soap.SOAPFaultReason;
-import org.apache.axiom.soap.SOAPFaultSubCode;
-import org.apache.axiom.soap.SOAPFaultText;
-import org.apache.axiom.soap.SOAPFaultValue;
-import org.apache.axiom.soap.SOAPProcessingException;
-import org.springframework.util.StringUtils;
-import org.springframework.ws.soap.axiom.support.AxiomUtils;
-import org.springframework.ws.soap.soap12.Soap12Fault;
-
-/** Axiom-specific version of {@code org.springframework.ws.soap.Soap12Fault}. */
-class AxiomSoap12Fault extends AxiomSoapFault implements Soap12Fault {
-
-	AxiomSoap12Fault(SOAPFault axiomFault, SOAPFactory axiomFactory) {
-		super(axiomFault, axiomFactory);
-	}
-
-	@Override
-	public QName getFaultCode() {
-		return getAxiomFault().getCode().getValue().getTextAsQName();
-	}
-
-	@Override
-	public Iterator getFaultSubcodes() {
-		List subcodes = new ArrayList();
-		SOAPFaultSubCode subcode = getAxiomFault().getCode().getSubCode();
-		while (subcode != null) {
-			subcodes.add(subcode.getValue().getTextAsQName());
-			subcode = subcode.getSubCode();
-		}
-		return subcodes.iterator();
-	}
-
-	@Override
-	public void addFaultSubcode(QName subcode) {
-		SOAPFaultCode faultCode = getAxiomFault().getCode();
-		SOAPFaultSubCode faultSubCode = null;
-		if (faultCode.getSubCode() == null) {
-			faultSubCode = getAxiomFactory().createSOAPFaultSubCode(faultCode);
-		} else {
-			faultSubCode = faultCode.getSubCode();
-			while (true) {
-				if (faultSubCode.getSubCode() != null) {
-					faultSubCode = faultSubCode.getSubCode();
-				} else {
-					faultSubCode = getAxiomFactory().createSOAPFaultSubCode(faultSubCode);
-					break;
-				}
-			}
-		}
-		SOAPFaultValue faultValue = getAxiomFactory().createSOAPFaultValue(faultSubCode);
-		setValueText(subcode, faultValue);
-	}
-
-	private void setValueText(QName code, SOAPFaultValue faultValue) {
-		String prefix = code.getPrefix();
-		if (StringUtils.hasLength(code.getNamespaceURI()) && StringUtils.hasLength(prefix)) {
-			OMNamespace namespace = getAxiomFault().findNamespaceURI(prefix);
-			if (namespace == null) {
-				getAxiomFault().declareNamespace(code.getNamespaceURI(), prefix);
-			}
-		} else if (StringUtils.hasLength(code.getNamespaceURI())) {
-			OMNamespace namespace = getAxiomFault().findNamespace(code.getNamespaceURI(), null);
-			if (namespace == null) {
-				throw new IllegalArgumentException("Could not resolve namespace of code [" + code + "]");
-			}
-			code = new QName(code.getNamespaceURI(), code.getLocalPart(), namespace.getPrefix());
-		}
-		faultValue.setText(prefix + ":" + code.getLocalPart());
-	}
-
-	@Override
-	public String getFaultNode() {
-		SOAPFaultNode faultNode = getAxiomFault().getNode();
-		if (faultNode == null) {
-			return null;
-		} else {
-			return faultNode.getFaultNodeValue();
-		}
-	}
-
-	@Override
-	public void setFaultNode(String uri) {
-		try {
-			SOAPFaultNode faultNode = getAxiomFactory().createSOAPFaultNode(getAxiomFault());
-			faultNode.setFaultNodeValue(uri);
-			getAxiomFault().setNode(faultNode);
-		} catch (SOAPProcessingException ex) {
-			throw new AxiomSoapFaultException(ex);
-		}
-	}
-
-	@Override
-	public String getFaultStringOrReason() {
-		return getFaultReasonText(Locale.getDefault());
-	}
-
-	@Override
-	public String getFaultReasonText(Locale locale) {
-		SOAPFaultReason faultReason = getAxiomFault().getReason();
-		String language = AxiomUtils.toLanguage(locale);
-		SOAPFaultText faultText = faultReason.getSOAPFaultText(language);
-		return faultText != null ? faultText.getText() : null;
-	}
-
-	@Override
-	public void setFaultReasonText(Locale locale, String text) {
-		SOAPFaultReason faultReason = getAxiomFault().getReason();
-		String language = AxiomUtils.toLanguage(locale);
-		try {
-			SOAPFaultText faultText = getAxiomFactory().createSOAPFaultText(faultReason);
-			faultText.setLang(language);
-			faultText.setText(text);
-		} catch (SOAPProcessingException ex) {
-			throw new AxiomSoapFaultException(ex);
-		}
-	}
-
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap12Header.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap12Header.java
deleted file mode 100644
index 5ae7eac7..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoap12Header.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.xml.namespace.QName;
-
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.soap.RolePlayer;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPHeader;
-import org.apache.axiom.soap.SOAPHeaderBlock;
-import org.apache.axiom.soap.SOAPProcessingException;
-import org.springframework.util.ObjectUtils;
-import org.springframework.ws.soap.SoapHeaderElement;
-import org.springframework.ws.soap.SoapHeaderException;
-import org.springframework.ws.soap.soap12.Soap12Header;
-
-/**
- * Axiom-specific version of {@code org.springframework.ws.soap.Soap12Header}.
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-class AxiomSoap12Header extends AxiomSoapHeader implements Soap12Header {
-
-	AxiomSoap12Header(SOAPHeader axiomHeader, SOAPFactory axiomFactory) {
-		super(axiomHeader, axiomFactory);
-	}
-
-	@Override
-	public SoapHeaderElement addNotUnderstoodHeaderElement(QName headerName) {
-		try {
-			SOAPHeaderBlock notUnderstood = getAxiomHeader().addHeaderBlock("NotUnderstood", getAxiomHeader().getNamespace());
-			OMNamespace headerNamespace = notUnderstood.declareNamespace(headerName.getNamespaceURI(),
-					headerName.getPrefix());
-			notUnderstood.addAttribute("qname", headerNamespace.getPrefix() + ":" + headerName.getLocalPart(), null);
-			return new AxiomSoapHeaderElement(notUnderstood, getAxiomFactory());
-		} catch (SOAPProcessingException ex) {
-			throw new AxiomSoapHeaderException(ex);
-		}
-	}
-
-	@Override
-	public SoapHeaderElement addUpgradeHeaderElement(String[] supportedSoapUris) {
-		try {
-			SOAPHeaderBlock upgrade = getAxiomHeader().addHeaderBlock("Upgrade", getAxiomHeader().getNamespace());
-			for (String supportedSoapUri : supportedSoapUris) {
-				OMElement supportedEnvelope = getAxiomFactory().createOMElement("SupportedEnvelope",
-						getAxiomHeader().getNamespace(), upgrade);
-				OMNamespace namespace = supportedEnvelope.declareNamespace(supportedSoapUri, "");
-				supportedEnvelope.addAttribute("qname", namespace.getPrefix() + ":Envelope", null);
-			}
-			return new AxiomSoapHeaderElement(upgrade, getAxiomFactory());
-		} catch (OMException ex) {
-			throw new AxiomSoapHeaderException(ex);
-		}
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public Iterator examineHeaderElementsToProcess(final String[] roles,
-			final boolean isUltimateDestination) throws SoapHeaderException {
-		RolePlayer rolePlayer = null;
-		if (!ObjectUtils.isEmpty(roles)) {
-			rolePlayer = new RolePlayer() {
-
-				public List getRoles() {
-					return Arrays.asList(roles);
-				}
-
-				public boolean isUltimateDestination() {
-					return isUltimateDestination;
-				}
-			};
-		}
-		Iterator result = (Iterator) getAxiomHeader().getHeadersToProcess(rolePlayer);
-		return new AxiomSoapHeaderElementIterator(result);
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapBody.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapBody.java
deleted file mode 100644
index 23998fb8..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapBody.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-
-import org.apache.axiom.om.OMDataSource;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.soap.SOAPBody;
-import org.apache.axiom.soap.SOAPFactory;
-import org.springframework.util.Assert;
-import org.springframework.ws.soap.SoapBody;
-import org.springframework.ws.soap.axiom.support.AxiomUtils;
-import org.springframework.ws.stream.StreamingPayload;
-
-/**
- * Axiom-specific version of {@code org.springframework.ws.soap.Soap11Body}.
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-abstract class AxiomSoapBody extends AxiomSoapElement implements SoapBody {
-
-	private final Payload payload;
-
-	protected AxiomSoapBody(SOAPBody axiomBody, SOAPFactory axiomFactory, boolean payloadCaching) {
-		super(axiomBody, axiomFactory);
-		if (payloadCaching) {
-			payload = new CachingPayload(axiomBody, axiomFactory);
-		} else {
-			payload = new NonCachingPayload(axiomBody, axiomFactory);
-		}
-	}
-
-	@Override
-	public Source getPayloadSource() {
-		return payload.getSource();
-	}
-
-	@Override
-	public Result getPayloadResult() {
-		return payload.getResult();
-	}
-
-	@Override
-	public boolean hasFault() {
-		return getAxiomBody().hasFault();
-	}
-
-	protected final SOAPBody getAxiomBody() {
-		return (SOAPBody) getAxiomElement();
-	}
-
-	public void setStreamingPayload(StreamingPayload payload) {
-		Assert.notNull(payload, "'payload' must not be null");
-		OMDataSource dataSource = new StreamingOMDataSource(payload);
-		SOAPFactory factory = getAxiomFactory();
-		QName name = payload.getName();
-		// Ignore the prefix; only the namespace URI and local name are significant
-		OMElement payloadElement = factory.createOMElement(dataSource, name.getLocalPart(),
-				factory.createOMNamespace(name.getNamespaceURI(), null));
-
-		SOAPBody soapBody = getAxiomBody();
-		AxiomUtils.removeContents(soapBody);
-		soapBody.addChild(payloadElement);
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapBodyException.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapBodyException.java
deleted file mode 100644
index 4632fede..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapBodyException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import org.springframework.ws.soap.SoapEnvelopeException;
-
-/**
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-@SuppressWarnings("serial")
-public class AxiomSoapBodyException extends SoapEnvelopeException {
-
-	public AxiomSoapBodyException(String msg) {
-		super(msg);
-	}
-
-	public AxiomSoapBodyException(String msg, Throwable ex) {
-		super(msg, ex);
-	}
-
-	public AxiomSoapBodyException(Throwable ex) {
-		super(ex);
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapElement.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapElement.java
deleted file mode 100644
index 5a4813b3..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapElement.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.Source;
-
-import org.apache.axiom.om.OMAttribute;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.soap.SOAPFactory;
-import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
-import org.springframework.util.xml.StaxUtils;
-import org.springframework.ws.soap.SoapElement;
-
-/**
- * Axiom-specific version of {@link SoapElement}.
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-class AxiomSoapElement implements SoapElement {
-
-	private final OMElement axiomElement;
-
-	private final SOAPFactory axiomFactory;
-
-	protected AxiomSoapElement(OMElement axiomElement, SOAPFactory axiomFactory) {
-		Assert.notNull(axiomElement, "axiomElement must not be null");
-		Assert.notNull(axiomFactory, "axiomFactory must not be null");
-		this.axiomElement = axiomElement;
-		this.axiomFactory = axiomFactory;
-	}
-
-	@Override
-	public final QName getName() {
-		try {
-			return axiomElement.getQName();
-		} catch (OMException ex) {
-			throw new AxiomSoapElementException(ex);
-		}
-	}
-
-	@Override
-	public final Source getSource() {
-		try {
-			return StaxUtils.createCustomStaxSource(axiomElement.getXMLStreamReader());
-		} catch (OMException ex) {
-			throw new AxiomSoapElementException(ex);
-		}
-	}
-
-	@Override
-	public final void addAttribute(QName name, String value) {
-		try {
-			String namespaceUri = name.getNamespaceURI();
-			String prefix = name.getPrefix();
-			if (StringUtils.hasLength(namespaceUri) && !StringUtils.hasLength(prefix)) {
-				prefix = null;
-			}
-			OMNamespace namespace = getAxiomFactory().createOMNamespace(namespaceUri, prefix);
-			OMAttribute attribute = getAxiomFactory().createOMAttribute(name.getLocalPart(), namespace, value);
-			getAxiomElement().addAttribute(attribute);
-		} catch (OMException ex) {
-			throw new AxiomSoapElementException(ex);
-		}
-	}
-
-	@Override
-	public void removeAttribute(QName name) {
-		try {
-			OMAttribute attribute = getAxiomElement().getAttribute(name);
-			if (attribute != null) {
-				getAxiomElement().removeAttribute(attribute);
-			}
-		} catch (OMException ex) {
-			throw new AxiomSoapElementException(ex);
-		}
-	}
-
-	@Override
-	public final String getAttributeValue(QName name) {
-		try {
-			return getAxiomElement().getAttributeValue(name);
-		} catch (OMException ex) {
-			throw new AxiomSoapElementException(ex);
-		}
-	}
-
-	@Override
-	public final Iterator getAllAttributes() {
-		try {
-			List results = new ArrayList();
-			for (Iterator iterator = getAxiomElement().getAllAttributes(); iterator.hasNext();) {
-				OMAttribute attribute = (OMAttribute) iterator.next();
-				results.add(attribute.getQName());
-			}
-			return results.iterator();
-
-		} catch (OMException ex) {
-			throw new AxiomSoapElementException(ex);
-		}
-	}
-
-	@Override
-	public void addNamespaceDeclaration(String prefix, String namespaceUri) {
-		try {
-			if (StringUtils.hasLength(prefix)) {
-				getAxiomElement().declareNamespace(namespaceUri, prefix);
-			} else {
-				getAxiomElement().declareDefaultNamespace(namespaceUri);
-			}
-		} catch (OMException ex) {
-			throw new AxiomSoapElementException(ex);
-		}
-	}
-
-	protected final OMElement getAxiomElement() {
-		return axiomElement;
-	}
-
-	protected final SOAPFactory getAxiomFactory() {
-		return axiomFactory;
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapElementException.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapElementException.java
deleted file mode 100644
index 099e5bd3..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapElementException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import org.springframework.ws.soap.SoapElementException;
-
-@SuppressWarnings("serial")
-public class AxiomSoapElementException extends SoapElementException {
-
-	public AxiomSoapElementException(String msg) {
-		super(msg);
-	}
-
-	public AxiomSoapElementException(String msg, Throwable ex) {
-		super(msg, ex);
-	}
-
-	public AxiomSoapElementException(Throwable ex) {
-		super(ex);
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapEnvelope.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapEnvelope.java
deleted file mode 100644
index 643a3991..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapEnvelope.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.axiom.soap.SOAP12Constants;
-import org.apache.axiom.soap.SOAPBody;
-import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPHeader;
-import org.springframework.ws.soap.SoapBody;
-import org.springframework.ws.soap.SoapEnvelope;
-import org.springframework.ws.soap.SoapHeader;
-
-/**
- * Axiom-Specific version of {@code org.springframework.ws.soap.SoapEnvelope}.
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-class AxiomSoapEnvelope extends AxiomSoapElement implements SoapEnvelope {
-
-	boolean payloadCaching;
-
-	private AxiomSoapBody body;
-
-	private final boolean langAttributeOnSoap11FaultString;
-
-	AxiomSoapEnvelope(SOAPEnvelope axiomEnvelope, SOAPFactory axiomFactory, boolean payloadCaching,
-			boolean langAttributeOnSoap11FaultString) {
-		super(axiomEnvelope, axiomFactory);
-		this.payloadCaching = payloadCaching;
-		this.langAttributeOnSoap11FaultString = langAttributeOnSoap11FaultString;
-	}
-
-	@Override
-	public SoapHeader getHeader() {
-		try {
-			if (getAxiomEnvelope().getHeader() == null) {
-				return null;
-			} else {
-				SOAPHeader axiomHeader = getAxiomEnvelope().getHeader();
-				String namespaceURI = getAxiomEnvelope().getNamespace().getNamespaceURI();
-				if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) {
-					return new AxiomSoap11Header(axiomHeader, getAxiomFactory());
-				} else if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) {
-					return new AxiomSoap12Header(axiomHeader, getAxiomFactory());
-				} else {
-					throw new AxiomSoapEnvelopeException("Unknown SOAP namespace \"" + namespaceURI + "\"");
-				}
-			}
-		} catch (OMException ex) {
-			throw new AxiomSoapHeaderException(ex);
-		}
-	}
-
-	@Override
-	public SoapBody getBody() {
-		if (body == null) {
-			try {
-				SOAPBody axiomBody = getAxiomEnvelope().getBody();
-				String namespaceURI = getAxiomEnvelope().getNamespace().getNamespaceURI();
-				if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) {
-					body = new AxiomSoap11Body(axiomBody, getAxiomFactory(), payloadCaching, langAttributeOnSoap11FaultString);
-				} else if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) {
-					body = new AxiomSoap12Body(axiomBody, getAxiomFactory(), payloadCaching);
-				} else {
-					throw new AxiomSoapEnvelopeException("Unknown SOAP namespace \"" + namespaceURI + "\"");
-				}
-			} catch (OMException ex) {
-				throw new AxiomSoapBodyException(ex);
-			}
-		}
-		return body;
-	}
-
-	protected SOAPEnvelope getAxiomEnvelope() {
-		return (SOAPEnvelope) getAxiomElement();
-	}
-
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapEnvelopeException.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapEnvelopeException.java
deleted file mode 100644
index 013fdc36..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapEnvelopeException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import org.springframework.ws.soap.SoapEnvelopeException;
-
-/**
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-@SuppressWarnings("serial")
-public class AxiomSoapEnvelopeException extends SoapEnvelopeException {
-
-	public AxiomSoapEnvelopeException(String msg) {
-		super(msg);
-	}
-
-	public AxiomSoapEnvelopeException(String msg, Throwable ex) {
-		super(msg, ex);
-	}
-
-	public AxiomSoapEnvelopeException(Throwable ex) {
-		super(ex);
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFault.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFault.java
deleted file mode 100644
index 369f3f57..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFault.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPFault;
-import org.apache.axiom.soap.SOAPFaultDetail;
-import org.apache.axiom.soap.SOAPFaultRole;
-import org.apache.axiom.soap.SOAPProcessingException;
-import org.springframework.ws.soap.SoapFault;
-import org.springframework.ws.soap.SoapFaultDetail;
-
-/** @author Arjen Poutsma */
-abstract class AxiomSoapFault extends AxiomSoapElement implements SoapFault {
-
-	protected AxiomSoapFault(SOAPFault axiomFault, SOAPFactory axiomFactory) {
-		super(axiomFault, axiomFactory);
-	}
-
-	@Override
-	public String getFaultActorOrRole() {
-		SOAPFaultRole faultRole = getAxiomFault().getRole();
-		return faultRole != null ? faultRole.getRoleValue() : null;
-	}
-
-	@Override
-	public void setFaultActorOrRole(String actor) {
-		try {
-			SOAPFaultRole axiomFaultRole = getAxiomFactory().createSOAPFaultRole(getAxiomFault());
-			axiomFaultRole.setRoleValue(actor);
-		} catch (SOAPProcessingException ex) {
-			throw new AxiomSoapFaultException(ex);
-		}
-
-	}
-
-	@Override
-	public SoapFaultDetail getFaultDetail() {
-		try {
-			SOAPFaultDetail axiomFaultDetail = getAxiomFault().getDetail();
-			return axiomFaultDetail != null ? new AxiomSoapFaultDetail(axiomFaultDetail, getAxiomFactory()) : null;
-		} catch (OMException ex) {
-			throw new AxiomSoapFaultException(ex);
-		}
-
-	}
-
-	@Override
-	public SoapFaultDetail addFaultDetail() {
-		try {
-			SOAPFaultDetail axiomFaultDetail = getAxiomFactory().createSOAPFaultDetail(getAxiomFault());
-			return new AxiomSoapFaultDetail(axiomFaultDetail, getAxiomFactory());
-		} catch (OMException ex) {
-			throw new AxiomSoapFaultException(ex);
-		}
-
-	}
-
-	protected SOAPFault getAxiomFault() {
-		return (SOAPFault) getAxiomElement();
-	}
-
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFaultDetail.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFaultDetail.java
deleted file mode 100644
index 4b631bd3..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFaultDetail.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import java.util.Iterator;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.Result;
-
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPFaultDetail;
-import org.springframework.ws.soap.SoapFaultDetail;
-import org.springframework.ws.soap.SoapFaultDetailElement;
-
-/**
- * Axiom-specific version of {@code org.springframework.ws.soap.SoapFaultDetail}.
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-class AxiomSoapFaultDetail extends AxiomSoapElement implements SoapFaultDetail {
-
-	public AxiomSoapFaultDetail(SOAPFaultDetail axiomFaultDetail, SOAPFactory axiomFactory) {
-		super(axiomFaultDetail, axiomFactory);
-	}
-
-	@Override
-	public SoapFaultDetailElement addFaultDetailElement(QName name) {
-		try {
-			OMElement element = getAxiomFactory().createOMElement(name, getAxiomFaultDetail());
-			return new AxiomSoapFaultDetailElement(element, getAxiomFactory());
-		} catch (OMException ex) {
-			throw new AxiomSoapFaultException(ex);
-		}
-
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public Iterator getDetailEntries() {
-		return new AxiomSoapFaultDetailElementIterator(getAxiomFaultDetail().getChildElements());
-	}
-
-	@Override
-	public Result getResult() {
-		return getAxiomFaultDetail().getSAXResult();
-	}
-
-	protected SOAPFaultDetail getAxiomFaultDetail() {
-		return (SOAPFaultDetail) getAxiomElement();
-	}
-
-	private class AxiomSoapFaultDetailElementIterator implements Iterator {
-
-		private final Iterator axiomIterator;
-
-		private AxiomSoapFaultDetailElementIterator(Iterator axiomIterator) {
-			this.axiomIterator = axiomIterator;
-		}
-
-		@Override
-		public boolean hasNext() {
-			return axiomIterator.hasNext();
-		}
-
-		@Override
-		public SoapFaultDetailElement next() {
-			try {
-				OMElement axiomElement = axiomIterator.next();
-				return new AxiomSoapFaultDetailElement(axiomElement, getAxiomFactory());
-			} catch (OMException ex) {
-				throw new AxiomSoapFaultException(ex);
-			}
-
-		}
-
-		@Override
-		public void remove() {
-			axiomIterator.remove();
-		}
-	}
-
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFaultDetailElement.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFaultDetailElement.java
deleted file mode 100644
index f80203f6..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFaultDetailElement.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import javax.xml.transform.Result;
-
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.soap.SOAPFactory;
-import org.springframework.ws.soap.SoapFaultDetailElement;
-
-/**
- * Axiom-specific version of {@code org.springframework.ws.soap.SoapFaultDetailElement}.
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-class AxiomSoapFaultDetailElement extends AxiomSoapElement implements SoapFaultDetailElement {
-
-	public AxiomSoapFaultDetailElement(OMElement axiomElement, SOAPFactory soapFactory) {
-		super(axiomElement, soapFactory);
-	}
-
-	@Override
-	public Result getResult() {
-		try {
-			return getAxiomElement().getSAXResult();
-		} catch (OMException ex) {
-			throw new AxiomSoapFaultException(ex);
-		}
-
-	}
-
-	@Override
-	public void addText(String text) {
-		try {
-			getAxiomElement().setText(text);
-		} catch (OMException ex) {
-			throw new AxiomSoapFaultException(ex);
-		}
-	}
-
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFaultException.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFaultException.java
deleted file mode 100644
index 159f22f7..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapFaultException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import org.springframework.ws.soap.SoapFaultException;
-
-/**
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-@SuppressWarnings("serial")
-public class AxiomSoapFaultException extends SoapFaultException {
-
-	public AxiomSoapFaultException(String msg) {
-		super(msg);
-	}
-
-	public AxiomSoapFaultException(String msg, Throwable ex) {
-		super(msg, ex);
-	}
-
-	public AxiomSoapFaultException(Throwable ex) {
-		super(ex);
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeader.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeader.java
deleted file mode 100644
index 8dc01b3e..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeader.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import java.util.Iterator;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.Result;
-
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPHeader;
-import org.apache.axiom.soap.SOAPHeaderBlock;
-import org.springframework.ws.soap.SoapHeader;
-import org.springframework.ws.soap.SoapHeaderElement;
-import org.springframework.ws.soap.SoapHeaderException;
-
-/**
- * Axiom-specific version of {@code org.springframework.ws.soap.SoapHeader}.
- *
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-abstract class AxiomSoapHeader extends AxiomSoapElement implements SoapHeader {
-
-	AxiomSoapHeader(SOAPHeader axiomHeader, SOAPFactory axiomFactory) {
-		super(axiomHeader, axiomFactory);
-	}
-
-	@Override
-	public Result getResult() {
-		return getAxiomHeader().getSAXResult();
-	}
-
-	@Override
-	public SoapHeaderElement addHeaderElement(QName name) {
-		try {
-			OMNamespace namespace = getAxiomFactory().createOMNamespace(name.getNamespaceURI(), name.getPrefix());
-			SOAPHeaderBlock axiomHeaderBlock = getAxiomHeader().addHeaderBlock(name.getLocalPart(), namespace);
-			return new AxiomSoapHeaderElement(axiomHeaderBlock, getAxiomFactory());
-		} catch (OMException ex) {
-			throw new AxiomSoapHeaderException(ex);
-		}
-	}
-
-	@Override
-	public void removeHeaderElement(QName name) throws SoapHeaderException {
-		try {
-			OMElement element = getAxiomHeader().getFirstChildWithName(name);
-			if (element != null) {
-				element.detach();
-			}
-		} catch (OMException ex) {
-			throw new AxiomSoapHeaderException(ex);
-		}
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public Iterator examineMustUnderstandHeaderElements(String role) {
-		try {
-			return new AxiomSoapHeaderElementIterator(getAxiomHeader().examineMustUnderstandHeaderBlocks(role));
-		} catch (OMException ex) {
-			throw new AxiomSoapHeaderException(ex);
-		}
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public Iterator examineAllHeaderElements() {
-		try {
-			return new AxiomSoapHeaderElementIterator(getAxiomHeader().examineAllHeaderBlocks());
-		} catch (OMException ex) {
-			throw new AxiomSoapHeaderException(ex);
-		}
-	}
-
-	@Override
-	@SuppressWarnings("unchecked")
-	public Iterator examineHeaderElements(QName name) throws SoapHeaderException {
-		try {
-			return new AxiomSoapHeaderElementIterator(getAxiomHeader().getChildrenWithName(name));
-		} catch (OMException ex) {
-			throw new AxiomSoapHeaderException(ex);
-		}
-	}
-
-	protected SOAPHeader getAxiomHeader() {
-		return (SOAPHeader) getAxiomElement();
-	}
-
-	protected class AxiomSoapHeaderElementIterator implements Iterator {
-
-		private final Iterator axiomIterator;
-
-		protected AxiomSoapHeaderElementIterator(Iterator axiomIterator) {
-			this.axiomIterator = axiomIterator;
-		}
-
-		@Override
-		public boolean hasNext() {
-			return axiomIterator.hasNext();
-		}
-
-		@Override
-		public SoapHeaderElement next() {
-			try {
-				OMElement axiomHeaderBlock = axiomIterator.next();
-				return new AxiomSoapHeaderElement(axiomHeaderBlock, getAxiomFactory());
-			} catch (OMException ex) {
-				throw new AxiomSoapHeaderException(ex);
-			}
-		}
-
-		@Override
-		public void remove() {
-			axiomIterator.remove();
-		}
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeaderElement.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeaderElement.java
deleted file mode 100644
index a7677574..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeaderElement.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import javax.xml.transform.Result;
-
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPHeaderBlock;
-import org.springframework.ws.soap.SoapHeaderElement;
-
-/** Axiom-specific version of {@code org.springframework.ws.soap.SoapHeaderHeaderElement}. */
-class AxiomSoapHeaderElement extends AxiomSoapElement implements SoapHeaderElement {
-
-	public AxiomSoapHeaderElement(OMElement axiomHeaderBlock, SOAPFactory axiomFactory) {
-		super(axiomHeaderBlock, axiomFactory);
-	}
-
-	@Override
-	public String getActorOrRole() {
-		return getAxiomHeaderBlock().getRole();
-	}
-
-	@Override
-	public void setActorOrRole(String role) {
-		getAxiomHeaderBlock().setRole(role);
-	}
-
-	@Override
-	public boolean getMustUnderstand() {
-		return getAxiomHeaderBlock().getMustUnderstand();
-	}
-
-	@Override
-	public void setMustUnderstand(boolean mustUnderstand) {
-		getAxiomHeaderBlock().setMustUnderstand(mustUnderstand);
-	}
-
-	@Override
-	public Result getResult() {
-		try {
-			return getAxiomHeaderBlock().getSAXResult();
-		} catch (OMException ex) {
-			throw new AxiomSoapHeaderException(ex);
-		}
-
-	}
-
-	@Override
-	public String getText() {
-		return getAxiomHeaderBlock().getText();
-	}
-
-	@Override
-	public void setText(String content) {
-		getAxiomHeaderBlock().setText(content);
-	}
-
-	protected SOAPHeaderBlock getAxiomHeaderBlock() {
-		return (SOAPHeaderBlock) getAxiomElement();
-	}
-
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeaderException.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeaderException.java
deleted file mode 100644
index 026c7204..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeaderException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import org.springframework.ws.soap.SoapHeaderException;
-
-/**
- * @author Arjen Poutsma
- * @since 1.0.0
- */
-@SuppressWarnings("serial")
-public class AxiomSoapHeaderException extends SoapHeaderException {
-
-	public AxiomSoapHeaderException(String msg) {
-		super(msg);
-	}
-
-	public AxiomSoapHeaderException(String msg, Throwable ex) {
-		super(msg, ex);
-	}
-
-	public AxiomSoapHeaderException(Throwable ex) {
-		super(ex);
-	}
-}
diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessage.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessage.java
deleted file mode 100644
index 2904d6c9..00000000
--- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessage.java
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * Copyright 2005-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.ws.soap.axiom;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
-import java.io.Writer;
-import java.util.Iterator;
-
-import javax.activation.DataHandler;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.transform.dom.DOMSource;
-
-import org.apache.axiom.attachments.Attachments;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.om.OMOutputFormat;
-import org.apache.axiom.om.OMXMLBuilderFactory;
-import org.apache.axiom.om.impl.MTOMConstants;
-import org.apache.axiom.om.impl.OMMultipartWriter;
-import org.apache.axiom.soap.SOAPBody;
-import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPMessage;
-import org.apache.axiom.soap.SOAPProcessingException;
-import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
-import org.springframework.ws.mime.Attachment;
-import org.springframework.ws.soap.AbstractSoapMessage;
-import org.springframework.ws.soap.SoapEnvelope;
-import org.springframework.ws.soap.SoapMessage;
-import org.springframework.ws.soap.SoapVersion;
-import org.springframework.ws.soap.axiom.support.AxiomUtils;
-import org.springframework.ws.soap.support.SoapUtils;
-import org.springframework.ws.stream.StreamingPayload;
-import org.springframework.ws.stream.StreamingWebServiceMessage;
-import org.springframework.ws.transport.TransportConstants;
-import org.springframework.ws.transport.TransportOutputStream;
-import org.w3c.dom.Document;
-
-/**
- * AXIOM-specific implementation of the {@link SoapMessage} interface. Created via the {@link AxiomSoapMessageFactory},
- * wraps a {@link SOAPMessage}.
- *
- * @author Arjen Poutsma
- * @see SOAPMessage
- * @since 1.0.0
- */
-public class AxiomSoapMessage extends AbstractSoapMessage implements StreamingWebServiceMessage {
-
-	private static final String EMPTY_SOAP_ACTION = "\"\"";
-
-	private SOAPMessage axiomMessage;
-
-	private final SOAPFactory axiomFactory;
-
-	private final Attachments attachments;
-
-	private final boolean payloadCaching;
-
-	private AxiomSoapEnvelope envelope;
-
-	private String soapAction;
-
-	private final boolean langAttributeOnSoap11FaultString;
-
-	private OMOutputFormat outputFormat;
-
-	/**
-	 * Create a new, empty {@code AxiomSoapMessage}.
-	 *
-	 * @param soapFactory the AXIOM SOAPFactory
-	 */
-	public AxiomSoapMessage(SOAPFactory soapFactory) {
-		this(soapFactory, true, true);
-	}
-
-	/**
-	 * Create a new, empty {@code AxiomSoapMessage}.
-	 *
-	 * @param soapFactory the AXIOM SOAPFactory
-	 */
-	public AxiomSoapMessage(SOAPFactory soapFactory, boolean payloadCaching, boolean langAttributeOnSoap11FaultString) {
-		SOAPEnvelope soapEnvelope = soapFactory.getDefaultEnvelope();
-		axiomFactory = soapFactory;
-		axiomMessage = axiomFactory.createSOAPMessage();
-		axiomMessage.setSOAPEnvelope(soapEnvelope);
-		attachments = new Attachments();
-		this.payloadCaching = payloadCaching;
-		this.langAttributeOnSoap11FaultString = langAttributeOnSoap11FaultString;
-		soapAction = EMPTY_SOAP_ACTION;
-	}
-
-	/**
-	 * Create a new {@code AxiomSoapMessage} based on the given AXIOM {@code SOAPMessage}.
-	 *
-	 * @param soapMessage the AXIOM SOAPMessage
-	 * @param soapAction the value of the SOAP Action header
-	 * @param payloadCaching whether the contents of the SOAP body should be cached or not
-	 */
-	public AxiomSoapMessage(SOAPMessage soapMessage, String soapAction, boolean payloadCaching,
-			boolean langAttributeOnSoap11FaultString) {
-		this(soapMessage, new Attachments(), soapAction, payloadCaching, langAttributeOnSoap11FaultString);
-	}
-
-	/**
-	 * Create a new {@code AxiomSoapMessage} based on the given AXIOM {@code SOAPMessage} and attachments.
-	 *
-	 * @param soapMessage the AXIOM SOAPMessage
-	 * @param attachments the attachments
-	 * @param soapAction the value of the SOAP Action header
-	 * @param payloadCaching whether the contents of the SOAP body should be cached or not
-	 */
-	public AxiomSoapMessage(SOAPMessage soapMessage, Attachments attachments, String soapAction, boolean payloadCaching,
-			boolean langAttributeOnSoap11FaultString) {
-		Assert.notNull(soapMessage, "'soapMessage' must not be null");
-		Assert.notNull(attachments, "'attachments' must not be null");
-		axiomMessage = soapMessage;
-		axiomFactory = (SOAPFactory) soapMessage.getSOAPEnvelope().getOMFactory();
-		this.attachments = attachments;
-		if (!StringUtils.hasLength(soapAction)) {
-			soapAction = EMPTY_SOAP_ACTION;
-		}
-		this.soapAction = soapAction;
-		this.payloadCaching = payloadCaching;
-		this.langAttributeOnSoap11FaultString = langAttributeOnSoap11FaultString;
-	}
-
-	/** Return the AXIOM {@code SOAPMessage} that this {@code AxiomSoapMessage} is based on. */
-	public final SOAPMessage getAxiomMessage() {
-		return axiomMessage;
-	}
-
-	/**
-	 * Sets the AXIOM {@code SOAPMessage} that this {@code AxiomSoapMessage} is based on.
-	 * 

- * Calling this method also clears the SOAP Action property. - */ - public final void setAxiomMessage(SOAPMessage axiomMessage) { - Assert.notNull(axiomMessage, "'axiomMessage' must not be null"); - this.axiomMessage = axiomMessage; - this.envelope = null; - this.soapAction = EMPTY_SOAP_ACTION; - } - - /** - * Sets the {@link OMOutputFormat} to be used when writing the message. - * - * @see #writeTo(java.io.OutputStream) - */ - public void setOutputFormat(OMOutputFormat outputFormat) { - this.outputFormat = outputFormat; - } - - @Override - public void setStreamingPayload(StreamingPayload payload) { - AxiomSoapBody soapBody = (AxiomSoapBody) getSoapBody(); - soapBody.setStreamingPayload(payload); - } - - @Override - public SoapEnvelope getEnvelope() { - if (envelope == null) { - try { - envelope = new AxiomSoapEnvelope(axiomMessage.getSOAPEnvelope(), axiomFactory, payloadCaching, - langAttributeOnSoap11FaultString); - } catch (SOAPProcessingException ex) { - throw new AxiomSoapEnvelopeException(ex); - } - } - return envelope; - } - - @Override - public String getSoapAction() { - return soapAction; - } - - @Override - public void setSoapAction(String soapAction) { - soapAction = SoapUtils.escapeAction(soapAction); - this.soapAction = soapAction; - } - - @Override - public Document getDocument() { - return AxiomUtils.toDocument(axiomMessage.getSOAPEnvelope()); - } - - @Override - public void setDocument(Document document) { - // save the Soap Action - String soapAction = getSoapAction(); - // replace the Axiom message - setAxiomMessage(OMXMLBuilderFactory.createSOAPModelBuilder(axiomFactory.getMetaFactory(), new DOMSource(document)) - .getSOAPMessage()); - // restore the Soap Action - setSoapAction(soapAction); - } - - @Override - public boolean isXopPackage() { - try { - return MTOMConstants.MTOM_TYPE.equals(attachments.getAttachmentSpecType()); - } catch (OMException ex) { - return false; - } catch (NullPointerException ex) { - // gotta love Axis2 - return false; - } - } - - @Override - public boolean convertToXopPackage() { - return false; - } - - @Override - public Attachment getAttachment(String contentId) { - Assert.hasLength(contentId, "contentId must not be empty"); - if (contentId.startsWith("<") && contentId.endsWith(">")) { - contentId = contentId.substring(1, contentId.length() - 1); - } - DataHandler dataHandler = attachments.getDataHandler(contentId); - return dataHandler != null ? new AxiomAttachment(contentId, dataHandler) : null; - } - - @Override - public Iterator getAttachments() { - return new AxiomAttachmentIterator(); - } - - @Override - public Attachment addAttachment(String contentId, DataHandler dataHandler) { - Assert.hasLength(contentId, "contentId must not be empty"); - Assert.notNull(dataHandler, "dataHandler must not be null"); - attachments.addDataHandler(contentId, dataHandler); - return new AxiomAttachment(contentId, dataHandler); - } - - @Override - public void writeTo(OutputStream outputStream) throws IOException { - try { - - OMOutputFormat outputFormat = getOutputFormat(); - if (outputStream instanceof TransportOutputStream) { - TransportOutputStream transportOutputStream = (TransportOutputStream) outputStream; - String contentType = outputFormat.getContentType(); - if (!(outputFormat.isDoingSWA() || outputFormat.isOptimized())) { - String charsetEncoding = axiomMessage.getCharsetEncoding(); - contentType += "; charset=" + charsetEncoding; - } - SoapVersion version = getVersion(); - if (SoapVersion.SOAP_11 == version) { - transportOutputStream.addHeader(TransportConstants.HEADER_SOAP_ACTION, soapAction); - transportOutputStream.addHeader(TransportConstants.HEADER_ACCEPT, version.getContentType()); - } else if (SoapVersion.SOAP_12 == version) { - contentType += "; action=" + soapAction; - transportOutputStream.addHeader(TransportConstants.HEADER_ACCEPT, version.getContentType()); - } - transportOutputStream.addHeader(TransportConstants.HEADER_CONTENT_TYPE, contentType); - - } - if (!(outputFormat.isOptimized()) & outputFormat.isDoingSWA()) { - writeSwAMessage(outputStream, outputFormat); - } else { - if (payloadCaching) { - axiomMessage.serialize(outputStream, outputFormat); - } else { - axiomMessage.serializeAndConsume(outputStream, outputFormat); - } - } - outputStream.flush(); - } catch (XMLStreamException ex) { - throw new AxiomSoapMessageException("Could not write message to OutputStream: " + ex.getMessage(), ex); - } catch (OMException ex) { - throw new AxiomSoapMessageException("Could not write message to OutputStream: " + ex.getMessage(), ex); - } - } - - private OMOutputFormat getOutputFormat() { - if (outputFormat != null) { - return outputFormat; - } else { - String charsetEncoding = axiomMessage.getCharsetEncoding(); - - OMOutputFormat outputFormat = new OMOutputFormat(); - outputFormat.setCharSetEncoding(charsetEncoding); - outputFormat.setSOAP11(getVersion() == SoapVersion.SOAP_11); - if (isXopPackage()) { - outputFormat.setDoOptimize(true); - } else if (!attachments.getContentIDSet().isEmpty()) { - outputFormat.setDoingSWA(true); - } - return outputFormat; - } - } - - private void writeSwAMessage(OutputStream outputStream, OMOutputFormat format) - throws XMLStreamException, UnsupportedEncodingException { - StringWriter writer = new StringWriter(); - SOAPEnvelope envelope = axiomMessage.getSOAPEnvelope(); - if (payloadCaching) { - envelope.serialize(writer, format); - } else { - envelope.serializeAndConsume(writer, format); - } - - try { - OMMultipartWriter mpw = new OMMultipartWriter(outputStream, format); - - Writer rootPartWriter = new OutputStreamWriter(mpw.writeRootPart(), format.getCharSetEncoding()); - rootPartWriter.write(writer.toString()); - rootPartWriter.close(); - - // Get the collection of ids associated with the attachments - for (String id : attachments.getAllContentIDs()) { - mpw.writePart(attachments.getDataHandler(id), id); - } - - mpw.complete(); - } catch (IOException ex) { - throw new OMException("Error writing SwA message", ex); - } - } - - public String toString() { - StringBuilder builder = new StringBuilder("AxiomSoapMessage"); - if (payloadCaching) { - try { - SOAPEnvelope envelope = axiomMessage.getSOAPEnvelope(); - if (envelope != null) { - SOAPBody body = envelope.getBody(); - if (body != null) { - OMElement bodyElement = body.getFirstElement(); - if (bodyElement != null) { - builder.append(' '); - builder.append(bodyElement.getQName()); - } - } - } - } catch (OMException ex) { - // ignore - } - } - return builder.toString(); - } - - private class AxiomAttachmentIterator implements Iterator { - - private final Iterator iterator; - - @SuppressWarnings("unchecked") - private AxiomAttachmentIterator() { - iterator = attachments.getContentIDSet().iterator(); - } - - @Override - public boolean hasNext() { - return iterator.hasNext(); - } - - @Override - public Attachment next() { - String contentId = iterator.next(); - DataHandler dataHandler = attachments.getDataHandler(contentId); - return new AxiomAttachment(contentId, dataHandler); - } - - @Override - public void remove() { - iterator.remove(); - } - } - -} diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessageCreationException.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessageCreationException.java deleted file mode 100644 index 93815f9d..00000000 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessageCreationException.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.axiom; - -import org.springframework.ws.soap.SoapMessageCreationException; - -/** - * @author Arjen Poutsma - * @since 1.0.0 - */ -@SuppressWarnings("serial") -public class AxiomSoapMessageCreationException extends SoapMessageCreationException { - - public AxiomSoapMessageCreationException(String msg) { - super(msg); - } - - public AxiomSoapMessageCreationException(String msg, Throwable ex) { - super(msg, ex); - } -} diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessageException.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessageException.java deleted file mode 100644 index 7aba23c4..00000000 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessageException.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.axiom; - -import org.springframework.ws.soap.SoapMessageException; - -/** - * @author Arjen Poutsma - * @since 1.0.0 - */ -@SuppressWarnings("serial") -public class AxiomSoapMessageException extends SoapMessageException { - - public AxiomSoapMessageException(String msg) { - super(msg); - } - - public AxiomSoapMessageException(String msg, Throwable ex) { - super(msg, ex); - } -} diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessageFactory.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessageFactory.java deleted file mode 100644 index 1e2ec0d1..00000000 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapMessageFactory.java +++ /dev/null @@ -1,380 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.axiom; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.Iterator; -import java.util.Locale; - -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; - -import org.apache.axiom.attachments.Attachments; -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.om.OMException; -import org.apache.axiom.om.impl.MTOMConstants; -import org.apache.axiom.soap.SOAP11Constants; -import org.apache.axiom.soap.SOAP11Version; -import org.apache.axiom.soap.SOAP12Constants; -import org.apache.axiom.soap.SOAP12Version; -import org.apache.axiom.soap.SOAPFactory; -import org.apache.axiom.soap.SOAPMessage; -import org.apache.axiom.soap.SOAPModelBuilder; -import org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder; -import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.util.Assert; -import org.springframework.util.StringUtils; -import org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor; -import org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping; -import org.springframework.ws.soap.SoapMessageFactory; -import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor; -import org.springframework.ws.soap.server.endpoint.mapping.SoapActionAnnotationMethodEndpointMapping; -import org.springframework.ws.soap.support.SoapUtils; -import org.springframework.ws.transport.TransportConstants; -import org.springframework.ws.transport.TransportInputStream; -import org.springframework.xml.XMLInputFactoryUtils; - -/** - * Axiom-specific implementation of the {@link org.springframework.ws.WebServiceMessageFactory WebServiceMessageFactory} - * interface. Creates {@link org.springframework.ws.soap.axiom.AxiomSoapMessage AxiomSoapMessages}. - *

- * To increase reading performance on the SOAP request created by this message factory, you can set the - * {@link #setPayloadCaching(boolean) payloadCaching} property to {@code false} (default is {@code true}). This this - * will read the contents of the body directly from the stream. However, when this setting is enabled, the - * payload can only be read once. This means that any endpoint mappings or interceptors which are based on the - * message payload (such as the {@link PayloadRootAnnotationMethodEndpointMapping}, the - * {@link PayloadValidatingInterceptor}, or the {@link PayloadLoggingInterceptor}) cannot be used. Instead, use an - * endpoint mapping that does not consume the payload (i.e. the {@link SoapActionAnnotationMethodEndpointMapping}). - *

- * Additionally, this message factory can cache large attachments to disk by setting the - * {@link #setAttachmentCaching(boolean) attachmentCaching} property to {@code true} (default is {@code false}). - * Optionally, the location where attachments are stored can be defined via the {@link #setAttachmentCacheDir(File) - * attachmentCacheDir} property (defaults to the system temp file path). - *

- * Mostly derived from {@code org.apache.axis2.transport.http.HTTPTransportUtils} and - * {@code org.apache.axis2.transport.TransportUtils}, which we cannot use since they are not part of the Axiom - * distribution. - * - * @author Arjen Poutsma - * @author Andreas Veithen - * @see AxiomSoapMessage - * @see #setPayloadCaching(boolean) - * @since 1.0.0 - */ -public class AxiomSoapMessageFactory implements SoapMessageFactory, InitializingBean { - - private static final String CHARSET_PARAMETER = "charset"; - - private static final String DEFAULT_CHARSET_ENCODING = "UTF-8"; - - private static final String MULTI_PART_RELATED_CONTENT_TYPE = "multipart/related"; - - private static final Log logger = LogFactory.getLog(AxiomSoapMessageFactory.class); - - private XMLInputFactory inputFactory; - - private boolean payloadCaching = true; - - private boolean attachmentCaching = false; - - private File attachmentCacheDir; - - private int attachmentCacheThreshold = 4096; - - // use SOAP 1.1 by default - private SOAPFactory soapFactory = OMAbstractFactory.getSOAP11Factory(); - - private boolean langAttributeOnSoap11FaultString = true; - - private boolean replacingEntityReferences = false; - - private boolean supportingExternalEntities = false; - - /** - * Indicates whether the SOAP Body payload should be cached or not. Default is {@code true}. - *

- * Setting this to {@code false} will increase performance, but also result in the fact that the message payload can - * only be read once. - */ - public void setPayloadCaching(boolean payloadCaching) { - this.payloadCaching = payloadCaching; - } - - /** - * Indicates whether SOAP attachments should be cached or not. Default is {@code false}. - *

- * Setting this to {@code true} will cause Axiom to store larger attachments on disk, rather than in memory. This - * decreases memory consumption, but decreases performance. - */ - public void setAttachmentCaching(boolean attachmentCaching) { - this.attachmentCaching = attachmentCaching; - } - - /** - * Sets the directory where SOAP attachments will be stored. Only used when {@link #setAttachmentCaching(boolean) - * attachmentCaching} is set to {@code true}. - *

- * The parameter should be an existing, writable directory. This property defaults to the temporary directory of the - * operating system (i.e. the value of the {@code java.io.tmpdir} system property). - */ - public void setAttachmentCacheDir(File attachmentCacheDir) { - Assert.notNull(attachmentCacheDir, "'attachmentCacheDir' must not be null"); - Assert.isTrue(attachmentCacheDir.isDirectory(), "'attachmentCacheDir' must be a directory"); - Assert.isTrue(attachmentCacheDir.canWrite(), "'attachmentCacheDir' must be writable"); - this.attachmentCacheDir = attachmentCacheDir; - } - - /** - * Sets the threshold for attachments caching, in bytes. Attachments larger than this threshold will be cached in the - * {@link #setAttachmentCacheDir(File) attachment cache directory}. Only used when - * {@link #setAttachmentCaching(boolean) attachmentCaching} is set to {@code true}. - *

- * Defaults to 4096 bytes (i.e. 4 kilobytes). - */ - public void setAttachmentCacheThreshold(int attachmentCacheThreshold) { - Assert.isTrue(attachmentCacheThreshold > 0, "'attachmentCacheThreshold' must be larger than 0"); - this.attachmentCacheThreshold = attachmentCacheThreshold; - } - - @Override - public void setSoapVersion(SoapVersion version) { - if (SoapVersion.SOAP_11 == version) { - soapFactory = OMAbstractFactory.getSOAP11Factory(); - } else if (SoapVersion.SOAP_12 == version) { - soapFactory = OMAbstractFactory.getSOAP12Factory(); - } else { - throw new IllegalArgumentException( - "Invalid version [" + version + "]. " + "Expected the SOAP_11 or SOAP_12 constant"); - } - } - - /** - * Defines whether a {@code xml:lang} attribute should be set on SOAP 1.1 {@code } elements. - *

- * The default is {@code true}, to comply with WS-I, but this flag can be set to {@code false} to the older W3C SOAP - * 1.1 specification. - * - * @see WS-I Basic Profile 1.1 - */ - public void setLangAttributeOnSoap11FaultString(boolean langAttributeOnSoap11FaultString) { - this.langAttributeOnSoap11FaultString = langAttributeOnSoap11FaultString; - } - - /** - * Sets whether internal entity references should be replaced with their replacement text and report them as - * characters. - * - * @see XMLInputFactory#IS_REPLACING_ENTITY_REFERENCES - */ - public void setReplacingEntityReferences(boolean replacingEntityReferences) { - this.replacingEntityReferences = replacingEntityReferences; - } - - /** - * Sets whether external parsed entities should be resolved. - * - * @see XMLInputFactory#IS_SUPPORTING_EXTERNAL_ENTITIES - */ - public void setSupportingExternalEntities(boolean supportingExternalEntities) { - this.supportingExternalEntities = supportingExternalEntities; - } - - @Override - public void afterPropertiesSet() throws Exception { - if (logger.isInfoEnabled()) { - logger.info(payloadCaching ? "Enabled payload caching" : "Disabled payload caching"); - } - if (attachmentCacheDir == null) { - String tempDir = System.getProperty("java.io.tmpdir"); - setAttachmentCacheDir(new File(tempDir)); - } - inputFactory = createXmlInputFactory(); - } - - @Override - public AxiomSoapMessage createWebServiceMessage() { - return new AxiomSoapMessage(soapFactory, payloadCaching, langAttributeOnSoap11FaultString); - } - - @Override - public AxiomSoapMessage createWebServiceMessage(InputStream inputStream) throws IOException { - Assert.isInstanceOf(TransportInputStream.class, inputStream, - "AxiomSoapMessageFactory requires a TransportInputStream"); - if (inputFactory == null) { - inputFactory = createXmlInputFactory(); - } - TransportInputStream transportInputStream = (TransportInputStream) inputStream; - String contentType = getHeaderValue(transportInputStream, TransportConstants.HEADER_CONTENT_TYPE); - if (!StringUtils.hasLength(contentType)) { - if (logger.isDebugEnabled()) { - logger.debug("TransportInputStream has no Content-Type header; defaulting to \"" - + soapFactory.getSOAPVersion().getMediaType() + "\""); - } - contentType = soapFactory.getSOAPVersion().getMediaType().toString(); - } - String soapAction = getHeaderValue(transportInputStream, TransportConstants.HEADER_SOAP_ACTION); - if (!StringUtils.hasLength(soapAction)) { - soapAction = SoapUtils.extractActionFromContentType(contentType); - } - try { - if (isMultiPartRelated(contentType)) { - return createMultiPartAxiomSoapMessage(inputStream, contentType, soapAction); - } else { - return createAxiomSoapMessage(inputStream, contentType, soapAction); - } - } catch (XMLStreamException ex) { - throw new AxiomSoapMessageCreationException("Could not parse request: " + ex.getMessage(), ex); - } catch (OMException ex) { - throw new AxiomSoapMessageCreationException("Could not create message: " + ex.getMessage(), ex); - } - } - - private String getHeaderValue(TransportInputStream transportInputStream, String header) throws IOException { - String contentType = null; - Iterator iterator = transportInputStream.getHeaders(header); - if (iterator.hasNext()) { - contentType = iterator.next(); - } - return contentType; - } - - private boolean isMultiPartRelated(String contentType) { - contentType = contentType.toLowerCase(Locale.ENGLISH); - return contentType.contains(MULTI_PART_RELATED_CONTENT_TYPE); - } - - @SuppressWarnings("deprecation") - /** Creates an AxiomSoapMessage without attachments. */ - private AxiomSoapMessage createAxiomSoapMessage(InputStream inputStream, String contentType, String soapAction) - throws XMLStreamException { - XMLStreamReader reader = inputFactory.createXMLStreamReader(inputStream, getCharSetEncoding(contentType)); - String envelopeNamespace = getSoapEnvelopeNamespace(contentType); - SOAPModelBuilder builder = new StAXSOAPModelBuilder(reader, soapFactory, envelopeNamespace); - SOAPMessage soapMessage = builder.getSOAPMessage(); - return new AxiomSoapMessage(soapMessage, soapAction, payloadCaching, langAttributeOnSoap11FaultString); - } - - @SuppressWarnings("deprecation") - /** Creates an AxiomSoapMessage with attachments. */ - private AxiomSoapMessage createMultiPartAxiomSoapMessage(InputStream inputStream, String contentType, - String soapAction) throws XMLStreamException { - Attachments attachments = new Attachments(inputStream, contentType, attachmentCaching, - attachmentCacheDir.getAbsolutePath(), Integer.toString(attachmentCacheThreshold)); - XMLStreamReader reader = inputFactory.createXMLStreamReader(attachments.getRootPartInputStream(), - getCharSetEncoding(attachments.getRootPartContentType())); - SOAPModelBuilder builder; - String envelopeNamespace = getSoapEnvelopeNamespace(contentType); - if (MTOMConstants.SWA_TYPE.equals(attachments.getAttachmentSpecType()) - || MTOMConstants.SWA_TYPE_12.equals(attachments.getAttachmentSpecType())) { - builder = new StAXSOAPModelBuilder(reader, soapFactory, envelopeNamespace); - } else if (MTOMConstants.MTOM_TYPE.equals(attachments.getAttachmentSpecType())) { - builder = new MTOMStAXSOAPModelBuilder(reader, attachments, envelopeNamespace); - } else { - throw new AxiomSoapMessageCreationException( - "Unknown attachment type: [" + attachments.getAttachmentSpecType() + "]"); - } - return new AxiomSoapMessage(builder.getSOAPMessage(), attachments, soapAction, payloadCaching, - langAttributeOnSoap11FaultString); - } - - private String getSoapEnvelopeNamespace(String contentType) { - if (contentType.contains(SOAP11Constants.SOAP_11_CONTENT_TYPE)) { - return SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI; - } else if (contentType.contains(SOAP12Constants.SOAP_12_CONTENT_TYPE)) { - return SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI; - } else { - throw new AxiomSoapMessageCreationException("Unknown content type '" + contentType + "'"); - } - - } - - /** - * Returns the character set from the given content type. Mostly copied - * - * @return the character set encoding - */ - protected String getCharSetEncoding(String contentType) { - int charSetIdx = contentType.indexOf(CHARSET_PARAMETER); - if (charSetIdx == -1) { - return DEFAULT_CHARSET_ENCODING; - } - int eqIdx = contentType.indexOf("=", charSetIdx); - - int indexOfSemiColon = contentType.indexOf(";", eqIdx); - String value; - - if (indexOfSemiColon > 0) { - value = contentType.substring(eqIdx + 1, indexOfSemiColon); - } else { - value = contentType.substring(eqIdx + 1, contentType.length()).trim(); - } - if (value.startsWith("\"")) { - value = value.substring(1); - } - if (value.endsWith("\"")) { - return value.substring(0, value.length() - 1); - } - if ("null".equalsIgnoreCase(value)) { - return DEFAULT_CHARSET_ENCODING; - } else { - return value.trim(); - } - } - - /** - * Create a {@code XMLInputFactory} that this resolver will use to create {@link XMLStreamReader} objects. - *

- * Can be overridden in subclasses, adding further initialization of the factory. The resulting factory is cached, so - * this method will only be called once. - *

- * By default this method creates a standard {@link XMLInputFactory} and configures it based on the - * {@link #setReplacingEntityReferences(boolean) replacingEntityReferences} and - * {@link #setSupportingExternalEntities(boolean) supportingExternalEntities} properties. - * - * @return the created factory - */ - protected XMLInputFactory createXmlInputFactory() { - XMLInputFactory inputFactory = XMLInputFactoryUtils.newInstance(); - inputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, replacingEntityReferences); - inputFactory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, supportingExternalEntities); - return inputFactory; - } - - public String toString() { - StringBuilder builder = new StringBuilder("AxiomSoapMessageFactory["); - if (soapFactory.getSOAPVersion() == SOAP11Version.getSingleton()) { - builder.append("SOAP 1.1"); - } else if (soapFactory.getSOAPVersion() == SOAP12Version.getSingleton()) { - builder.append("SOAP 1.2"); - } - builder.append(','); - if (payloadCaching) { - builder.append("PayloadCaching enabled"); - } else { - builder.append("PayloadCaching disabled"); - } - builder.append(']'); - return builder.toString(); - } -} diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/CachingPayload.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/CachingPayload.java deleted file mode 100644 index b8453362..00000000 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/CachingPayload.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom; - -import javax.xml.stream.XMLStreamReader; -import javax.xml.transform.Result; - -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.OMXMLStreamReaderConfiguration; -import org.apache.axiom.soap.SOAPBody; -import org.apache.axiom.soap.SOAPFactory; - -/** - * Caching payload in Axiom. - * - * @author Arjen Poutsma - * @since 1.5.2 - */ -@SuppressWarnings("Since15") -class CachingPayload extends AbstractPayload { - - CachingPayload(SOAPBody axiomBody, SOAPFactory axiomFactory) { - super(axiomBody, axiomFactory); - } - - @Override - protected XMLStreamReader getStreamReader(OMElement payloadElement) { - OMXMLStreamReaderConfiguration config = new OMXMLStreamReaderConfiguration(); - config.setPreserveNamespaceContext(true); - return payloadElement.getXMLStreamReader(true, config); - } - - @Override - public Result getResultInternal() { - return getAxiomBody().getSAXResult(); - } - -} diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/NonCachingPayload.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/NonCachingPayload.java deleted file mode 100644 index 8159d104..00000000 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/NonCachingPayload.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.axiom; - -import java.io.ByteArrayOutputStream; - -import javax.xml.namespace.NamespaceContext; -import javax.xml.namespace.QName; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; -import javax.xml.transform.Result; - -import org.apache.axiom.om.OMDataSource; -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.OMNamespace; -import org.apache.axiom.om.ds.ByteArrayDataSource; -import org.apache.axiom.om.util.StAXUtils; -import org.apache.axiom.soap.SOAPBody; -import org.apache.axiom.soap.SOAPFactory; -import org.springframework.util.xml.StaxUtils; - -/** - * Non-caching payload in Axiom. - * - * @author Jim Cummings - * @author Arjen Poutsma - * @since 1.5.2 - */ -class NonCachingPayload extends AbstractPayload { - - private static final int BUF_SIZE = 1024; - - NonCachingPayload(SOAPBody axiomBody, SOAPFactory axiomFactory) { - super(axiomBody, axiomFactory); - } - - @Override - public Result getResultInternal() { - return StaxUtils.createCustomStaxResult(new DelegatingStreamWriter()); - } - - @Override - protected XMLStreamReader getStreamReader(OMElement payloadElement) { - return payloadElement.getXMLStreamReaderWithoutCaching(); - } - - private class DelegatingStreamWriter implements XMLStreamWriter { - - private final ByteArrayOutputStream baos = new ByteArrayOutputStream(BUF_SIZE); - - private final XMLStreamWriter delegate; - - private QName name; - - private String encoding = "UTF-8"; - - private int elementDepth = 0; - - private boolean payloadAdded = false; - - private DelegatingStreamWriter() { - try { - this.delegate = StAXUtils.createXMLStreamWriter(baos); - } catch (XMLStreamException ex) { - throw new AxiomSoapBodyException("Could not determine payload root element", ex); - } - } - - @Override - public void writeStartDocument() throws XMLStreamException { - // ignored - } - - @Override - public void writeStartDocument(String version) throws XMLStreamException { - // ignored - } - - @Override - public void writeStartDocument(String encoding, String version) throws XMLStreamException { - this.encoding = encoding; - } - - @Override - public void writeStartElement(String localName) throws XMLStreamException { - if (name == null) { - name = new QName(localName); - } - elementDepth++; - delegate.writeStartElement(localName); - } - - @Override - public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException { - if (name == null) { - name = new QName(namespaceURI, localName); - } - elementDepth++; - delegate.writeStartElement(namespaceURI, localName); - } - - @Override - public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { - if (name == null) { - name = new QName(namespaceURI, localName, prefix); - } - elementDepth++; - delegate.writeStartElement(prefix, localName, namespaceURI); - } - - @Override - public void writeEndElement() throws XMLStreamException { - elementDepth--; - delegate.writeEndElement(); - addPayload(); - } - - private void addPayload() throws XMLStreamException { - if (elementDepth <= 0 && !payloadAdded) { - delegate.flush(); - if (baos.size() > 0) { - byte[] buf = baos.toByteArray(); - OMDataSource dataSource = new ByteArrayDataSource(buf, encoding); - OMNamespace namespace = getAxiomFactory().createOMNamespace(name.getNamespaceURI(), name.getPrefix()); - OMElement payloadElement = getAxiomFactory().createOMElement(dataSource, name.getLocalPart(), namespace); - getAxiomBody().addChild(payloadElement); - payloadAdded = true; - } - } - } - - @Override - public void writeEmptyElement(String localName) throws XMLStreamException { - if (name == null) { - name = new QName(localName); - } - delegate.writeEmptyElement(localName); - addPayload(); - } - - @Override - public void writeEmptyElement(String namespaceURI, String localName) throws XMLStreamException { - if (name == null) { - name = new QName(namespaceURI, localName); - } - delegate.writeEmptyElement(namespaceURI, localName); - addPayload(); - } - - @Override - public void writeEmptyElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { - if (name == null) { - name = new QName(namespaceURI, localName, prefix); - } - delegate.writeEmptyElement(prefix, localName, namespaceURI); - addPayload(); - } - - @Override - public void writeEndDocument() throws XMLStreamException { - elementDepth = 0; - delegate.writeEndDocument(); - addPayload(); - } - - // Delegation - - @Override - public void close() throws XMLStreamException { - addPayload(); - delegate.close(); - } - - @Override - public void flush() throws XMLStreamException { - delegate.flush(); - } - - @Override - public NamespaceContext getNamespaceContext() { - return delegate.getNamespaceContext(); - } - - @Override - public String getPrefix(String uri) throws XMLStreamException { - return delegate.getPrefix(uri); - } - - @Override - public Object getProperty(String name) throws IllegalArgumentException { - return delegate.getProperty(name); - } - - @Override - public void setDefaultNamespace(String uri) throws XMLStreamException { - delegate.setDefaultNamespace(uri); - } - - @Override - public void setNamespaceContext(NamespaceContext context) throws XMLStreamException { - delegate.setNamespaceContext(context); - } - - @Override - public void setPrefix(String prefix, String uri) throws XMLStreamException { - delegate.setPrefix(prefix, uri); - } - - @Override - public void writeAttribute(String localName, String value) throws XMLStreamException { - delegate.writeAttribute(localName, value); - } - - @Override - public void writeAttribute(String namespaceURI, String localName, String value) throws XMLStreamException { - delegate.writeAttribute(namespaceURI, localName, value); - } - - @Override - public void writeAttribute(String prefix, String namespaceURI, String localName, String value) - throws XMLStreamException { - delegate.writeAttribute(prefix, namespaceURI, localName, value); - } - - @Override - public void writeCData(String data) throws XMLStreamException { - delegate.writeCData(data); - } - - @Override - public void writeCharacters(char[] text, int start, int len) throws XMLStreamException { - delegate.writeCharacters(text, start, len); - } - - @Override - public void writeCharacters(String text) throws XMLStreamException { - delegate.writeCharacters(text); - } - - @Override - public void writeComment(String data) throws XMLStreamException { - delegate.writeComment(data); - } - - @Override - public void writeDefaultNamespace(String namespaceURI) throws XMLStreamException { - delegate.writeDefaultNamespace(namespaceURI); - } - - @Override - public void writeDTD(String dtd) throws XMLStreamException { - delegate.writeDTD(dtd); - } - - @Override - public void writeEntityRef(String name) throws XMLStreamException { - delegate.writeEntityRef(name); - } - - @Override - public void writeNamespace(String prefix, String namespaceURI) throws XMLStreamException { - delegate.writeNamespace(prefix, namespaceURI); - } - - @Override - public void writeProcessingInstruction(String target) throws XMLStreamException { - delegate.writeProcessingInstruction(target); - } - - @Override - public void writeProcessingInstruction(String target, String data) throws XMLStreamException { - delegate.writeProcessingInstruction(target, data); - } - - } -} diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/Payload.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/Payload.java deleted file mode 100644 index 3706aff7..00000000 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/Payload.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom; - -import javax.xml.transform.Result; -import javax.xml.transform.Source; - -/** - * Defines the contract for payloads in Axiom. - * - * @author Arjen Poutsma - * @since 1.5.2 - */ -abstract class Payload { - - /** - * Returns the source of the payload. - * - * @return the source of the payload - */ - public abstract Source getSource(); - - /** - * Returns the result of the payload. - * - * @return the result of the payload - */ - public abstract Result getResult(); -} diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/StreamingOMDataSource.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/StreamingOMDataSource.java deleted file mode 100644 index cda70ffa..00000000 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/StreamingOMDataSource.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.axiom; - -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamWriter; - -import org.apache.axiom.om.OMDataSource; -import org.apache.axiom.om.ds.AbstractPushOMDataSource; -import org.springframework.util.Assert; -import org.springframework.ws.stream.StreamingPayload; - -/** - * Implementation of {@link OMDataSource} that wraps a {@link StreamingPayload}. - * - * @author Arjen Poutsma - * @since 2.0 - */ -class StreamingOMDataSource extends AbstractPushOMDataSource { - - private final StreamingPayload payload; - - StreamingOMDataSource(StreamingPayload payload) { - Assert.notNull(payload, "'payload' must not be null"); - this.payload = payload; - } - - @Override - public boolean isDestructiveWrite() { - return false; - } - - @Override - public void serialize(XMLStreamWriter xmlWriter) throws XMLStreamException { - payload.writeTo(xmlWriter); - } - -} diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/package.html b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/package.html deleted file mode 100644 index d3660a66..00000000 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -AXis Object Model (AXIOM) support for Spring-WS' soap message infrastructure. - - diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/support/AxiomUtils.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/support/AxiomUtils.java deleted file mode 100644 index 33a99e2f..00000000 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/support/AxiomUtils.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.axiom.support; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.util.Iterator; -import java.util.Locale; - -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.dom.DOMSource; - -import org.apache.axiom.om.OMContainer; -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.OMException; -import org.apache.axiom.om.OMNamespace; -import org.apache.axiom.om.OMXMLBuilderFactory; -import org.apache.axiom.soap.SOAPEnvelope; -import org.springframework.util.StringUtils; -import org.springframework.xml.DocumentBuilderFactoryUtils; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * Collection of generic utility methods to work with Axiom. Includes conversion from {@code OMNamespace}s to - * {@code QName}s. - * - * @author Arjen Poutsma - * @author Tareq Abed Rabbo - * @see org.apache.axiom.om.OMNamespace - * @see javax.xml.namespace.QName - * @since 1.0.0 - */ -@SuppressWarnings("Since15") -public abstract class AxiomUtils { - - /** - * Converts a {@code javax.xml.namespace.QName} to a {@code org.apache.axiom.om.OMNamespace}. A {@code OMElement} is - * used to resolve the namespace, or to declare a new one. - * - * @param qName the {@code QName} to convert - * @param resolveElement the element used to resolve the Q - * @return the converted SAAJ Name - * @throws OMException if conversion is unsuccessful - * @throws IllegalArgumentException if {@code qName} is not fully qualified - */ - public static OMNamespace toNamespace(QName qName, OMElement resolveElement) throws OMException { - String prefix = qName.getPrefix(); - if (StringUtils.hasLength(qName.getNamespaceURI()) && StringUtils.hasLength(prefix)) { - return resolveElement.declareNamespace(qName.getNamespaceURI(), prefix); - } else if (StringUtils.hasLength(qName.getNamespaceURI())) { - // check for existing namespace, and declare if necessary - return resolveElement.declareNamespace(qName.getNamespaceURI(), ""); - } else { - throw new IllegalArgumentException("qName [" + qName + "] does not contain a namespace"); - } - } - - /** - * Converts the given locale to a {@code xml:lang} string, as used in Axiom Faults. - * - * @param locale the locale - * @return the language string - */ - public static String toLanguage(Locale locale) { - return locale.toString().replace('_', '-'); - } - - /** - * Converts the given locale to a {@code xml:lang} string, as used in Axiom Faults. - * - * @param language the language string - * @return the locale - */ - public static Locale toLocale(String language) { - language = language.replace('-', '_'); - return StringUtils.parseLocaleString(language); - } - - /** Removes the contents (i.e. children) of the container. */ - public static void removeContents(OMContainer container) { - for (Iterator iterator = container.getChildren(); iterator.hasNext();) { - iterator.next(); - iterator.remove(); - } - } - - /** - * Converts a given AXIOM {@link org.apache.axiom.soap.SOAPEnvelope} to a {@link Document}. - * - * @param envelope the SOAP envelope to be converted - * @return the converted document - * @throws IllegalArgumentException in case of errors - */ - public static Document toDocument(SOAPEnvelope envelope) { - try { - if (envelope instanceof Element) { - return ((Element) envelope).getOwnerDocument(); - } else { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - envelope.build(); - envelope.serialize(bos); - - ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); - DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactoryUtils.newInstance(); - documentBuilderFactory.setNamespaceAware(true); - return documentBuilderFactory.newDocumentBuilder().parse(bis); - } - } catch (Exception ex) { - throw new IllegalArgumentException("Error in converting SOAP Envelope to Document", ex); - } - } - - /** - * Converts a given {@link Document} to an AXIOM {@link org.apache.axiom.soap.SOAPEnvelope}. - * - * @param document the document to be converted - * @return the converted envelope - * @throws IllegalArgumentException in case of errors - */ - public static SOAPEnvelope toEnvelope(Document document) { - return OMXMLBuilderFactory.createSOAPModelBuilder(new DOMSource(document)).getSOAPEnvelope(); - } - -} diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/support/package.html b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/support/package.html deleted file mode 100644 index cca976b3..00000000 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/support/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Support classes for working with the AXis Object Model (AXIOM). - - diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajAttachment.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajAttachment.java index 095a302d..ed5d47c2 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajAttachment.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajAttachment.java @@ -16,18 +16,18 @@ package org.springframework.ws.soap.saaj; +import jakarta.activation.DataHandler; +import jakarta.xml.soap.AttachmentPart; +import jakarta.xml.soap.SOAPException; + import java.io.IOException; import java.io.InputStream; -import javax.activation.DataHandler; -import javax.xml.soap.AttachmentPart; -import javax.xml.soap.SOAPException; - import org.springframework.util.Assert; import org.springframework.ws.mime.Attachment; /** - * SAAJ-specific implementation of the {@code Attachment} interface. Wraps a {@link javax.xml.soap.AttachmentPart}. + * SAAJ-specific implementation of the {@code Attachment} interface. Wraps a {@link jakarta.xml.soap.AttachmentPart}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Body.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Body.java index e193601c..9abc9800 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Body.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Body.java @@ -16,12 +16,13 @@ package org.springframework.ws.soap.saaj; +import jakarta.xml.soap.SOAPBody; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPFault; + import java.util.Locale; import javax.xml.namespace.QName; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFault; import org.springframework.util.Assert; import org.springframework.ws.soap.SoapVersion; @@ -29,7 +30,7 @@ import org.springframework.ws.soap.soap11.Soap11Body; import org.springframework.ws.soap.soap11.Soap11Fault; /** - * SAAJ-specific implementation of the {@code Soap11Body} interface. Wraps a {@link javax.xml.soap.SOAPBody}. + * SAAJ-specific implementation of the {@code Soap11Body} interface. Wraps a {@link jakarta.xml.soap.SOAPBody}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Fault.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Fault.java index f44aaf9b..e6f3ce3f 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Fault.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Fault.java @@ -16,15 +16,15 @@ package org.springframework.ws.soap.saaj; -import java.util.Locale; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPFault; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFault; +import java.util.Locale; import org.springframework.ws.soap.soap11.Soap11Fault; /** - * SAAJ-specific implementation of the {@code Soap11Fault} interface. Wraps a {@link javax.xml.soap.SOAPFault}. + * SAAJ-specific implementation of the {@code Soap11Fault} interface. Wraps a {@link jakarta.xml.soap.SOAPFault}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Header.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Header.java index 833aef33..bd5cb830 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Header.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap11Header.java @@ -16,21 +16,21 @@ package org.springframework.ws.soap.saaj; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPHeader; +import jakarta.xml.soap.SOAPHeaderElement; + import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPHeader; -import javax.xml.soap.SOAPHeaderElement; - import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; import org.springframework.ws.soap.SoapHeaderElement; import org.springframework.ws.soap.soap11.Soap11Header; /** - * SAAJ-specific implementation of the {@code Soap11Header} interface. Wraps a {@link javax.xml.soap.SOAPHeader}. + * SAAJ-specific implementation of the {@code Soap11Header} interface. Wraps a {@link jakarta.xml.soap.SOAPHeader}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Body.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Body.java index 07cca037..a800c1e8 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Body.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Body.java @@ -16,12 +16,13 @@ package org.springframework.ws.soap.saaj; +import jakarta.xml.soap.SOAPBody; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPFault; + import java.util.Locale; import javax.xml.namespace.QName; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFault; import org.springframework.util.Assert; import org.springframework.ws.soap.SoapVersion; @@ -29,7 +30,7 @@ import org.springframework.ws.soap.soap12.Soap12Body; import org.springframework.ws.soap.soap12.Soap12Fault; /** - * SAAJ-specific implementation of the {@code Soap12Body} interface. Wraps a {@link javax.xml.soap.SOAPBody}. + * SAAJ-specific implementation of the {@code Soap12Body} interface. Wraps a {@link jakarta.xml.soap.SOAPBody}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Fault.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Fault.java index 9f70401f..f1b6d52b 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Fault.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Fault.java @@ -16,12 +16,13 @@ package org.springframework.ws.soap.saaj; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPFault; + import java.util.Iterator; import java.util.Locale; import javax.xml.namespace.QName; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFault; import org.springframework.ws.soap.soap12.Soap12Fault; diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Header.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Header.java index 9a445fd6..eec75b9a 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Header.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoap12Header.java @@ -16,15 +16,16 @@ package org.springframework.ws.soap.saaj; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPHeader; +import jakarta.xml.soap.SOAPHeaderElement; + import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.xml.namespace.QName; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPHeader; -import javax.xml.soap.SOAPHeaderElement; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -33,7 +34,7 @@ import org.springframework.ws.soap.SoapHeaderException; import org.springframework.ws.soap.soap12.Soap12Header; /** - * SAAJ-specific implementation of the {@code Soap12Header} interface. Wraps a {@link javax.xml.soap.SOAPHeader}. + * SAAJ-specific implementation of the {@code Soap12Header} interface. Wraps a {@link jakarta.xml.soap.SOAPHeader}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapBody.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapBody.java index 6e25cdf2..05dca918 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapBody.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapBody.java @@ -16,8 +16,9 @@ package org.springframework.ws.soap.saaj; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPElement; +import jakarta.xml.soap.SOAPBody; +import jakarta.xml.soap.SOAPElement; + import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMResult; @@ -27,7 +28,7 @@ import org.springframework.ws.soap.SoapBody; import org.springframework.ws.soap.saaj.support.SaajUtils; /** - * SAAJ-specific abstract base class of the {@code SoapBody} interface. Wraps a {@link javax.xml.soap.SOAPBody}. + * SAAJ-specific abstract base class of the {@code SoapBody} interface. Wraps a {@link jakarta.xml.soap.SOAPBody}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapElement.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapElement.java index 81454cce..9dee4ed6 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapElement.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapElement.java @@ -16,11 +16,12 @@ package org.springframework.ws.soap.saaj; +import jakarta.xml.soap.SOAPElement; +import jakarta.xml.soap.SOAPException; + import java.util.Iterator; import javax.xml.namespace.QName; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPException; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; @@ -28,7 +29,7 @@ import org.springframework.util.Assert; import org.springframework.ws.soap.SoapElement; /** - * SAAJ-specific implementation of the {@code SoapElement} interface. Wraps a {@link javax.xml.soap.SOAPElement}. + * SAAJ-specific implementation of the {@code SoapElement} interface. Wraps a {@link jakarta.xml.soap.SOAPElement}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapEnvelope.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapEnvelope.java index a37f4933..f82917b2 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapEnvelope.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapEnvelope.java @@ -16,10 +16,10 @@ package org.springframework.ws.soap.saaj; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPHeader; +import jakarta.xml.soap.SOAPBody; +import jakarta.xml.soap.SOAPEnvelope; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPHeader; import org.springframework.ws.soap.SoapBody; import org.springframework.ws.soap.SoapEnvelope; @@ -27,7 +27,7 @@ import org.springframework.ws.soap.SoapHeader; import org.springframework.ws.soap.SoapVersion; /** - * SAAJ-specific implementation of the {@code SoapEnvelope} interface. Wraps a {@link javax.xml.soap.SOAPEnvelope}. + * SAAJ-specific implementation of the {@code SoapEnvelope} interface. Wraps a {@link jakarta.xml.soap.SOAPEnvelope}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFault.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFault.java index 1343ea80..115a9368 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFault.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFault.java @@ -16,16 +16,17 @@ package org.springframework.ws.soap.saaj; +import jakarta.xml.soap.Detail; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPFault; + import javax.xml.namespace.QName; -import javax.xml.soap.Detail; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFault; import org.springframework.ws.soap.SoapFault; import org.springframework.ws.soap.SoapFaultDetail; /** - * SAAJ-specific abstract base class of the {@code SoapFault} interface. Wraps a {@link javax.xml.soap.SOAPFault}. + * SAAJ-specific abstract base class of the {@code SoapFault} interface. Wraps a {@link jakarta.xml.soap.SOAPFault}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFaultDetail.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFaultDetail.java index 282b7014..1152a77b 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFaultDetail.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFaultDetail.java @@ -16,13 +16,14 @@ package org.springframework.ws.soap.saaj; +import jakarta.xml.soap.Detail; +import jakarta.xml.soap.DetailEntry; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPFaultElement; + import java.util.Iterator; import javax.xml.namespace.QName; -import javax.xml.soap.Detail; -import javax.xml.soap.DetailEntry; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFaultElement; import javax.xml.transform.Result; import javax.xml.transform.dom.DOMResult; @@ -32,7 +33,7 @@ import org.springframework.ws.soap.SoapFaultDetailElement; /** * SAAJ-specific implementation of the {@code SoapFaultDetail} interface. Wraps a - * {@link javax.xml.soap.SOAPFaultElement}. + * {@link jakarta.xml.soap.SOAPFaultElement}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFaultDetailElement.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFaultDetailElement.java index e118863e..063e8f19 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFaultDetailElement.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapFaultDetailElement.java @@ -16,8 +16,9 @@ package org.springframework.ws.soap.saaj; -import javax.xml.soap.DetailEntry; -import javax.xml.soap.SOAPException; +import jakarta.xml.soap.DetailEntry; +import jakarta.xml.soap.SOAPException; + import javax.xml.transform.Result; import javax.xml.transform.dom.DOMResult; @@ -25,7 +26,7 @@ import org.springframework.ws.soap.SoapFaultDetailElement; /** * SAAJ-specific implementation of the {@code SoapFaultDetailElement} interface. Wraps a - * {@link javax.xml.soap.DetailEntry}. + * {@link jakarta.xml.soap.DetailEntry}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeader.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeader.java index 23573fc7..13b4e4bc 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeader.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeader.java @@ -16,13 +16,14 @@ package org.springframework.ws.soap.saaj; +import jakarta.xml.soap.Node; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPHeader; +import jakarta.xml.soap.SOAPHeaderElement; + import java.util.Iterator; import javax.xml.namespace.QName; -import javax.xml.soap.Node; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPHeader; -import javax.xml.soap.SOAPHeaderElement; import javax.xml.transform.Result; import javax.xml.transform.dom.DOMResult; @@ -32,7 +33,7 @@ import org.springframework.ws.soap.SoapHeaderElement; import org.springframework.ws.soap.SoapHeaderException; /** - * SAAJ-specific implementation of the {@code SoapHeader} interface. Wraps a {@link javax.xml.soap.SOAPHeader}. + * SAAJ-specific implementation of the {@code SoapHeader} interface. Wraps a {@link jakarta.xml.soap.SOAPHeader}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeaderElement.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeaderElement.java index bc6013cc..1dd10ae4 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeaderElement.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeaderElement.java @@ -16,7 +16,8 @@ package org.springframework.ws.soap.saaj; -import javax.xml.soap.SOAPHeaderElement; +import jakarta.xml.soap.SOAPHeaderElement; + import javax.xml.transform.Result; import javax.xml.transform.dom.DOMResult; @@ -25,7 +26,7 @@ import org.springframework.ws.soap.SoapHeaderException; /** * SAAJ-specific implementation of the {@code SoapHeaderElement} interface. Wraps a - * {@link javax.xml.soap.SOAPHeaderElement}. + * {@link jakarta.xml.soap.SOAPHeaderElement}. * * @author Arjen Poutsma * @since 1.0.0 diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessage.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessage.java index be9086d5..a1f12f45 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessage.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessage.java @@ -16,24 +16,15 @@ package org.springframework.ws.soap.saaj; +import jakarta.activation.DataHandler; +import jakarta.xml.soap.*; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; -import javax.activation.DataHandler; -import javax.xml.soap.AttachmentPart; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeader; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; -import javax.xml.soap.SOAPPart; - import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; import org.springframework.ws.mime.Attachment; diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessageFactory.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessageFactory.java index bfa4368b..9f7ba104 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessageFactory.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapMessageFactory.java @@ -16,6 +16,12 @@ package org.springframework.ws.soap.saaj; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPMessage; + import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; @@ -24,12 +30,6 @@ import java.util.Iterator; import java.util.Map; import java.util.StringTokenizer; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean; @@ -49,8 +49,8 @@ import org.xml.sax.SAXParseException; * SAAJ-specific implementation of the {@link org.springframework.ws.WebServiceMessageFactory WebServiceMessageFactory}. * Wraps a SAAJ {@link MessageFactory}. This factory will use SAAJ 1.3 when found, or fall back to SAAJ 1.2 or even 1.1. *

- * A SAAJ {@link MessageFactory} can be injected to the {@link #SaajSoapMessageFactory(javax.xml.soap.MessageFactory) - * constructor}, or by the {@link #setMessageFactory(javax.xml.soap.MessageFactory)} property. When a SAAJ message + * A SAAJ {@link MessageFactory} can be injected to the {@link #SaajSoapMessageFactory(jakarta.xml.soap.MessageFactory) + * constructor}, or by the {@link #setMessageFactory(jakarta.xml.soap.MessageFactory)} property. When a SAAJ message * factory is injected, the {@link #setSoapVersion(org.springframework.ws.soap.SoapVersion)} property is ignored. * * @author Arjen Poutsma @@ -90,8 +90,8 @@ public class SaajSoapMessageFactory implements SoapMessageFactory, InitializingB /** * Sets the SAAJ message properties. These properties will be set on created messages. - * - * @see javax.xml.soap.SOAPMessage#setProperty(String, Object) + * + * @see jakarta.xml.soap.SOAPMessage#setProperty(String, Object) */ public void setMessageProperties(Map messageProperties) { this.messageProperties = messageProperties; @@ -269,7 +269,7 @@ public class SaajSoapMessageFactory implements SoapMessageFactory, InitializingB * Template method that allows for post-processing of the given {@link SOAPMessage}. *

* Default implementation sets {@linkplain SOAPMessage#setProperty(String, Object) message properties}, if any. - * + * * @param soapMessage the message to post process * @see #setMessageProperties(java.util.Map) */ diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajContentHandler.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajContentHandler.java index 66febf5b..f4a5b8f5 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajContentHandler.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajContentHandler.java @@ -16,14 +16,14 @@ package org.springframework.ws.soap.saaj.support; +import jakarta.xml.soap.Name; +import jakarta.xml.soap.SOAPElement; +import jakarta.xml.soap.SOAPEnvelope; +import jakarta.xml.soap.SOAPException; + import java.util.LinkedHashMap; import java.util.Map; -import javax.xml.soap.Name; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPException; - import org.springframework.util.Assert; import org.springframework.util.StringUtils; import org.xml.sax.Attributes; @@ -36,8 +36,8 @@ import org.xml.sax.SAXException; * {@code SOAPElement}s. * * @author Arjen Poutsma - * @see javax.xml.soap.Node - * @see javax.xml.soap.SOAPElement + * @see jakarta.xml.soap.Node + * @see jakarta.xml.soap.SOAPElement * @since 1.0.0 */ public class SaajContentHandler implements ContentHandler { diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajUtils.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajUtils.java index e8f06b1e..641adf81 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajUtils.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajUtils.java @@ -16,19 +16,20 @@ package org.springframework.ws.soap.saaj.support; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.Name; +import jakarta.xml.soap.SOAPBody; +import jakarta.xml.soap.SOAPElement; +import jakarta.xml.soap.SOAPEnvelope; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPMessage; + import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import javax.xml.namespace.QName; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.Name; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; import org.springframework.core.io.Resource; import org.springframework.util.Assert; @@ -78,7 +79,7 @@ public abstract class SaajUtils { } /** - * Gets the SAAJ version for the specified {@link javax.xml.soap.SOAPElement}. Returns {@link #SAAJ_13} as of + * Gets the SAAJ version for the specified {@link jakarta.xml.soap.SOAPElement}. Returns {@link #SAAJ_13} as of * Spring-WS 2.2. * * @return a code comparable to the SAAJ_XX codes in this class @@ -147,7 +148,7 @@ public abstract class SaajUtils { } /** - * Converts a {@code javax.xml.soap.Name} to a {@code javax.xml.namespace.QName}. + * Converts a {@code jakarta.xml.soap.Name} to a {@code javax.xml.namespace.QName}. * * @param name the {@code Name} to convert * @return the converted {@code QName} diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajXmlReader.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajXmlReader.java index 3d3ca2ff..8fecbd7b 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajXmlReader.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/saaj/support/SaajXmlReader.java @@ -16,12 +16,12 @@ package org.springframework.ws.soap.saaj.support; -import java.util.Iterator; +import jakarta.xml.soap.Name; +import jakarta.xml.soap.Node; +import jakarta.xml.soap.SOAPElement; +import jakarta.xml.soap.Text; -import javax.xml.soap.Name; -import javax.xml.soap.Node; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.Text; +import java.util.Iterator; import org.springframework.util.StringUtils; import org.springframework.xml.sax.AbstractXmlReader; @@ -37,8 +37,8 @@ import org.xml.sax.helpers.AttributesImpl; * and calls the corresponding methods on the SAX callback interfaces. * * @author Arjen Poutsma - * @see javax.xml.soap.Node - * @see javax.xml.soap.SOAPElement + * @see jakarta.xml.soap.Node + * @see jakarta.xml.soap.SOAPElement * @since 1.0.0 */ public class SaajXmlReader extends AbstractXmlReader { diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/server/endpoint/mapping/SoapActionEndpointMapping.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/server/endpoint/mapping/SoapActionEndpointMapping.java index 1eb5833b..eb820f30 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/server/endpoint/mapping/SoapActionEndpointMapping.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/server/endpoint/mapping/SoapActionEndpointMapping.java @@ -23,7 +23,6 @@ import org.springframework.ws.server.EndpointInterceptor; import org.springframework.ws.server.EndpointInvocationChain; import org.springframework.ws.server.endpoint.mapping.AbstractMapBasedEndpointMapping; import org.springframework.ws.soap.SoapMessage; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; import org.springframework.ws.soap.server.SoapEndpointInvocationChain; import org.springframework.ws.soap.server.SoapEndpointMapping; @@ -36,16 +35,16 @@ import org.springframework.ws.soap.server.SoapEndpointMapping; *

* Mappings to bean names can be set via the {@code mappings} property, in a form accepted by the * {@code java.util.Properties} class, like as follows: - * + * *

  * http://www.springframework.org/spring-ws/samples/airline/BookFlight=bookFlightEndpoint
  * http://www.springframework.org/spring-ws/samples/airline/GetFlights=getFlightsEndpoint
  * 
- * + * * The syntax is SOAP_ACTION=ENDPOINT_BEAN_NAME. *

* This endpoint mapping does not read from the request message, and therefore is more suitable for message factories - * which directly read from the transport request (such as the {@link AxiomSoapMessageFactory} with the + * which directly read from the transport request (such as the {@link org.springframework.ws.soap.saaj.SaajSoapMessageFactory} with the * {@code payloadCaching} disabled). * * @author Arjen Poutsma diff --git a/spring-ws-core/src/main/java/org/springframework/ws/support/DefaultStrategiesHelper.java b/spring-ws-core/src/main/java/org/springframework/ws/support/DefaultStrategiesHelper.java index 10961aad..254bf959 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/support/DefaultStrategiesHelper.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/support/DefaultStrategiesHelper.java @@ -16,14 +16,14 @@ package org.springframework.ws.support; +import jakarta.servlet.ServletContext; + import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Properties; -import javax.servlet.ServletContext; - import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanClassLoaderAware; diff --git a/spring-ws-core/src/main/java/org/springframework/ws/support/MarshallingUtils.java b/spring-ws-core/src/main/java/org/springframework/ws/support/MarshallingUtils.java index 57247f56..7ad667fd 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/support/MarshallingUtils.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/support/MarshallingUtils.java @@ -16,9 +16,10 @@ package org.springframework.ws.support; +import jakarta.activation.DataHandler; + import java.io.IOException; -import javax.activation.DataHandler; import javax.xml.transform.Source; import org.springframework.oxm.Marshaller; diff --git a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpServletConnection.java b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpServletConnection.java index af8ba650..4648ae2b 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpServletConnection.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpServletConnection.java @@ -16,6 +16,10 @@ package org.springframework.ws.transport.http; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.xml.soap.SOAPConstants; + import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -23,10 +27,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Iterator; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.xml.namespace.QName; -import javax.xml.soap.SOAPConstants; import org.springframework.ws.WebServiceMessage; import org.springframework.ws.transport.AbstractReceiverConnection; diff --git a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/LocationTransformerObjectSupport.java b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/LocationTransformerObjectSupport.java index 161969a8..86f2c465 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/LocationTransformerObjectSupport.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/LocationTransformerObjectSupport.java @@ -16,9 +16,9 @@ package org.springframework.ws.transport.http; -import java.util.List; +import jakarta.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequest; +import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -44,7 +44,7 @@ public abstract class LocationTransformerObjectSupport extends TransformerObject /** * Transforms the locations of the given definition document using the given XPath expression. - * + * * @param xPathExpression the XPath expression * @param definitionDocument the definition document * @param request the request, used to determine the location to transform to diff --git a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/MessageDispatcherServlet.java b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/MessageDispatcherServlet.java index 0b2138a6..36798037 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/MessageDispatcherServlet.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/MessageDispatcherServlet.java @@ -18,8 +18,8 @@ package org.springframework.ws.transport.http; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.BeanInitializationException; @@ -272,7 +272,7 @@ public class MessageDispatcherServlet extends FrameworkServlet { this.xsdSchemaHandlerAdapterBeanName = xsdSchemaHandlerAdapterBeanName; } - @Override + @Override protected void doService(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { WsdlDefinition definition = getWsdlDefinition(httpServletRequest); diff --git a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java index 5f155fb7..efd74068 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java @@ -16,8 +16,8 @@ package org.springframework.ws.transport.http; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerAdapter; import org.springframework.web.servlet.ModelAndView; diff --git a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapter.java b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapter.java index a3e9afff..3df5e36e 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapter.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapter.java @@ -16,11 +16,12 @@ package org.springframework.ws.transport.http; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.dom.DOMResult; @@ -64,7 +65,7 @@ import org.w3c.dom.Document; * @see WsdlDefinition * @see #setTransformLocations(boolean) * @see #setLocationExpression(String) - * @see #transformLocation(String,javax.servlet.http.HttpServletRequest) + * @see #transformLocation(String,jakarta.servlet.http.HttpServletRequest) * @since 1.0.0 */ public class WsdlDefinitionHandlerAdapter extends LocationTransformerObjectSupport @@ -184,7 +185,7 @@ public class WsdlDefinitionHandlerAdapter extends LocationTransformerObjectSuppo * * @see #setLocationExpression(String) * @see #setTransformLocations(boolean) - * @see #transformLocation(String,javax.servlet.http.HttpServletRequest) + * @see #transformLocation(String,jakarta.servlet.http.HttpServletRequest) */ protected void transformLocations(Document definitionDocument, HttpServletRequest request) throws Exception { transformLocations(locationXPathExpression, definitionDocument, request); @@ -199,7 +200,7 @@ public class WsdlDefinitionHandlerAdapter extends LocationTransformerObjectSuppo * * @see #setSchemaLocationExpression(String) * @see #setTransformSchemaLocations(boolean) - * @see #transformLocation(String,javax.servlet.http.HttpServletRequest) + * @see #transformLocation(String,jakarta.servlet.http.HttpServletRequest) */ protected void transformSchemaLocations(Document definitionDocument, HttpServletRequest request) throws Exception { transformLocations(schemaLocationXPathExpression, definitionDocument, request); diff --git a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/XsdSchemaHandlerAdapter.java b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/XsdSchemaHandlerAdapter.java index 83ae699e..8736082a 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/XsdSchemaHandlerAdapter.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/XsdSchemaHandlerAdapter.java @@ -16,11 +16,12 @@ package org.springframework.ws.transport.http; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.dom.DOMResult; @@ -144,7 +145,7 @@ public class XsdSchemaHandlerAdapter extends LocationTransformerObjectSupport * This method is only called when the {@code transformSchemaLocations} property is true. * * @see #setSchemaLocationExpression(String) - * @see #transformLocation(String, javax.servlet.http.HttpServletRequest) + * @see #transformLocation(String, jakarta.servlet.http.HttpServletRequest) */ protected void transformSchemaLocations(Document definitionDocument, HttpServletRequest request) throws Exception { transformLocations(schemaLocationXPathExpression, definitionDocument, request); diff --git a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/support/AbstractMessageDispatcherServletInitializer.java b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/support/AbstractMessageDispatcherServletInitializer.java index 19141c0c..3ea6c89f 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/support/AbstractMessageDispatcherServletInitializer.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/support/AbstractMessageDispatcherServletInitializer.java @@ -16,9 +16,9 @@ package org.springframework.ws.transport.http.support; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRegistration; import org.springframework.util.Assert; import org.springframework.web.context.AbstractContextLoaderInitializer; @@ -68,7 +68,7 @@ public abstract class AbstractMessageDispatcherServletInitializer extends Abstra * it to the patterns returned from {@link #getServletMappings()}. *

* Further customization can be achieved by overriding {@link #customizeRegistration(ServletRegistration.Dynamic)}. - * + * * @param servletContext the context to register the servlet against */ protected void registerMessageDispatcherServlet(ServletContext servletContext) { @@ -97,7 +97,7 @@ public abstract class AbstractMessageDispatcherServletInitializer extends Abstra /** * Return the name under which the {@link MessageDispatcherServlet} will be registered. Defaults to * {@link #DEFAULT_SERVLET_NAME}. - * + * * @see #registerMessageDispatcherServlet(ServletContext) */ protected String getServletName() { @@ -110,7 +110,7 @@ public abstract class AbstractMessageDispatcherServletInitializer extends Abstra * The returned context is delegated to Spring's * {@link MessageDispatcherServlet#MessageDispatcherServlet(WebApplicationContext)}. As such, it typically contains * endpoints, interceptors and other web service-related beans. - * + * * @see #registerMessageDispatcherServlet(ServletContext) */ protected abstract WebApplicationContext createServletApplicationContext(); @@ -118,7 +118,7 @@ public abstract class AbstractMessageDispatcherServletInitializer extends Abstra /** * Specify the servlet mapping(s) for the {@code MessageDispatcherServlet}. Defaults to * {@link #DEFAULT_SERVLET_MAPPINGS}. - * + * * @see #registerMessageDispatcherServlet(ServletContext) */ protected String[] getServletMappings() { @@ -144,7 +144,7 @@ public abstract class AbstractMessageDispatcherServletInitializer extends Abstra /** * Optionally perform further registration customization once * {@link #registerMessageDispatcherServlet(ServletContext)} has completed. - * + * * @param registration the {@code MessageDispatcherServlet} registration to be customized * @see #registerMessageDispatcherServlet(ServletContext) */ diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AbstractSoap11WebServiceTemplateIntegrationTestCase.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/AbstractSoap11WebServiceTemplateIntegrationTestCase.java index 241b74c4..8c280a5b 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AbstractSoap11WebServiceTemplateIntegrationTestCase.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/client/core/AbstractSoap11WebServiceTemplateIntegrationTestCase.java @@ -18,38 +18,43 @@ package org.springframework.ws.client.core; import static org.assertj.core.api.Assertions.*; +import jakarta.activation.DataHandler; +import jakarta.mail.util.ByteArrayDataSource; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeader; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.SOAPBody; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPMessage; + import java.io.IOException; import java.util.Enumeration; import java.util.Iterator; import java.util.StringTokenizer; -import javax.activation.DataHandler; -import javax.mail.util.ByteArrayDataSource; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.xml.namespace.QName; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeader; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mortbay.jetty.Server; -import org.mortbay.jetty.servlet.Context; -import org.mortbay.jetty.servlet.ServletHolder; import org.springframework.oxm.Marshaller; import org.springframework.oxm.Unmarshaller; import org.springframework.oxm.XmlMappingException; @@ -75,6 +80,8 @@ public abstract class AbstractSoap11WebServiceTemplateIntegrationTestCase { private String messagePayload = ""; + private Logger logger = LogManager.getLogger(); + @BeforeAll public static void startJetty() throws Exception { @@ -82,20 +89,28 @@ public abstract class AbstractSoap11WebServiceTemplateIntegrationTestCase { baseUrl = "http://localhost:" + port; jettyServer = new Server(port); + Connector connector = new ServerConnector(jettyServer); + jettyServer.addConnector(connector); - Context jettyContext = new Context(jettyServer, "/"); - jettyContext.addServlet(new ServletHolder(new EchoSoapServlet()), "/soap/echo"); - jettyContext.addServlet(new ServletHolder(new SoapFaultServlet()), "/soap/fault"); + ServletContextHandler jettyContext = new ServletContextHandler(); + jettyContext.setContextPath("/"); - SoapFaultServlet badRequestFault = new SoapFaultServlet(); - badRequestFault.setSc(400); + jettyContext.addServlet(EchoSoapServlet.class, "/soap/echo"); + jettyContext.addServlet(SoapFaultServlet.class, "/soap/fault"); - jettyContext.addServlet(new ServletHolder(badRequestFault), "/soap/badRequestFault"); - jettyContext.addServlet(new ServletHolder(new NoResponseSoapServlet()), "/soap/noResponse"); - jettyContext.addServlet(new ServletHolder(new AttachmentsServlet()), "/soap/attachment"); - jettyContext.addServlet(new ServletHolder(new ErrorServlet(404)), "/errors/notfound"); - jettyContext.addServlet(new ServletHolder(new ErrorServlet(500)), "/errors/server"); + ServletHolder badRequestFault = jettyContext.addServlet(SoapFaultServlet.class, "/soap/badRequestFault"); + badRequestFault.setInitParameter("sc", "400"); + jettyContext.addServlet(NoResponseSoapServlet.class, "/soap/noResponse"); + jettyContext.addServlet(AttachmentsServlet.class, "/soap/attachment"); + + ServletHolder notfound = jettyContext.addServlet(ErrorServlet.class, "/errors/notfound"); + notfound.setInitParameter("sc", "404"); + + ServletHolder errors = jettyContext.addServlet(ErrorServlet.class, "/errors/server"); + errors.setInitParameter("sc", "500"); + + jettyServer.setHandler(jettyContext); jettyServer.start(); } @@ -119,6 +134,8 @@ public abstract class AbstractSoap11WebServiceTemplateIntegrationTestCase { @Test public void sendSourceAndReceiveToResult() { + logger.info(">>> Test case"); + StringResult result = new StringResult(); boolean b = template.sendSourceAndReceiveToResult(baseUrl + "/soap/echo", new StringSource(messagePayload), result); @@ -364,7 +381,7 @@ public abstract class AbstractSoap11WebServiceTemplateIntegrationTestCase { } @SuppressWarnings("serial") - private static class EchoSoapServlet extends AbstractSoapServlet { + public static class EchoSoapServlet extends AbstractSoapServlet { @Override protected SOAPMessage onMessage(SOAPMessage message) { @@ -373,7 +390,7 @@ public abstract class AbstractSoap11WebServiceTemplateIntegrationTestCase { } @SuppressWarnings("serial") - private static class NoResponseSoapServlet extends AbstractSoapServlet { + public static class NoResponseSoapServlet extends AbstractSoapServlet { @Override protected SOAPMessage onMessage(SOAPMessage message) { @@ -382,7 +399,7 @@ public abstract class AbstractSoap11WebServiceTemplateIntegrationTestCase { } @SuppressWarnings("serial") - private static class SoapFaultServlet extends AbstractSoapServlet { + public static class SoapFaultServlet extends AbstractSoapServlet { @Override protected SOAPMessage onMessage(SOAPMessage message) throws SOAPException { @@ -395,7 +412,7 @@ public abstract class AbstractSoap11WebServiceTemplateIntegrationTestCase { } @SuppressWarnings("serial") - private static class AttachmentsServlet extends AbstractSoapServlet { + public static class AttachmentsServlet extends AbstractSoapServlet { @Override protected SOAPMessage onMessage(SOAPMessage message) { diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AbstractSoap12WebServiceTemplateIntegrationTestCase.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/AbstractSoap12WebServiceTemplateIntegrationTestCase.java index bfb32f4c..fb8ebf73 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AbstractSoap12WebServiceTemplateIntegrationTestCase.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/client/core/AbstractSoap12WebServiceTemplateIntegrationTestCase.java @@ -18,40 +18,43 @@ package org.springframework.ws.client.core; import static org.assertj.core.api.Assertions.*; +import jakarta.activation.CommandMap; +import jakarta.activation.DataHandler; +import jakarta.activation.MailcapCommandMap; +import jakarta.mail.util.ByteArrayDataSource; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeader; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.SOAPBody; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPMessage; + import java.io.IOException; import java.util.Enumeration; import java.util.Iterator; import java.util.StringTokenizer; -import javax.activation.CommandMap; -import javax.activation.DataHandler; -import javax.activation.MailcapCommandMap; -import javax.mail.util.ByteArrayDataSource; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeader; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mortbay.jetty.Server; -import org.mortbay.jetty.servlet.Context; -import org.mortbay.jetty.servlet.ServletHolder; import org.springframework.oxm.Marshaller; import org.springframework.oxm.Unmarshaller; import org.springframework.oxm.XmlMappingException; @@ -81,15 +84,27 @@ public abstract class AbstractSoap12WebServiceTemplateIntegrationTestCase { int port = FreePortScanner.getFreePort(); baseUrl = "http://localhost:" + port; + jettyServer = new Server(port); - Context jettyContext = new Context(jettyServer, "/"); - jettyContext.addServlet(new ServletHolder(new EchoSoapServlet()), "/soap/echo"); - jettyContext.addServlet(new ServletHolder(new SoapReceiverFaultServlet()), "/soap/receiverFault"); - jettyContext.addServlet(new ServletHolder(new SoapSenderFaultServlet()), "/soap/senderFault"); - jettyContext.addServlet(new ServletHolder(new NoResponseSoapServlet()), "/soap/noResponse"); - jettyContext.addServlet(new ServletHolder(new AttachmentsServlet()), "/soap/attachment"); - jettyContext.addServlet(new ServletHolder(new ErrorServlet(404)), "/errors/notfound"); - jettyContext.addServlet(new ServletHolder(new ErrorServlet(500)), "/errors/server"); + Connector connector = new ServerConnector(jettyServer); + jettyServer.addConnector(connector); + + ServletContextHandler jettyContext = new ServletContextHandler(); + jettyContext.setContextPath("/"); + + jettyContext.addServlet(EchoSoapServlet.class, "/soap/echo"); + jettyContext.addServlet(SoapReceiverFaultServlet.class, "/soap/receiverFault"); + jettyContext.addServlet(SoapSenderFaultServlet.class, "/soap/senderFault"); + jettyContext.addServlet(NoResponseSoapServlet.class, "/soap/noResponse"); + jettyContext.addServlet(AttachmentsServlet.class, "/soap/attachment"); + + ServletHolder notfound = jettyContext.addServlet(ErrorServlet.class, "/errors/notfound"); + notfound.setInitParameter("sc", "404"); + + ServletHolder errors = jettyContext.addServlet(ErrorServlet.class, "/errors/server"); + errors.setInitParameter("sc", "500"); + + jettyServer.setHandler(jettyContext); jettyServer.start(); } @@ -265,7 +280,7 @@ public abstract class AbstractSoap12WebServiceTemplateIntegrationTestCase { /** Servlet that returns and error message for a given status code. */ @SuppressWarnings("serial") - private static class ErrorServlet extends HttpServlet { + public static class ErrorServlet extends HttpServlet { private int sc; @@ -281,7 +296,7 @@ public abstract class AbstractSoap12WebServiceTemplateIntegrationTestCase { /** Abstract SOAP Servlet */ @SuppressWarnings("serial") - private abstract static class AbstractSoapServlet extends HttpServlet { + public abstract static class AbstractSoapServlet extends HttpServlet { protected MessageFactory messageFactory = null; @@ -362,7 +377,7 @@ public abstract class AbstractSoap12WebServiceTemplateIntegrationTestCase { } @SuppressWarnings("serial") - private static class EchoSoapServlet extends AbstractSoapServlet { + public static class EchoSoapServlet extends AbstractSoapServlet { @Override protected SOAPMessage onMessage(SOAPMessage message) { @@ -371,7 +386,7 @@ public abstract class AbstractSoap12WebServiceTemplateIntegrationTestCase { } @SuppressWarnings("serial") - private static class NoResponseSoapServlet extends AbstractSoapServlet { + public static class NoResponseSoapServlet extends AbstractSoapServlet { @Override protected SOAPMessage onMessage(SOAPMessage message) { @@ -380,7 +395,7 @@ public abstract class AbstractSoap12WebServiceTemplateIntegrationTestCase { } @SuppressWarnings("serial") - private static class SoapReceiverFaultServlet extends AbstractSoapServlet { + public static class SoapReceiverFaultServlet extends AbstractSoapServlet { @Override protected SOAPMessage onMessage(SOAPMessage message) throws SOAPException { @@ -393,7 +408,7 @@ public abstract class AbstractSoap12WebServiceTemplateIntegrationTestCase { } @SuppressWarnings("serial") - private static class SoapSenderFaultServlet extends AbstractSoapServlet { + public static class SoapSenderFaultServlet extends AbstractSoapServlet { @Override protected SOAPMessage onMessage(SOAPMessage message) throws SOAPException { @@ -406,7 +421,7 @@ public abstract class AbstractSoap12WebServiceTemplateIntegrationTestCase { } @SuppressWarnings("serial") - private static class AttachmentsServlet extends AbstractSoapServlet { + public static class AttachmentsServlet extends AbstractSoapServlet { @Override protected SOAPMessage onMessage(SOAPMessage message) { diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomNonStreamingSoap11WebServiceTemplateIntegrationTest.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomNonStreamingSoap11WebServiceTemplateIntegrationTest.java deleted file mode 100644 index 08071109..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomNonStreamingSoap11WebServiceTemplateIntegrationTest.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2005-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.ws.client.core; - -import org.springframework.ws.soap.SoapMessageFactory; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; - -/** - * @author Arjen Poutsma - */ -public class AxiomNonStreamingSoap11WebServiceTemplateIntegrationTest - extends AbstractSoap11WebServiceTemplateIntegrationTestCase { - - @Override - public SoapMessageFactory createMessageFactory() throws Exception { - return new AxiomSoapMessageFactory(); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomNonStreamingSoap12WebServiceTemplateIntegrationTest.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomNonStreamingSoap12WebServiceTemplateIntegrationTest.java deleted file mode 100644 index 8c70f726..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomNonStreamingSoap12WebServiceTemplateIntegrationTest.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2005-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.ws.client.core; - -import org.springframework.ws.soap.SoapMessageFactory; -import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; - -/** - * @author Arjen Poutsma - */ -public class AxiomNonStreamingSoap12WebServiceTemplateIntegrationTest - extends AbstractSoap12WebServiceTemplateIntegrationTestCase { - - @Override - public SoapMessageFactory createMessageFactory() { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setSoapVersion(SoapVersion.SOAP_12); - return messageFactory; - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomStreamingSoap11WebServiceTemplateIntegrationTest.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomStreamingSoap11WebServiceTemplateIntegrationTest.java deleted file mode 100644 index 32bd759d..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomStreamingSoap11WebServiceTemplateIntegrationTest.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2005-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.ws.client.core; - -import org.springframework.ws.soap.SoapMessageFactory; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; - -/** - * @author Arjen Poutsma - */ -public class AxiomStreamingSoap11WebServiceTemplateIntegrationTest - extends AbstractSoap11WebServiceTemplateIntegrationTestCase { - - @Override - public SoapMessageFactory createMessageFactory() throws Exception { - AxiomSoapMessageFactory axiomFactory = new AxiomSoapMessageFactory(); - axiomFactory.setPayloadCaching(false); - return axiomFactory; - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomStreamingSoap12WebServiceTemplateIntegrationTest.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomStreamingSoap12WebServiceTemplateIntegrationTest.java deleted file mode 100644 index 68f7b848..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/AxiomStreamingSoap12WebServiceTemplateIntegrationTest.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2005-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.ws.client.core; - -import org.springframework.ws.soap.SoapMessageFactory; -import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; - -/** - * @author Arjen Poutsma - */ -public class AxiomStreamingSoap12WebServiceTemplateIntegrationTest - extends AbstractSoap12WebServiceTemplateIntegrationTestCase { - - @Override - public SoapMessageFactory createMessageFactory() throws Exception { - AxiomSoapMessageFactory axiomFactory = new AxiomSoapMessageFactory(); - axiomFactory.setSoapVersion(SoapVersion.SOAP_12); - axiomFactory.setPayloadCaching(false); - return axiomFactory; - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/DomPoxWebServiceTemplateIntegrationTest.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/DomPoxWebServiceTemplateIntegrationTest.java index 0e921ac8..7a39d4b8 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/DomPoxWebServiceTemplateIntegrationTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/client/core/DomPoxWebServiceTemplateIntegrationTest.java @@ -18,13 +18,14 @@ package org.springframework.ws.client.core; import static org.assertj.core.api.Assertions.*; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + import java.io.IOException; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; @@ -32,12 +33,14 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.mortbay.jetty.Server; -import org.mortbay.jetty.servlet.Context; -import org.mortbay.jetty.servlet.ServletHolder; import org.springframework.ws.client.WebServiceTransportException; import org.springframework.ws.pox.dom.DomPoxMessageFactory; import org.springframework.ws.transport.http.HttpComponentsMessageSender; @@ -60,11 +63,23 @@ public class DomPoxWebServiceTemplateIntegrationTest { int port = FreePortScanner.getFreePort(); baseUrl = "http://localhost:" + port; + jettyServer = new Server(port); - Context jettyContext = new Context(jettyServer, "/"); - jettyContext.addServlet(new ServletHolder(new PoxServlet()), "/pox"); - jettyContext.addServlet(new ServletHolder(new ErrorServlet(404)), "/errors/notfound"); - jettyContext.addServlet(new ServletHolder(new ErrorServlet(500)), "/errors/server"); + Connector connector = new ServerConnector(jettyServer); + jettyServer.addConnector(connector); + + ServletContextHandler jettyContext = new ServletContextHandler(); + jettyContext.setContextPath("/"); + + jettyContext.addServlet(PoxServlet.class, "/pox"); + + ServletHolder notfound = jettyContext.addServlet(ErrorServlet.class, "/errors/notfound"); + notfound.setInitParameter("sc", "404"); + + ServletHolder errors = jettyContext.addServlet(ErrorServlet.class, "/errors/server"); + errors.setInitParameter("sc", "500"); + + jettyServer.setHandler(jettyContext); jettyServer.start(); } @@ -94,7 +109,7 @@ public class DomPoxWebServiceTemplateIntegrationTest { /** Servlet that returns and error message for a given status code. */ @SuppressWarnings("serial") - private static class ErrorServlet extends HttpServlet { + public static class ErrorServlet extends HttpServlet { private int sc; @@ -110,7 +125,7 @@ public class DomPoxWebServiceTemplateIntegrationTest { /** Simple POX Servlet. */ @SuppressWarnings("serial") - private static class PoxServlet extends HttpServlet { + public static class PoxServlet extends HttpServlet { private DocumentBuilderFactory documentBuilderFactory; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/SaajSoap11WebServiceTemplateIntegrationTest.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/SaajSoap11WebServiceTemplateIntegrationTest.java index 2fed9f8f..645f1a6d 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/SaajSoap11WebServiceTemplateIntegrationTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/client/core/SaajSoap11WebServiceTemplateIntegrationTest.java @@ -16,8 +16,8 @@ package org.springframework.ws.client.core; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; import org.springframework.ws.soap.SoapMessageFactory; import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/SaajSoap12WebServiceTemplateIntegrationTest.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/SaajSoap12WebServiceTemplateIntegrationTest.java index 1d08970f..8b99158e 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/SaajSoap12WebServiceTemplateIntegrationTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/client/core/SaajSoap12WebServiceTemplateIntegrationTest.java @@ -16,8 +16,8 @@ package org.springframework.ws.client.core; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; import org.springframework.ws.soap.SoapMessageFactory; import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/SimpleSaajServlet.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/SimpleSaajServlet.java index 4870f398..95eebe05 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/SimpleSaajServlet.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/client/core/SimpleSaajServlet.java @@ -16,21 +16,21 @@ package org.springframework.ws.client.core; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeader; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPMessage; + import java.util.Enumeration; import java.util.Iterator; import java.util.StringTokenizer; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeader; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; - import org.springframework.util.StringUtils; /** diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/WebServiceTemplateTest.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/WebServiceTemplateTest.java index 0745b9ae..89db661e 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/WebServiceTemplateTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/client/core/WebServiceTemplateTest.java @@ -17,7 +17,7 @@ package org.springframework.ws.client.core; import static org.assertj.core.api.Assertions.*; -import static org.easymock.EasyMock.*; +import static org.mockito.Mockito.*; import java.io.IOException; import java.net.URI; @@ -57,9 +57,9 @@ public class WebServiceTemplateTest { messageFactory = new MockWebServiceMessageFactory(); template = new WebServiceTemplate(messageFactory); - connectionMock = createMock(FaultAwareWebServiceConnection.class); + connectionMock = mock(FaultAwareWebServiceConnection.class); final URI expectedUri = new URI("http://www.springframework.org/spring-ws"); - expect(connectionMock.getUri()).andReturn(expectedUri).anyTimes(); + when(connectionMock.getUri()).thenReturn(expectedUri); template.setMessageSender(new WebServiceMessageSender() { @Override @@ -83,17 +83,9 @@ public class WebServiceTemplateTest { connectionMock.close(); - replay(connectionMock); - template.setMarshaller(null); - try { - template.marshalSendAndReceive(new Object()); - fail("IllegalStateException expected"); - } catch (IllegalStateException ex) { - // expected behavior - } - verify(connectionMock); + assertThatIllegalStateException().isThrownBy(() -> template.marshalSendAndReceive(new Object())); } @Test @@ -101,69 +93,52 @@ public class WebServiceTemplateTest { connectionMock.close(); - replay(connectionMock); - template.setUnmarshaller(null); - try { - template.marshalSendAndReceive(new Object()); - fail("IllegalStateException expected"); - } catch (IllegalStateException ex) { - // expected behavior - } - - verify(connectionMock); + assertThatIllegalStateException().isThrownBy(() -> template.marshalSendAndReceive(new Object())); } @Test public void testSendAndReceiveMessageResponse() throws Exception { - WebServiceMessageCallback requestCallback = createMock(WebServiceMessageCallback.class); + WebServiceMessageCallback requestCallback = mock(WebServiceMessageCallback.class); requestCallback.doWithMessage(isA(WebServiceMessage.class)); - WebServiceMessageExtractor extractorMock = createMock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); Object extracted = new Object(); - expect(extractorMock.extractData(isA(WebServiceMessage.class))).andReturn(extracted); + when(extractorMock.extractData(isA(WebServiceMessage.class))).thenReturn(extracted); connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.receive(messageFactory)).andReturn(new MockWebServiceMessage("")); - expect(connectionMock.hasFault()).andReturn(false); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.receive(messageFactory)).thenReturn(new MockWebServiceMessage("")); + when(connectionMock.hasFault()).thenReturn(false); connectionMock.close(); - replay(connectionMock, requestCallback, extractorMock); - Object result = template.sendAndReceive(requestCallback, extractorMock); assertThat(result).isEqualTo(extracted); - - verify(connectionMock, requestCallback, extractorMock); } @Test public void testSendAndReceiveMessageNoResponse() throws Exception { - WebServiceMessageExtractor extractorMock = createMock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.receive(messageFactory)).andReturn(null); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.receive(messageFactory)).thenReturn(null); connectionMock.close(); - replay(connectionMock, extractorMock); - Object result = template.sendAndReceive(null, extractorMock); assertThat(result).isNull(); - - verify(connectionMock, extractorMock); } @Test public void testSendAndReceiveMessageFault() throws Exception { - WebServiceMessageExtractor extractorMock = createMock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); - FaultMessageResolver faultMessageResolverMock = createMock(FaultMessageResolver.class); + FaultMessageResolver faultMessageResolverMock = mock(FaultMessageResolver.class); template.setFaultMessageResolver(faultMessageResolverMock); faultMessageResolverMock.resolveFault(isA(WebServiceMessage.class)); @@ -171,187 +146,151 @@ public class WebServiceTemplateTest { response.setFault(true); connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.hasFault()).andReturn(true); - expect(connectionMock.receive(messageFactory)).andReturn(response); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.hasFault()).thenReturn(true); + when(connectionMock.receive(messageFactory)).thenReturn(response); connectionMock.close(); - replay(connectionMock, extractorMock, faultMessageResolverMock); - Object result = template.sendAndReceive(null, extractorMock); assertThat(result).isNull(); - - verify(connectionMock, extractorMock, faultMessageResolverMock); } @Test public void testSendAndReceiveConnectionError() throws Exception { - WebServiceMessageExtractor extractorMock = createMock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); template.setFaultMessageResolver(null); connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(true); - expect(connectionMock.hasFault()).andReturn(false); + when(connectionMock.hasError()).thenReturn(true); + when(connectionMock.hasFault()).thenReturn(false); String errorMessage = "errorMessage"; - expect(connectionMock.getErrorMessage()).andReturn(errorMessage); + when(connectionMock.getErrorMessage()).thenReturn(errorMessage); connectionMock.close(); - replay(connectionMock, extractorMock); - assertThatExceptionOfType(WebServiceTransportException.class) .isThrownBy(() -> template.sendAndReceive(null, extractorMock)).withMessage(errorMessage); - - verify(connectionMock, extractorMock); } @Test public void testSendAndReceiveSourceResponse() throws Exception { - SourceExtractor extractorMock = createMock(SourceExtractor.class); + SourceExtractor extractorMock = mock(SourceExtractor.class); Object extracted = new Object(); - expect(extractorMock.extractData(isA(Source.class))).andReturn(extracted); + when(extractorMock.extractData(isA(Source.class))).thenReturn(extracted); connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.receive(messageFactory)).andReturn(new MockWebServiceMessage("")); - expect(connectionMock.hasFault()).andReturn(false); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.receive(messageFactory)).thenReturn(new MockWebServiceMessage("")); + when(connectionMock.hasFault()).thenReturn(false); connectionMock.close(); - replay(connectionMock, extractorMock); - Object result = template.sendSourceAndReceive(new StringSource(""), extractorMock); assertThat(result).isEqualTo(extracted); - - verify(connectionMock, extractorMock); } @Test public void testSendAndReceiveSourceNoResponse() throws Exception { - SourceExtractor extractorMock = createMock(SourceExtractor.class); + SourceExtractor extractorMock = mock(SourceExtractor.class); connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.receive(messageFactory)).andReturn(null); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.receive(messageFactory)).thenReturn(null); connectionMock.close(); - replay(connectionMock, extractorMock); - Object result = template.sendSourceAndReceive(new StringSource(""), extractorMock); assertThat(result).isNull(); - - verify(connectionMock, extractorMock); } @Test public void testSendAndReceiveResultResponse() throws Exception { connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.receive(messageFactory)).andReturn(new MockWebServiceMessage("")); - expect(connectionMock.hasFault()).andReturn(false); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.receive(messageFactory)).thenReturn(new MockWebServiceMessage("")); + when(connectionMock.hasFault()).thenReturn(false); connectionMock.close(); - replay(connectionMock); - StringResult result = new StringResult(); boolean b = template.sendSourceAndReceiveToResult(new StringSource(""), result); assertThat(b).isTrue(); - - verify(connectionMock); } @Test public void testSendAndReceiveResultNoResponse() throws Exception { connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.receive(messageFactory)).andReturn(null); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.receive(messageFactory)).thenReturn(null); connectionMock.close(); - replay(connectionMock); - StringResult result = new StringResult(); boolean b = template.sendSourceAndReceiveToResult(new StringSource(""), result); assertThat(b).isFalse(); - - verify(connectionMock); } @Test public void testSendAndReceiveResultNoResponsePayload() throws Exception { connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - WebServiceMessage response = createMock(WebServiceMessage.class); - expect(connectionMock.receive(messageFactory)).andReturn(response); - expect(connectionMock.hasFault()).andReturn(false); - expect(response.getPayloadSource()).andReturn(null); + when(connectionMock.hasError()).thenReturn(false); + WebServiceMessage response = mock(WebServiceMessage.class); + when(connectionMock.receive(messageFactory)).thenReturn(response); + when(connectionMock.hasFault()).thenReturn(false); + when(response.getPayloadSource()).thenReturn(null); connectionMock.close(); - replay(connectionMock, response); - StringResult result = new StringResult(); boolean b = template.sendSourceAndReceiveToResult(new StringSource(""), result); assertThat(b).isTrue(); - - verify(connectionMock, response); } @Test public void testSendAndReceiveMarshalResponse() throws Exception { - Marshaller marshallerMock = createMock(Marshaller.class); + Marshaller marshallerMock = mock(Marshaller.class); template.setMarshaller(marshallerMock); marshallerMock.marshal(isA(Object.class), isA(Result.class)); - Unmarshaller unmarshallerMock = createMock(Unmarshaller.class); + Unmarshaller unmarshallerMock = mock(Unmarshaller.class); template.setUnmarshaller(unmarshallerMock); Object unmarshalled = new Object(); - expect(unmarshallerMock.unmarshal(isA(Source.class))).andReturn(unmarshalled); + when(unmarshallerMock.unmarshal(isA(Source.class))).thenReturn(unmarshalled); connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.receive(messageFactory)).andReturn(new MockWebServiceMessage("")); - expect(connectionMock.hasFault()).andReturn(false); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.receive(messageFactory)).thenReturn(new MockWebServiceMessage("")); + when(connectionMock.hasFault()).thenReturn(false); connectionMock.close(); - replay(connectionMock, marshallerMock, unmarshallerMock); - Object result = template.marshalSendAndReceive(new Object()); assertThat(result).isEqualTo(unmarshalled); - - verify(connectionMock, marshallerMock, unmarshallerMock); } @Test public void testSendAndReceiveMarshalNoResponse() throws Exception { - Marshaller marshallerMock = createMock(Marshaller.class); + Marshaller marshallerMock = mock(Marshaller.class); template.setMarshaller(marshallerMock); marshallerMock.marshal(isA(Object.class), isA(Result.class)); connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.receive(messageFactory)).andReturn(null); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.receive(messageFactory)).thenReturn(null); connectionMock.close(); - replay(connectionMock, marshallerMock); - Object result = template.marshalSendAndReceive(new Object()); assertThat(result).isNull(); - - verify(connectionMock, marshallerMock); } @Test @@ -372,61 +311,53 @@ public class WebServiceTemplateTest { return true; } }); - WebServiceMessageCallback requestCallback = createMock(WebServiceMessageCallback.class); + WebServiceMessageCallback requestCallback = mock(WebServiceMessageCallback.class); requestCallback.doWithMessage(isA(WebServiceMessage.class)); - WebServiceMessageExtractor extractorMock = createMock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); Object extracted = new Object(); - expect(extractorMock.extractData(isA(WebServiceMessage.class))).andReturn(extracted); + when(extractorMock.extractData(isA(WebServiceMessage.class))).thenReturn(extracted); connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.receive(messageFactory)).andReturn(new MockWebServiceMessage("")); - expect(connectionMock.hasFault()).andReturn(false); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.receive(messageFactory)).thenReturn(new MockWebServiceMessage("")); + when(connectionMock.hasFault()).thenReturn(false); connectionMock.close(); - replay(connectionMock, requestCallback, extractorMock); - Object result = template.sendAndReceive(customUri.toString(), requestCallback, extractorMock); assertThat(result).isEqualTo(extracted); - - verify(connectionMock, requestCallback, extractorMock); } @Test public void testInterceptors() throws Exception { - ClientInterceptor interceptorMock1 = createStrictMock("interceptor1", ClientInterceptor.class); - ClientInterceptor interceptorMock2 = createStrictMock("interceptor2", ClientInterceptor.class); + ClientInterceptor interceptorMock1 = mock(ClientInterceptor.class); + ClientInterceptor interceptorMock2 = mock(ClientInterceptor.class); template.setInterceptors(new ClientInterceptor[] { interceptorMock1, interceptorMock2 }); - expect(interceptorMock1.handleRequest(isA(MessageContext.class))).andReturn(true); - expect(interceptorMock2.handleRequest(isA(MessageContext.class))).andReturn(true); - expect(interceptorMock2.handleResponse(isA(MessageContext.class))).andReturn(true); - expect(interceptorMock1.handleResponse(isA(MessageContext.class))).andReturn(true); + when(interceptorMock1.handleRequest(isA(MessageContext.class))).thenReturn(true); + when(interceptorMock2.handleRequest(isA(MessageContext.class))).thenReturn(true); + when(interceptorMock2.handleResponse(isA(MessageContext.class))).thenReturn(true); + when(interceptorMock1.handleResponse(isA(MessageContext.class))).thenReturn(true); interceptorMock2.afterCompletion(isA(MessageContext.class), (Exception) isNull()); interceptorMock1.afterCompletion(isA(MessageContext.class), (Exception) isNull()); - WebServiceMessageCallback requestCallback = createMock(WebServiceMessageCallback.class); + WebServiceMessageCallback requestCallback = mock(WebServiceMessageCallback.class); requestCallback.doWithMessage(isA(WebServiceMessage.class)); - WebServiceMessageExtractor extractorMock = createMock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); Object extracted = new Object(); - expect(extractorMock.extractData(isA(WebServiceMessage.class))).andReturn(extracted); + when(extractorMock.extractData(isA(WebServiceMessage.class))).thenReturn(extracted); connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.receive(messageFactory)).andReturn(new MockWebServiceMessage("")); - expect(connectionMock.hasFault()).andReturn(false); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.receive(messageFactory)).thenReturn(new MockWebServiceMessage("")); + when(connectionMock.hasFault()).thenReturn(false); connectionMock.close(); - replay(connectionMock, interceptorMock1, interceptorMock2, requestCallback, extractorMock); - Object result = template.sendAndReceive(requestCallback, extractorMock); assertThat(result).isEqualTo(extracted); - - verify(connectionMock, interceptorMock1, interceptorMock2, requestCallback, extractorMock); } @Test @@ -434,24 +365,20 @@ public class WebServiceTemplateTest { MessageContext messageContext = new DefaultMessageContext(messageFactory); - ClientInterceptor interceptorMock1 = createStrictMock("interceptor1", ClientInterceptor.class); - ClientInterceptor interceptorMock2 = createStrictMock("interceptor2", ClientInterceptor.class); + ClientInterceptor interceptorMock1 = mock(ClientInterceptor.class); + ClientInterceptor interceptorMock2 = mock(ClientInterceptor.class); template.setInterceptors(new ClientInterceptor[] { interceptorMock1, interceptorMock2 }); - expect(interceptorMock1.handleRequest(isA(MessageContext.class))).andReturn(false); + when(interceptorMock1.handleRequest(isA(MessageContext.class))).thenReturn(false); interceptorMock1.afterCompletion(isA(MessageContext.class), (Exception) isNull()); - WebServiceMessageCallback requestCallback = createMock(WebServiceMessageCallback.class); + WebServiceMessageCallback requestCallback = mock(WebServiceMessageCallback.class); requestCallback.doWithMessage(messageContext.getRequest()); - WebServiceMessageExtractor extractorMock = createMock(WebServiceMessageExtractor.class); - - replay(connectionMock, interceptorMock1, interceptorMock2, requestCallback, extractorMock); + WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); Object result = template.doSendAndReceive(messageContext, connectionMock, requestCallback, extractorMock); assertThat(result).isNull(); - - verify(connectionMock, interceptorMock1, interceptorMock2, requestCallback, extractorMock); } @Test @@ -461,43 +388,39 @@ public class WebServiceTemplateTest { // force creation of response messageContext.getResponse(); - ClientInterceptor interceptorMock1 = createStrictMock("interceptor1", ClientInterceptor.class); - ClientInterceptor interceptorMock2 = createStrictMock("interceptor2", ClientInterceptor.class); + ClientInterceptor interceptorMock1 = mock(ClientInterceptor.class); + ClientInterceptor interceptorMock2 = mock(ClientInterceptor.class); template.setInterceptors(new ClientInterceptor[] { interceptorMock1, interceptorMock2 }); - expect(interceptorMock1.handleRequest(isA(MessageContext.class))).andReturn(false); - expect(interceptorMock1.handleResponse(isA(MessageContext.class))).andReturn(true); + when(interceptorMock1.handleRequest(isA(MessageContext.class))).thenReturn(false); + when(interceptorMock1.handleResponse(isA(MessageContext.class))).thenReturn(true); interceptorMock1.afterCompletion(isA(MessageContext.class), (Exception) isNull()); - WebServiceMessageCallback requestCallback = createMock(WebServiceMessageCallback.class); + WebServiceMessageCallback requestCallback = mock(WebServiceMessageCallback.class); requestCallback.doWithMessage(messageContext.getRequest()); - WebServiceMessageExtractor extractorMock = createMock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); Object extracted = new Object(); - expect(extractorMock.extractData(messageContext.getResponse())).andReturn(extracted); + when(extractorMock.extractData(messageContext.getResponse())).thenReturn(extracted); - expect(connectionMock.hasFault()).andReturn(false); - - replay(connectionMock, interceptorMock1, interceptorMock2, requestCallback, extractorMock); + when(connectionMock.hasFault()).thenReturn(false); Object result = template.doSendAndReceive(messageContext, connectionMock, requestCallback, extractorMock); assertThat(result).isEqualTo(extracted); - - verify(connectionMock, interceptorMock1, interceptorMock2, requestCallback, extractorMock); } @Test public void testDestinationResolver() throws Exception { - DestinationProvider providerMock = createMock(DestinationProvider.class); + DestinationProvider providerMock = mock(DestinationProvider.class); template.setDestinationProvider(providerMock); final URI providerUri = new URI("http://www.springframework.org/spring-ws/destinationProvider"); - expect(providerMock.getDestination()).andReturn(providerUri); + when(providerMock.getDestination()).thenReturn(providerUri); template.setMessageSender(new WebServiceMessageSender() { @Override - public WebServiceConnection createConnection(URI uri) throws IOException { + public WebServiceConnection createConnection(URI uri) { return connectionMock; } @@ -509,22 +432,18 @@ public class WebServiceTemplateTest { } }); - WebServiceMessageExtractor extractorMock = createMock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); reset(connectionMock); connectionMock.send(isA(WebServiceMessage.class)); - expect(connectionMock.hasError()).andReturn(false); - expect(connectionMock.receive(messageFactory)).andReturn(null); - // expect(connectionMock.getUri()).andReturn(new URI("http://example.com")); + when(connectionMock.hasError()).thenReturn(false); + when(connectionMock.receive(messageFactory)).thenReturn(null); + when(connectionMock.getUri()).thenReturn(new URI("http://example.com")); connectionMock.close(); - replay(connectionMock, extractorMock, providerMock); - Object result = template.sendAndReceive(null, extractorMock); assertThat(result).isNull(); - - verify(connectionMock, extractorMock, providerMock); } } diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/support/interceptor/PayloadValidatingInterceptorTest.java b/spring-ws-core/src/test/java/org/springframework/ws/client/support/interceptor/PayloadValidatingInterceptorTest.java index 971fef3c..aae26cb3 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/support/interceptor/PayloadValidatingInterceptorTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/client/support/interceptor/PayloadValidatingInterceptorTest.java @@ -18,12 +18,13 @@ package org.springframework.ws.client.support.interceptor; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; + import java.io.InputStream; import javax.xml.XMLConstants; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.stream.StreamSource; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/StaxStreamPayloadEndpointTest.java b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/StaxStreamPayloadEndpointTest.java index 7e9aa7f1..5e21d5bc 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/StaxStreamPayloadEndpointTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/StaxStreamPayloadEndpointTest.java @@ -18,20 +18,17 @@ package org.springframework.ws.server.endpoint; import static org.assertj.core.api.Assertions.*; -import javax.xml.soap.MessageFactory; +import jakarta.xml.soap.MessageFactory; + import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import javax.xml.transform.Transformer; -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.soap.SOAPFactory; import org.junit.jupiter.api.Test; import org.springframework.ws.context.DefaultMessageContext; import org.springframework.ws.context.MessageContext; -import org.springframework.ws.soap.axiom.AxiomSoapMessage; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; import org.springframework.ws.soap.saaj.SaajSoapMessage; import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; import org.springframework.xml.transform.StringResult; @@ -131,10 +128,10 @@ public class StaxStreamPayloadEndpointTest extends AbstractMessageEndpointTestCa public void testAxiomResponse() throws Exception { Transformer transformer = TransformerFactoryUtils.newInstance().newTransformer(); - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory(); - AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory); + MessageFactory messageFactory = MessageFactory.newInstance(); + SaajSoapMessage request = new SaajSoapMessage(messageFactory.createMessage(), true, messageFactory); transformer.transform(new StringSource(REQUEST), request.getPayloadResult()); - AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory(); + SaajSoapMessageFactory soapMessageFactory = new SaajSoapMessageFactory(); soapMessageFactory.afterPropertiesSet(); MessageContext context = new DefaultMessageContext(request, soapMessageFactory); @@ -153,51 +150,10 @@ public class StaxStreamPayloadEndpointTest extends AbstractMessageEndpointTestCa public void testAxiomNoResponse() throws Exception { Transformer transformer = TransformerFactoryUtils.newInstance().newTransformer(); - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory(); - AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory); + MessageFactory messageFactory = MessageFactory.newInstance(); + SaajSoapMessage request = new SaajSoapMessage(messageFactory.createMessage(), true, messageFactory); transformer.transform(new StringSource(REQUEST), request.getPayloadResult()); - AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory(); - soapMessageFactory.afterPropertiesSet(); - MessageContext context = new DefaultMessageContext(request, soapMessageFactory); - - MessageEndpoint endpoint = createNoResponseEndpoint(); - endpoint.invoke(context); - - assertThat(context.hasResponse()).isFalse(); - } - - @Test - public void testAxiomResponseNoPayloadCaching() throws Exception { - - Transformer transformer = TransformerFactoryUtils.newInstance().newTransformer(); - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory(); - AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory); - transformer.transform(new StringSource(REQUEST), request.getPayloadResult()); - AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory(); - soapMessageFactory.setPayloadCaching(false); - soapMessageFactory.afterPropertiesSet(); - MessageContext context = new DefaultMessageContext(request, soapMessageFactory); - - MessageEndpoint endpoint = createResponseEndpoint(); - endpoint.invoke(context); - - assertThat(context.hasResponse()).isTrue(); - - StringResult stringResult = new StringResult(); - transformer.transform(context.getResponse().getPayloadSource(), stringResult); - - XmlAssert.assertThat(stringResult.toString()).and(RESPONSE).ignoreWhitespace().areIdentical(); - } - - @Test - public void testAxiomNoResponseNoPayloadCaching() throws Exception { - - Transformer transformer = TransformerFactoryUtils.newInstance().newTransformer(); - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory(); - AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory); - transformer.transform(new StringSource(REQUEST), request.getPayloadResult()); - AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory(); - soapMessageFactory.setPayloadCaching(false); + SaajSoapMessageFactory soapMessageFactory = new SaajSoapMessageFactory(); soapMessageFactory.afterPropertiesSet(); MessageContext context = new DefaultMessageContext(request, soapMessageFactory); diff --git a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/AbstractMethodArgumentResolverTestCase.java b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/AbstractMethodArgumentResolverTestCase.java index 8abde3c5..4a595d79 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/AbstractMethodArgumentResolverTestCase.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/AbstractMethodArgumentResolverTestCase.java @@ -16,16 +16,16 @@ package org.springframework.ws.server.endpoint.adapter.method; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPMessage; + import javax.xml.transform.TransformerException; -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.soap.SOAPFactory; import org.springframework.ws.MockWebServiceMessage; import org.springframework.ws.MockWebServiceMessageFactory; import org.springframework.ws.context.DefaultMessageContext; import org.springframework.ws.context.MessageContext; -import org.springframework.ws.soap.axiom.AxiomSoapMessage; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; import org.springframework.ws.soap.saaj.SaajSoapMessage; import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; import org.springframework.xml.transform.StringSource; @@ -39,10 +39,10 @@ public class AbstractMethodArgumentResolverTestCase extends TransformerObjectSup protected static final String XML = "<" + LOCAL_NAME + " xmlns=\"" + NAMESPACE_URI + "\"/>"; - protected MessageContext createSaajMessageContext() throws javax.xml.soap.SOAPException { + protected MessageContext createSaajMessageContext() throws SOAPException { - javax.xml.soap.MessageFactory saajFactory = javax.xml.soap.MessageFactory.newInstance(); - javax.xml.soap.SOAPMessage saajMessage = saajFactory.createMessage(); + MessageFactory saajFactory = MessageFactory.newInstance(); + SOAPMessage saajMessage = saajFactory.createMessage(); saajMessage.getSOAPBody().addChildElement(LOCAL_NAME, "", NAMESPACE_URI); return new DefaultMessageContext(new SaajSoapMessage(saajMessage), new SaajSoapMessageFactory(saajFactory)); @@ -56,10 +56,10 @@ public class AbstractMethodArgumentResolverTestCase extends TransformerObjectSup protected MessageContext createCachingAxiomMessageContext() throws Exception { - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory(); - AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory, true, false); + MessageFactory messageFactory = MessageFactory.newInstance(); + SaajSoapMessage request = new SaajSoapMessage(messageFactory.createMessage(), true, messageFactory); transform(new StringSource(XML), request.getPayloadResult()); - AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory(); + SaajSoapMessageFactory soapMessageFactory = new SaajSoapMessageFactory(); soapMessageFactory.afterPropertiesSet(); return new DefaultMessageContext(request, soapMessageFactory); @@ -67,11 +67,10 @@ public class AbstractMethodArgumentResolverTestCase extends TransformerObjectSup protected MessageContext createNonCachingAxiomMessageContext() throws Exception { - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory(); - AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory, false, false); + MessageFactory messageFactory = MessageFactory.newInstance(); + SaajSoapMessage request = new SaajSoapMessage(messageFactory.createMessage(), true, messageFactory); transform(new StringSource(XML), request.getPayloadResult()); - AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory(); - soapMessageFactory.setPayloadCaching(false); + SaajSoapMessageFactory soapMessageFactory = new SaajSoapMessageFactory(); soapMessageFactory.afterPropertiesSet(); return new DefaultMessageContext(request, soapMessageFactory); diff --git a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/JaxbElementPayloadMethodProcessorTest.java b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/JaxbElementPayloadMethodProcessorTest.java index 7c196549..6a07375c 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/JaxbElementPayloadMethodProcessorTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/JaxbElementPayloadMethodProcessorTest.java @@ -18,14 +18,12 @@ package org.springframework.ws.server.endpoint.adapter.method.jaxb; import static org.assertj.core.api.Assertions.*; -import java.io.ByteArrayOutputStream; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlType; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; -import javax.xml.transform.Transformer; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -37,10 +35,6 @@ import org.springframework.ws.context.DefaultMessageContext; import org.springframework.ws.context.MessageContext; import org.springframework.ws.server.endpoint.annotation.RequestPayload; import org.springframework.ws.server.endpoint.annotation.ResponsePayload; -import org.springframework.ws.soap.axiom.AxiomSoapMessage; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; -import org.springframework.xml.transform.StringResult; -import org.springframework.xml.transform.TransformerFactoryUtils; import org.xmlunit.assertj.XmlAssert; public class JaxbElementPayloadMethodProcessorTest { @@ -134,42 +128,6 @@ public class JaxbElementPayloadMethodProcessorTest { assertThat(messageContext.hasResponse()).isFalse(); } - @Test - public void handleReturnValueAxiom() throws Exception { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - MessageContext messageContext = new DefaultMessageContext(messageFactory); - - MyType type = new MyType(); - type.setString("Foo"); - JAXBElement element = new JAXBElement<>(new QName("http://springframework.org", "type"), MyType.class, - type); - - processor.handleReturnValue(messageContext, supportedReturnType, element); - - assertThat(messageContext.hasResponse()).isTrue(); - - AxiomSoapMessage response = (AxiomSoapMessage) messageContext.getResponse(); - - Transformer transformer = TransformerFactoryUtils.newInstance().newTransformer(); - StringResult payloadResult = new StringResult(); - transformer.transform(response.getPayloadSource(), payloadResult); - - XmlAssert.assertThat(payloadResult.toString()) - .and("Foo").ignoreWhitespace().areIdentical(); - - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - response.writeTo(bos); - String messageResult = bos.toString("UTF-8"); - - XmlAssert.assertThat(messageResult).and( - "" - + "Foo" - + "") - .ignoreWhitespace().areIdentical(); - - } - @ResponsePayload public JAXBElement supported(@RequestPayload JAXBElement element) { return element; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/XmlRootElementPayloadMethodProcessorTest.java b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/XmlRootElementPayloadMethodProcessorTest.java index 66f6b637..b013a7c1 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/XmlRootElementPayloadMethodProcessorTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/adapter/method/jaxb/XmlRootElementPayloadMethodProcessorTest.java @@ -18,16 +18,15 @@ package org.springframework.ws.server.endpoint.adapter.method.jaxb; import static org.assertj.core.api.Assertions.*; -import java.io.ByteArrayOutputStream; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; + import java.io.OutputStream; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; import javax.xml.transform.Result; import javax.xml.transform.Source; -import javax.xml.transform.Transformer; import javax.xml.transform.sax.SAXSource; import org.junit.jupiter.api.BeforeEach; @@ -40,11 +39,7 @@ import org.springframework.ws.context.DefaultMessageContext; import org.springframework.ws.context.MessageContext; import org.springframework.ws.server.endpoint.annotation.RequestPayload; import org.springframework.ws.server.endpoint.annotation.ResponsePayload; -import org.springframework.ws.soap.axiom.AxiomSoapMessage; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; import org.springframework.xml.sax.AbstractXmlReader; -import org.springframework.xml.transform.StringResult; -import org.springframework.xml.transform.TransformerFactoryUtils; import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -210,68 +205,6 @@ public class XmlRootElementPayloadMethodProcessorTest { assertThat(messageContext.hasResponse()).isFalse(); } - @Test - public void handleReturnValueAxiom() throws Exception { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - MessageContext messageContext = new DefaultMessageContext(messageFactory); - - MyRootElement rootElement = new MyRootElement(); - rootElement.setString("Foo"); - - processor.handleReturnValue(messageContext, rootElementReturnType, rootElement); - - assertThat(messageContext.hasResponse()).isTrue(); - - AxiomSoapMessage response = (AxiomSoapMessage) messageContext.getResponse(); - - Transformer transformer = TransformerFactoryUtils.newInstance().newTransformer(); - StringResult payloadResult = new StringResult(); - transformer.transform(response.getPayloadSource(), payloadResult); - - XmlAssert.assertThat(payloadResult.toString()) - .and("Foo").ignoreWhitespace().areIdentical(); - - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - response.writeTo(bos); - String messageResult = bos.toString("UTF-8"); - - XmlAssert.assertThat(messageResult).and( - "" - + "Foo" - + "") - .ignoreWhitespace().areIdentical(); - - } - - @Test - public void handleReturnValueAxiomNoPayloadCaching() throws Exception { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(false); - MessageContext messageContext = new DefaultMessageContext(messageFactory); - - MyRootElement rootElement = new MyRootElement(); - rootElement.setString("Foo"); - - processor.handleReturnValue(messageContext, rootElementReturnType, rootElement); - - assertThat(messageContext.hasResponse()).isTrue(); - - AxiomSoapMessage response = (AxiomSoapMessage) messageContext.getResponse(); - - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - response.writeTo(bos); - String messageResult = bos.toString("UTF-8"); - - XmlAssert.assertThat(messageResult).and( - "" - + "Foo" - + "") - .ignoreWhitespace().areIdentical(); - - } - @ResponsePayload public MyRootElement rootElement(@RequestPayload MyRootElement rootElement) { return rootElement; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/interceptor/PayloadTransformingInterceptorTest.java b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/interceptor/PayloadTransformingInterceptorTest.java index 87309a2f..cc324c75 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/interceptor/PayloadTransformingInterceptorTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/interceptor/PayloadTransformingInterceptorTest.java @@ -18,8 +18,9 @@ package org.springframework.ws.server.endpoint.interceptor; import static org.assertj.core.api.Assertions.*; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPMessage; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPMessage; + import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXSource; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/mapping/PayloadRootAnnotationMethodEndpointMappingTest.java b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/mapping/PayloadRootAnnotationMethodEndpointMappingTest.java index 927874c5..f7038cc1 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/mapping/PayloadRootAnnotationMethodEndpointMappingTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/mapping/PayloadRootAnnotationMethodEndpointMappingTest.java @@ -18,12 +18,13 @@ package org.springframework.ws.server.endpoint.mapping; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPMessage; + import java.lang.reflect.Method; import java.util.Collections; import javax.xml.namespace.QName; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPMessage; import javax.xml.transform.Source; import org.apache.commons.logging.LogFactory; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/mapping/jaxb/XmlRootElementEndpointMappingTest.java b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/mapping/jaxb/XmlRootElementEndpointMappingTest.java index efc88b7d..399280f4 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/mapping/jaxb/XmlRootElementEndpointMappingTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/server/endpoint/mapping/jaxb/XmlRootElementEndpointMappingTest.java @@ -18,9 +18,10 @@ package org.springframework.ws.server.endpoint.mapping.jaxb; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.bind.annotation.XmlRootElement; + import java.lang.reflect.Method; -import javax.xml.bind.annotation.XmlRootElement; import javax.xml.namespace.QName; import org.junit.jupiter.api.BeforeEach; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/AbstractWsAddressingTestCase.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/AbstractWsAddressingTestCase.java index c2f4dee5..a965a3a7 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/AbstractWsAddressingTestCase.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/AbstractWsAddressingTestCase.java @@ -18,14 +18,14 @@ package org.springframework.ws.soap.addressing; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPException; + import java.io.IOException; import java.io.InputStream; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPException; - import org.junit.jupiter.api.BeforeEach; import org.springframework.ws.soap.saaj.SaajSoapMessage; import org.w3c.dom.Document; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/client/AbstractActionCallbackTestCase.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/client/AbstractActionCallbackTestCase.java index 4ea6b340..58378694 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/client/AbstractActionCallbackTestCase.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/client/AbstractActionCallbackTestCase.java @@ -18,14 +18,15 @@ package org.springframework.ws.soap.addressing.client; import static org.easymock.EasyMock.*; +import jakarta.xml.soap.SOAPBody; +import jakarta.xml.soap.SOAPBodyElement; +import jakarta.xml.soap.SOAPElement; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPMessage; + import java.net.URI; import javax.xml.namespace.QName; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPBodyElement; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/server/AnnotationActionMethodEndpointMappingTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/server/AnnotationActionMethodEndpointMappingTest.java index 74efa1ce..50e54b9f 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/server/AnnotationActionMethodEndpointMappingTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/addressing/server/AnnotationActionMethodEndpointMappingTest.java @@ -18,14 +18,14 @@ package org.springframework.ws.soap.addressing.server; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPException; + import java.io.IOException; import java.io.InputStream; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPException; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.context.support.StaticApplicationContext; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11BodyTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11BodyTest.java deleted file mode 100644 index eae9b3e1..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11BodyTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.axiom; - -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.soap.SOAPFactory; -import org.junit.jupiter.api.Test; -import org.springframework.ws.soap.SoapBody; -import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.soap11.AbstractSoap11BodyTestCase; -import org.springframework.xml.transform.StringSource; - -public class AxiomSoap11BodyTest extends AbstractSoap11BodyTestCase { - - @Override - protected SoapBody createSoapBody() { - - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory(); - AxiomSoapMessage axiomSoapMessage = new AxiomSoapMessage(axiomFactory); - - return axiomSoapMessage.getSoapBody(); - } - - @Test - public void testPayloadNoCaching() throws Exception { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(false); - messageFactory.setSoapVersion(SoapVersion.SOAP_11); - - AxiomSoapMessage axiomSoapMessage = messageFactory.createWebServiceMessage(); - soapBody = axiomSoapMessage.getSoapBody(); - - String payload = ""; - transformer.transform(new StringSource(payload), soapBody.getPayloadResult()); - assertPayloadEqual(payload); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11EnvelopeTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11EnvelopeTest.java deleted file mode 100644 index 85b4fdfb..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11EnvelopeTest.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom; - -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.soap.SOAPFactory; -import org.springframework.ws.soap.SoapEnvelope; -import org.springframework.ws.soap.soap11.AbstractSoap11EnvelopeTestCase; - -public class AxiomSoap11EnvelopeTest extends AbstractSoap11EnvelopeTestCase { - - @Override - protected SoapEnvelope createSoapEnvelope() { - - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory(); - AxiomSoapMessage axiomSoapMessage = new AxiomSoapMessage(axiomFactory); - - return axiomSoapMessage.getEnvelope(); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11HeaderTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11HeaderTest.java deleted file mode 100644 index 5c05d841..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11HeaderTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom; - -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.soap.SOAPFactory; -import org.springframework.ws.soap.SoapHeader; -import org.springframework.ws.soap.soap11.AbstractSoap11HeaderTestCase; - -public class AxiomSoap11HeaderTest extends AbstractSoap11HeaderTestCase { - - @Override - protected SoapHeader createSoapHeader() { - - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory(); - AxiomSoapMessage axiomSoapMessage = new AxiomSoapMessage(axiomFactory); - - return axiomSoapMessage.getSoapHeader(); - } - - @Override - public void testGetResult() {} -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11MessageFactoryTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11MessageFactoryTest.java deleted file mode 100644 index e2b06499..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11MessageFactoryTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright 2005-2012 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.ws.soap.axiom; - -import static org.assertj.core.api.Assertions.*; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; - -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; - -import org.junit.jupiter.api.Test; -import org.springframework.ws.InvalidXmlException; -import org.springframework.ws.WebServiceMessage; -import org.springframework.ws.WebServiceMessageFactory; -import org.springframework.ws.soap.soap11.AbstractSoap11MessageFactoryTestCase; -import org.springframework.ws.transport.MockTransportInputStream; -import org.springframework.ws.transport.TransportInputStream; -import org.springframework.xml.transform.StringResult; -import org.springframework.xml.transform.TransformerFactoryUtils; -import org.xmlunit.assertj.XmlAssert; - -public class AxiomSoap11MessageFactoryTest extends AbstractSoap11MessageFactoryTestCase { - - private Transformer transformer; - - @Override - protected WebServiceMessageFactory createMessageFactory() throws Exception { - - transformer = TransformerFactoryUtils.newInstance().newTransformer(); - - AxiomSoapMessageFactory factory = new AxiomSoapMessageFactory(); - factory.afterPropertiesSet(); - return factory; - } - - @Override - public void doTestCreateSoapMessageIllFormedXml() { - - // Axiom parses the contents of XML lazily, so it will not throw an InvalidXmlException when a message is parsed - throw new InvalidXmlException(null, null); - } - - @Test - public void testGetCharsetEncoding() { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - - assertThat(messageFactory.getCharSetEncoding("text/html; charset=utf-8")).isEqualTo("utf-8"); - assertThat(messageFactory.getCharSetEncoding("application/xop+xml;type=text/xml; charset=utf-8")) - .isEqualTo("utf-8"); - assertThat(messageFactory.getCharSetEncoding("application/xop+xml;type=\"text/xml; charset=utf-8\"")) - .isEqualTo("utf-8"); - } - - @Test - public void testRepetitiveReadCaching() throws Exception { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(true); - messageFactory.afterPropertiesSet(); - - String xml = "" - + "" + ""; - TransportInputStream tis = new MockTransportInputStream(new ByteArrayInputStream(xml.getBytes())); - WebServiceMessage message = messageFactory.createWebServiceMessage(tis); - - StringResult result = new StringResult(); - transformer.transform(message.getPayloadSource(), result); - transformer.transform(message.getPayloadSource(), result); - } - - @Test - public void testRepetitiveReadNoCaching() throws Exception { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(false); - messageFactory.afterPropertiesSet(); - - String xml = "" - + "" + ""; - TransportInputStream tis = new MockTransportInputStream(new ByteArrayInputStream(xml.getBytes())); - WebServiceMessage message = messageFactory.createWebServiceMessage(tis); - - StringResult result = new StringResult(); - transformer.transform(message.getPayloadSource(), result); - - try { - transformer.transform(message.getPayloadSource(), result); - fail("TransformerException expected"); - } catch (TransformerException expected) { - // ignore - } - } - - /** - * See http://jira.springframework.org/browse/SWS-502 - */ - @Test - public void testSWS502() throws Exception { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(false); - messageFactory.afterPropertiesSet(); - - String envelope = "" - + "" - + "" - + "" + "" + "true" - + "0" - + "ok]]]]>>" - + "]]>" + "" + ""; - - InputStream inputStream = new ByteArrayInputStream(envelope.getBytes("UTF-8")); - AxiomSoapMessage message = messageFactory.createWebServiceMessage(new MockTransportInputStream(inputStream)); - - StringResult result = new StringResult(); - transformer.transform(message.getPayloadSource(), result); - - String expectedPayload = "" - + "" - + "" + "" + "true" - + "0" - + "ok]]]]>>" - + "]]>" + ""; - - XmlAssert.assertThat(result.toString()).and(expectedPayload).ignoreWhitespace().areIdentical(); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11MessageTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11MessageTest.java deleted file mode 100644 index e53168f5..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11MessageTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom; - -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.soap.SOAPFactory; -import org.springframework.ws.soap.SoapMessage; -import org.springframework.ws.soap.soap11.AbstractSoap11MessageTestCase; - -public class AxiomSoap11MessageTest extends AbstractSoap11MessageTestCase { - - @Override - protected String getNS() { - return "soapenv"; - } - - @Override - protected SoapMessage createSoapMessage() { - - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory(); - return new AxiomSoapMessage(axiomFactory); - } - -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11NonCachingBodyTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11NonCachingBodyTest.java deleted file mode 100644 index 46c42a24..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11NonCachingBodyTest.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.axiom; - -import org.springframework.ws.soap.SoapBody; -import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.soap11.AbstractSoap11BodyTestCase; - -public class AxiomSoap11NonCachingBodyTest extends AbstractSoap11BodyTestCase { - - @Override - protected SoapBody createSoapBody() { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(false); - messageFactory.setSoapVersion(SoapVersion.SOAP_11); - - AxiomSoapMessage axiomSoapMessage = messageFactory.createWebServiceMessage(); - return axiomSoapMessage.getSoapBody(); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11NonCachingMessageTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11NonCachingMessageTest.java deleted file mode 100644 index a03c53bb..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11NonCachingMessageTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.axiom; - -import static org.assertj.core.api.Assertions.*; - -import org.apache.axiom.om.OMSourcedElement; -import org.springframework.ws.soap.SoapBody; -import org.springframework.ws.soap.SoapMessage; -import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.soap11.AbstractSoap11MessageTestCase; - -public class AxiomSoap11NonCachingMessageTest extends AbstractSoap11MessageTestCase { - - @Override - protected String getNS() { - return "soapenv"; - } - - @Override - protected SoapMessage createSoapMessage() { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(false); - messageFactory.setSoapVersion(SoapVersion.SOAP_11); - - return messageFactory.createWebServiceMessage(); - } - - @Override - public void testWriteToTransportOutputStream() throws Exception { - - super.testWriteToTransportOutputStream(); - - SoapBody body = soapMessage.getSoapBody(); - OMSourcedElement axiomPayloadEle = (OMSourcedElement) ((AxiomSoapBody) body).getAxiomElement().getFirstElement(); - - assertThat(axiomPayloadEle.isExpanded()).isFalse(); - - axiomPayloadEle.getFirstElement(); - - assertThat(axiomPayloadEle.isExpanded()).isTrue(); - assertThat(axiomPayloadEle.getLocalName()).isEqualTo("payload"); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12BodyTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12BodyTest.java deleted file mode 100644 index 5ace9440..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12BodyTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.axiom; - -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.soap.SOAPFactory; -import org.junit.jupiter.api.Test; -import org.springframework.ws.soap.SoapBody; -import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.soap12.AbstractSoap12BodyTestCase; -import org.springframework.xml.transform.StringSource; - -public class AxiomSoap12BodyTest extends AbstractSoap12BodyTestCase { - - @Override - protected SoapBody createSoapBody() { - - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP12Factory(); - AxiomSoapMessage axiomSoapMessage = new AxiomSoapMessage(axiomFactory); - return axiomSoapMessage.getSoapBody(); - } - - @Test - public void testPayloadNoCaching() throws Exception { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(false); - messageFactory.setSoapVersion(SoapVersion.SOAP_12); - - AxiomSoapMessage axiomSoapMessage = messageFactory.createWebServiceMessage(); - soapBody = axiomSoapMessage.getSoapBody(); - - String payload = ""; - transformer.transform(new StringSource(payload), soapBody.getPayloadResult()); - - assertPayloadEqual(payload); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12EnvelopeTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12EnvelopeTest.java deleted file mode 100644 index adbdbb2f..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12EnvelopeTest.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom; - -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.soap.SOAPFactory; -import org.springframework.ws.soap.SoapEnvelope; -import org.springframework.ws.soap.soap12.AbstractSoap12EnvelopeTestCase; - -public class AxiomSoap12EnvelopeTest extends AbstractSoap12EnvelopeTestCase { - - @Override - protected SoapEnvelope createSoapEnvelope() { - - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP12Factory(); - AxiomSoapMessage axiomSoapMessage = new AxiomSoapMessage(axiomFactory); - - return axiomSoapMessage.getEnvelope(); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12HeaderTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12HeaderTest.java deleted file mode 100644 index dc62420f..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12HeaderTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom; - -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.soap.SOAPFactory; -import org.springframework.ws.soap.SoapHeader; -import org.springframework.ws.soap.soap12.AbstractSoap12HeaderTestCase; - -public class AxiomSoap12HeaderTest extends AbstractSoap12HeaderTestCase { - - @Override - protected SoapHeader createSoapHeader() { - - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP12Factory(); - AxiomSoapMessage axiomSoapMessage = new AxiomSoapMessage(axiomFactory); - - return axiomSoapMessage.getSoapHeader(); - } - - @Override - public void testGetResult() {} -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12MessageFactoryTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12MessageFactoryTest.java deleted file mode 100644 index 81c4e6cd..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12MessageFactoryTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2005-2012 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.ws.soap.axiom; - -import org.springframework.ws.InvalidXmlException; -import org.springframework.ws.WebServiceMessageFactory; -import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.soap12.AbstractSoap12MessageFactoryTestCase; - -public class AxiomSoap12MessageFactoryTest extends AbstractSoap12MessageFactoryTestCase { - - @Override - protected WebServiceMessageFactory createMessageFactory() throws Exception { - - AxiomSoapMessageFactory factory = new AxiomSoapMessageFactory(); - factory.setSoapVersion(SoapVersion.SOAP_12); - factory.afterPropertiesSet(); - - return factory; - } - - @Override - public void doTestCreateSoapMessageIllFormedXml() { - - // Axiom parses the contents of XML lazily, so it will not throw an InvalidXmlException when a message is parsed - throw new InvalidXmlException(null, null); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12MessageTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12MessageTest.java deleted file mode 100644 index fb015936..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12MessageTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom; - -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.soap.SOAPFactory; -import org.springframework.ws.soap.SoapMessage; -import org.springframework.ws.soap.soap12.AbstractSoap12MessageTestCase; - -public class AxiomSoap12MessageTest extends AbstractSoap12MessageTestCase { - - @Override - protected String getNS() { - return "soapenv"; - } - - @Override - protected SoapMessage createSoapMessage() { - - SOAPFactory axiomFactory = OMAbstractFactory.getSOAP12Factory(); - return new AxiomSoapMessage(axiomFactory); - } - -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12NonCachingBodyTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12NonCachingBodyTest.java deleted file mode 100644 index 0e6de3b1..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12NonCachingBodyTest.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.axiom; - -import org.springframework.ws.soap.SoapBody; -import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.soap12.AbstractSoap12BodyTestCase; - -public class AxiomSoap12NonCachingBodyTest extends AbstractSoap12BodyTestCase { - - @Override - protected SoapBody createSoapBody() { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(false); - messageFactory.setSoapVersion(SoapVersion.SOAP_12); - - AxiomSoapMessage axiomSoapMessage = messageFactory.createWebServiceMessage(); - - return axiomSoapMessage.getSoapBody(); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12NonCachingMessageTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12NonCachingMessageTest.java deleted file mode 100644 index 4eefbf16..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap12NonCachingMessageTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom; - -import static org.assertj.core.api.Assertions.*; - -import org.apache.axiom.om.OMSourcedElement; -import org.springframework.ws.soap.SoapBody; -import org.springframework.ws.soap.SoapMessage; -import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.soap12.AbstractSoap12MessageTestCase; - -public class AxiomSoap12NonCachingMessageTest extends AbstractSoap12MessageTestCase { - - @Override - protected String getNS() { - return "soapenv"; - } - - @Override - protected SoapMessage createSoapMessage() { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(false); - messageFactory.setSoapVersion(SoapVersion.SOAP_12); - - return messageFactory.createWebServiceMessage(); - } - - @Override - public void testWriteToTransportOutputStream() throws Exception { - - super.testWriteToTransportOutputStream(); - - SoapBody body = soapMessage.getSoapBody(); - OMSourcedElement axiomPayloadEle = (OMSourcedElement) ((AxiomSoapBody) body).getAxiomElement().getFirstElement(); - - assertThat(axiomPayloadEle.isExpanded()).isFalse(); - - axiomPayloadEle.getFirstElement(); - - assertThat(axiomPayloadEle.isExpanded()).isTrue(); - assertThat(axiomPayloadEle.getLocalName()).isEqualTo("payload"); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoapFaultDetailTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoapFaultDetailTest.java deleted file mode 100644 index 31ab9779..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoapFaultDetailTest.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom; - -import static org.assertj.core.api.Assertions.*; - -import java.io.StringReader; - -import org.apache.axiom.om.OMXMLBuilderFactory; -import org.apache.axiom.soap.SOAPMessage; -import org.apache.axiom.soap.SOAPModelBuilder; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.ws.soap.SoapFault; -import org.springframework.ws.soap.SoapFaultDetail; - -@SuppressWarnings("Since15") -public class AxiomSoapFaultDetailTest { - - private static final String FAILING_FAULT = "\n " + "\n " + "\n " - + "Client\n " + "Client Error\n " + "\n " - + "\n " + "\n " - + "" + "" + "" + "" + ""; - - private static final String SUCCEEDING_FAULT = "\n " + "\n " + "\n " - + "Client\n " + "Client Error\n " + "" - + "\n " + "\n " - + "" + "" + "" + "" + ""; - - private AxiomSoapMessage failingMessage; - - private AxiomSoapMessage succeedingMessage; - - @BeforeEach - public void setUp() throws Exception { - - SOAPModelBuilder builder = OMXMLBuilderFactory.createSOAPModelBuilder(new StringReader(FAILING_FAULT)); - SOAPMessage soapMessage = builder.getSOAPMessage(); - - failingMessage = new AxiomSoapMessage(soapMessage, null, false, true); - - builder = OMXMLBuilderFactory.createSOAPModelBuilder(new StringReader(SUCCEEDING_FAULT)); - soapMessage = builder.getSOAPMessage(); - - succeedingMessage = new AxiomSoapMessage(soapMessage, null, false, true); - - } - - @Test - public void testGetDetailEntriesWorksWithWhitespaceNodes() { - - SoapFault fault = failingMessage.getSoapBody().getFault(); - - assertThat(fault).isNotNull(); - assertThat(fault.getFaultDetail()).isNotNull(); - - SoapFaultDetail detail = fault.getFaultDetail(); - - assertThat(detail.getDetailEntries().hasNext()).isTrue(); - - detail.getDetailEntries().next(); - } - - @Test - public void testGetDetailEntriesWorksWithoutWhitespaceNodes() { - - SoapFault fault = succeedingMessage.getSoapBody().getFault(); - - assertThat(fault).isNotNull(); - assertThat(fault.getFaultDetail()).isNotNull(); - - SoapFaultDetail detail = fault.getFaultDetail(); - - assertThat(detail.getDetailEntries().hasNext()).isTrue(); - - detail.getDetailEntries().next(); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/NonCachingPayloadTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/NonCachingPayloadTest.java deleted file mode 100644 index 6e578a05..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/NonCachingPayloadTest.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom; - -import static org.xmlunit.assertj.XmlAssert.*; - -import java.io.StringWriter; - -import javax.xml.stream.XMLStreamWriter; - -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.soap.SOAPBody; -import org.apache.axiom.soap.SOAPFactory; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.util.xml.StaxUtils; - -@SuppressWarnings("Since15") -public class NonCachingPayloadTest { - - private Payload payload; - - private SOAPBody body; - - @BeforeEach - public final void setUp() { - - SOAPFactory soapFactory = OMAbstractFactory.getSOAP11Factory(); - body = soapFactory.createSOAPBody(); - payload = new NonCachingPayload(body, soapFactory); - } - - @Test - public void testDelegatingStreamWriter() throws Exception { - - XMLStreamWriter streamWriter = StaxUtils.getXMLStreamWriter(payload.getResult()); - - String namespace = "http://springframework.org/spring-ws"; - streamWriter.setDefaultNamespace(namespace); - streamWriter.writeStartElement(namespace, "root"); - streamWriter.writeDefaultNamespace(namespace); - streamWriter.writeStartElement(namespace, "child"); - streamWriter.writeCharacters("text"); - streamWriter.writeEndElement(); - streamWriter.writeEndElement(); - streamWriter.flush(); - - StringWriter writer = new StringWriter(); - body.serialize(writer); - - String expected = "" - + "" + "text" + ""; - - assertThat(writer.toString()).and(expected).ignoreWhitespace().areIdentical(); - } - - @Test - public void testDelegatingStreamWriterWriteEndDocument() throws Exception { - - XMLStreamWriter streamWriter = StaxUtils.getXMLStreamWriter(payload.getResult()); - - String namespace = "http://springframework.org/spring-ws"; - streamWriter.setDefaultNamespace(namespace); - streamWriter.writeStartElement(namespace, "root"); - streamWriter.writeDefaultNamespace(namespace); - streamWriter.writeStartElement(namespace, "child"); - streamWriter.writeCharacters("text"); - streamWriter.writeEndDocument(); - streamWriter.flush(); - - StringWriter writer = new StringWriter(); - body.serialize(writer); - - String expected = "" - + "" + "text" + ""; - - assertThat(writer.toString()).and(expected).ignoreWhitespace().areIdentical(); - } - - @Test - public void testDelegatingStreamWriterWriteEmptyElement() throws Exception { - XMLStreamWriter streamWriter = StaxUtils.getXMLStreamWriter(payload.getResult()); - - String namespace = "http://springframework.org/spring-ws"; - streamWriter.setDefaultNamespace(namespace); - streamWriter.writeStartElement(namespace, "root"); - streamWriter.writeDefaultNamespace(namespace); - streamWriter.writeEmptyElement(namespace, "child"); - streamWriter.writeEndElement(); - streamWriter.flush(); - - StringWriter writer = new StringWriter(); - body.serialize(writer); - - String expected = "" - + "" + "" + ""; - - assertThat(writer.toString()).and(expected).ignoreWhitespace().areIdentical(); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/support/AxiomUtilsTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/support/AxiomUtilsTest.java deleted file mode 100644 index 3f930727..00000000 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/axiom/support/AxiomUtilsTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.axiom.support; - -import static org.assertj.core.api.Assertions.*; - -import java.io.StringWriter; -import java.util.Locale; - -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.OMFactory; -import org.apache.axiom.om.OMNamespace; -import org.apache.axiom.om.OMXMLBuilderFactory; -import org.apache.axiom.soap.SOAPEnvelope; -import org.apache.axiom.soap.SOAPMessage; -import org.apache.axiom.soap.SOAPModelBuilder; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; -import org.springframework.util.FileCopyUtils; -import org.springframework.xml.DocumentBuilderFactoryUtils; -import org.springframework.xml.sax.SaxUtils; -import org.w3c.dom.Document; -import org.xmlunit.assertj.XmlAssert; - -public class AxiomUtilsTest { - - private OMElement element; - - @BeforeEach - public void setUp() throws Exception { - - OMFactory factory = OMAbstractFactory.getOMFactory(); - OMNamespace namespace = factory.createOMNamespace("http://www.springframework.org", "prefix"); - element = factory.createOMElement("element", namespace); - } - - @Test - public void testToNamespaceDeclared() { - - QName qName = new QName(element.getNamespace().getNamespaceURI(), "localPart"); - OMNamespace namespace = AxiomUtils.toNamespace(qName, element); - - assertThat(namespace).isNotNull(); - assertThat(namespace.getNamespaceURI()).isEqualTo(qName.getNamespaceURI()); - } - - @Test - public void testToNamespaceUndeclared() { - - QName qName = new QName("http://www.example.com", "localPart"); - OMNamespace namespace = AxiomUtils.toNamespace(qName, element); - - assertThat(namespace).isNotNull(); - assertThat(namespace.getNamespaceURI()).isEqualTo(qName.getNamespaceURI()); - assertThat(namespace.getPrefix()).isNotEqualTo("prefix"); - } - - @Test - public void testToNamespacePrefixDeclared() { - - QName qName = new QName(element.getNamespace().getNamespaceURI(), "localPart", "prefix"); - OMNamespace namespace = AxiomUtils.toNamespace(qName, element); - - assertThat(namespace).isNotNull(); - assertThat(namespace.getNamespaceURI()).isEqualTo(qName.getNamespaceURI()); - assertThat(namespace.getPrefix()).isEqualTo("prefix"); - } - - @Test - public void testToNamespacePrefixUndeclared() { - - QName qName = new QName("http://www.example.com", "localPart", "otherPrefix"); - OMNamespace namespace = AxiomUtils.toNamespace(qName, element); - - assertThat(namespace).isNotNull(); - assertThat(namespace.getNamespaceURI()).isEqualTo(qName.getNamespaceURI()); - assertThat(namespace.getPrefix()).isEqualTo(qName.getPrefix()); - } - - @Test - public void testToLanguage() { - - assertThat(AxiomUtils.toLanguage(Locale.CANADA_FRENCH)).isEqualTo("fr-CA"); - assertThat(AxiomUtils.toLanguage(Locale.ENGLISH)).isEqualTo("en"); - } - - @Test - public void testToLocale() { - - assertThat(AxiomUtils.toLocale("fr-CA")).isEqualTo(Locale.CANADA_FRENCH); - assertThat(AxiomUtils.toLocale("en")).isEqualTo(Locale.ENGLISH); - } - - @Test - @SuppressWarnings("Since15") - public void testToDocument() throws Exception { - - Resource resource = new ClassPathResource("org/springframework/ws/soap/soap11/soap11.xml"); - - DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactoryUtils.newInstance(); - documentBuilderFactory.setNamespaceAware(true); - DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); - Document expected = documentBuilder.parse(SaxUtils.createInputSource(resource)); - - SOAPModelBuilder builder = OMXMLBuilderFactory.createSOAPModelBuilder(resource.getInputStream(), null); - SOAPMessage soapMessage = builder.getSOAPMessage(); - - Document result = AxiomUtils.toDocument(soapMessage.getSOAPEnvelope()); - - XmlAssert.assertThat(result).and(expected).ignoreWhitespace().areIdentical(); - } - - @Test - public void testToEnvelope() throws Exception { - - Resource resource = new ClassPathResource("org/springframework/ws/soap/soap11/soap11.xml"); - - byte[] buf = FileCopyUtils.copyToByteArray(resource.getFile()); - String expected = new String(buf, "UTF-8"); - - DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactoryUtils.newInstance(); - documentBuilderFactory.setNamespaceAware(true); - DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); - Document document = documentBuilder.parse(SaxUtils.createInputSource(resource)); - - SOAPEnvelope envelope = AxiomUtils.toEnvelope(document); - StringWriter writer = new StringWriter(); - envelope.serialize(writer); - String result = writer.toString(); - - XmlAssert.assertThat(result).and(expected).ignoreWhitespace().areIdentical(); - } -} diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/client/core/SaajSoapActionCallbackTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/client/core/SaajSoapActionCallbackTest.java index b34f01e4..33eaa7d5 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/client/core/SaajSoapActionCallbackTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/client/core/SaajSoapActionCallbackTest.java @@ -2,11 +2,11 @@ package org.springframework.ws.soap.client.core; import static org.assertj.core.api.Assertions.*; -import java.io.IOException; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPException; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPException; +import java.io.IOException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11BodyTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11BodyTest.java index f09dbd4a..64228c1c 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11BodyTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11BodyTest.java @@ -18,12 +18,12 @@ package org.springframework.ws.soap.saaj; import static org.assertj.core.api.Assertions.*; -import java.util.Locale; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPBody; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; +import java.util.Locale; import org.junit.jupiter.api.Test; import org.springframework.ws.soap.SoapBody; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11EnvelopeTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11EnvelopeTest.java index 7a4ef7c1..a6112fa4 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11EnvelopeTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11EnvelopeTest.java @@ -16,9 +16,9 @@ package org.springframework.ws.soap.saaj; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; import org.springframework.ws.soap.SoapEnvelope; import org.springframework.ws.soap.soap11.AbstractSoap11EnvelopeTestCase; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11HeaderTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11HeaderTest.java index bad7de37..b2c94672 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11HeaderTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11HeaderTest.java @@ -16,9 +16,9 @@ package org.springframework.ws.soap.saaj; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; import org.springframework.ws.soap.SoapHeader; import org.springframework.ws.soap.soap11.AbstractSoap11HeaderTestCase; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11MessageFactoryTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11MessageFactoryTest.java index b2546036..879bd8c7 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11MessageFactoryTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11MessageFactoryTest.java @@ -18,15 +18,15 @@ package org.springframework.ws.soap.saaj; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; + import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Collections; import java.util.Map; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; - import org.junit.jupiter.api.Test; import org.springframework.ws.WebServiceMessageFactory; import org.springframework.ws.soap.SoapMessage; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11MessageTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11MessageTest.java index 35b4e67c..6d7353b0 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11MessageTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap11MessageTest.java @@ -18,13 +18,14 @@ package org.springframework.ws.soap.saaj; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPBody; +import jakarta.xml.soap.SOAPBodyElement; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; + import java.util.Iterator; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPBodyElement; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; import javax.xml.transform.Result; import javax.xml.transform.Source; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12BodyTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12BodyTest.java index 56684667..f2cd76a1 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12BodyTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12BodyTest.java @@ -16,9 +16,9 @@ package org.springframework.ws.soap.saaj; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; import org.springframework.ws.soap.SoapBody; import org.springframework.ws.soap.soap12.AbstractSoap12BodyTestCase; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12EnvelopeTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12EnvelopeTest.java index 03e6c72d..28d2612c 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12EnvelopeTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12EnvelopeTest.java @@ -16,9 +16,9 @@ package org.springframework.ws.soap.saaj; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; import org.springframework.ws.soap.SoapEnvelope; import org.springframework.ws.soap.soap12.AbstractSoap12EnvelopeTestCase; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12HeaderTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12HeaderTest.java index bcd93846..87dd3bf2 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12HeaderTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12HeaderTest.java @@ -16,9 +16,9 @@ package org.springframework.ws.soap.saaj; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; import org.springframework.ws.soap.SoapHeader; import org.springframework.ws.soap.soap12.AbstractSoap12HeaderTestCase; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12MessageFactoryTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12MessageFactoryTest.java index 029628e4..41ce444e 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12MessageFactoryTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12MessageFactoryTest.java @@ -16,8 +16,8 @@ package org.springframework.ws.soap.saaj; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; import org.springframework.ws.WebServiceMessageFactory; import org.springframework.ws.soap.soap12.AbstractSoap12MessageFactoryTestCase; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12MessageTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12MessageTest.java index 9e22feb5..a21db2fc 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12MessageTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/SaajSoap12MessageTest.java @@ -18,9 +18,10 @@ package org.springframework.ws.soap.saaj; import static org.assertj.core.api.Assertions.*; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; + import javax.xml.transform.Result; import javax.xml.transform.Source; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajContentHandlerTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajContentHandlerTest.java index 39f26a2c..522cbf96 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajContentHandlerTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajContentHandlerTest.java @@ -18,14 +18,15 @@ package org.springframework.ws.soap.saaj.support; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.Name; +import jakarta.xml.soap.SOAPBodyElement; +import jakarta.xml.soap.SOAPElement; +import jakarta.xml.soap.SOAPEnvelope; +import jakarta.xml.soap.SOAPMessage; + import java.util.Iterator; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.Name; -import javax.xml.soap.SOAPBodyElement; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPMessage; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajUtilsTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajUtilsTest.java index 385a40fd..b87d3972 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajUtilsTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajUtilsTest.java @@ -18,17 +18,18 @@ package org.springframework.ws.soap.saaj.support; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.Name; +import jakarta.xml.soap.SOAPEnvelope; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPMessage; + import java.io.InputStream; import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.Name; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajXmlReaderTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajXmlReaderTest.java index 3014a69e..33f1c2fc 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajXmlReaderTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/saaj/support/SaajXmlReaderTest.java @@ -18,9 +18,10 @@ package org.springframework.ws.soap.saaj.support; import static org.xmlunit.assertj.XmlAssert.*; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPMessage; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPEnvelope; +import jakarta.xml.soap.SOAPMessage; + import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.dom.DOMResult; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/SoapMessageDispatcherTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/SoapMessageDispatcherTest.java index 81bbd7cd..48745264 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/SoapMessageDispatcherTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/SoapMessageDispatcherTest.java @@ -19,14 +19,15 @@ package org.springframework.ws.soap.server; import static org.assertj.core.api.Assertions.*; import static org.easymock.EasyMock.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPHeaderElement; +import jakarta.xml.soap.SOAPMessage; + import java.util.Iterator; import java.util.Locale; import javax.xml.namespace.QName; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPHeaderElement; -import javax.xml.soap.SOAPMessage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/FaultCreatingValidatingMarshallingPayloadEndpointTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/FaultCreatingValidatingMarshallingPayloadEndpointTest.java index 5d16d2d7..9fa95c70 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/FaultCreatingValidatingMarshallingPayloadEndpointTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/FaultCreatingValidatingMarshallingPayloadEndpointTest.java @@ -18,15 +18,16 @@ package org.springframework.ws.soap.server.endpoint; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.Detail; +import jakarta.xml.soap.DetailEntry; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPFault; +import jakarta.xml.soap.SOAPMessage; + import java.io.IOException; import java.util.Iterator; import javax.xml.namespace.QName; -import javax.xml.soap.Detail; -import javax.xml.soap.DetailEntry; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPFault; -import javax.xml.soap.SOAPMessage; import javax.xml.transform.Result; import javax.xml.transform.Source; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/SoapFaultAnnotationExceptionResolverTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/SoapFaultAnnotationExceptionResolverTest.java index adc43359..39ec5d9d 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/SoapFaultAnnotationExceptionResolverTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/SoapFaultAnnotationExceptionResolverTest.java @@ -18,12 +18,13 @@ package org.springframework.ws.soap.server.endpoint; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; + import java.util.Locale; import javax.xml.namespace.QName; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/SoapFaultMappingExceptionResolverTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/SoapFaultMappingExceptionResolverTest.java index 81b1575c..ad28ebe6 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/SoapFaultMappingExceptionResolverTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/SoapFaultMappingExceptionResolverTest.java @@ -18,14 +18,14 @@ package org.springframework.ws.soap.server.endpoint; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; + import java.io.IOException; import java.util.Locale; import java.util.Properties; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.ws.context.DefaultMessageContext; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/interceptor/PayloadValidatingInterceptorTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/interceptor/PayloadValidatingInterceptorTest.java index 0ba68bba..7efb6782 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/interceptor/PayloadValidatingInterceptorTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/interceptor/PayloadValidatingInterceptorTest.java @@ -18,43 +18,36 @@ package org.springframework.ws.soap.server.endpoint.interceptor; import static org.assertj.core.api.Assertions.*; -import java.io.ByteArrayOutputStream; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; + import java.io.InputStream; import java.util.Locale; import javax.xml.XMLConstants; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.stream.StreamSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; import org.springframework.ws.MockWebServiceMessage; import org.springframework.ws.MockWebServiceMessageFactory; -import org.springframework.ws.WebServiceMessage; import org.springframework.ws.context.DefaultMessageContext; import org.springframework.ws.context.MessageContext; import org.springframework.ws.soap.SoapMessage; import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; import org.springframework.ws.soap.saaj.SaajSoapMessage; import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; import org.springframework.ws.soap.saaj.support.SaajUtils; import org.springframework.ws.soap.soap11.Soap11Fault; import org.springframework.ws.soap.soap12.Soap12Fault; -import org.springframework.ws.transport.MockTransportInputStream; -import org.springframework.ws.transport.TransportInputStream; import org.springframework.xml.transform.TransformerFactoryUtils; import org.springframework.xml.validation.ValidationErrorHandler; import org.springframework.xml.xsd.SimpleXsdSchema; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; -import org.xml.sax.helpers.LocatorImpl; -import org.xmlunit.assertj.XmlAssert; public class PayloadValidatingInterceptorTest { @@ -319,30 +312,6 @@ public class PayloadValidatingInterceptorTest { assertThat(result).isTrue(); } - @Test - public void testCreateRequestValidationFaultAxiom() throws Exception { - - LocatorImpl locator = new LocatorImpl(); - locator.setLineNumber(0); - locator.setColumnNumber(0); - SAXParseException[] exceptions = new SAXParseException[] { new SAXParseException("Message 1", locator), - new SAXParseException("Message 2", locator), }; - MessageContext messageContext = new DefaultMessageContext(new AxiomSoapMessageFactory()); - interceptor.handleRequestValidationErrors(messageContext, exceptions); - ByteArrayOutputStream os = new ByteArrayOutputStream(); - messageContext.getResponse().writeTo(os); - - XmlAssert.assertThat(os.toString()) - .and("" + "" - + "" + "" + "soapenv:Client" - + "Validation error" + "" - + "Message 1" - + "Message 2" - + "" + "" + "" + "") - .ignoreWhitespace().areIdentical(); - - } - @Test public void testXsdSchema() throws Exception { @@ -362,46 +331,6 @@ public class PayloadValidatingInterceptorTest { assertThat(context.hasResponse()).isFalse(); } - @Test - public void testAxiom() throws Exception { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(true); - messageFactory.afterPropertiesSet(); - - PayloadValidatingInterceptor interceptor = new PayloadValidatingInterceptor(); - interceptor.setSchema(new ClassPathResource("codexws.xsd", getClass())); - interceptor.afterPropertiesSet(); - - Resource resource = new ClassPathResource("axiom.xml", getClass()); - TransportInputStream tis = new MockTransportInputStream(resource.getInputStream()); - WebServiceMessage message = messageFactory.createWebServiceMessage(tis); - MessageContext context = new DefaultMessageContext(message, messageFactory); - boolean result = interceptor.handleRequest(context, null); - - assertThat(result).isTrue(); - } - - @Test - public void testMultipleNamespacesAxiom() throws Exception { - - AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory(); - messageFactory.setPayloadCaching(true); - messageFactory.afterPropertiesSet(); - - PayloadValidatingInterceptor interceptor = new PayloadValidatingInterceptor(); - interceptor.setSchema(new ClassPathResource("multipleNamespaces.xsd", getClass())); - interceptor.afterPropertiesSet(); - - Resource resource = new ClassPathResource("multipleNamespaces.xml", getClass()); - TransportInputStream tis = new MockTransportInputStream(resource.getInputStream()); - WebServiceMessage message = messageFactory.createWebServiceMessage(tis); - MessageContext context = new DefaultMessageContext(message, messageFactory); - boolean result = interceptor.handleRequest(context, null); - - assertThat(result).isTrue(); - } - @Test public void customErrorHandler() throws Exception { diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/mapping/SoapActionEndpointMappingTest.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/mapping/SoapActionEndpointMappingTest.java index bd4cb8fd..241b0a66 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/mapping/SoapActionEndpointMappingTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/server/endpoint/mapping/SoapActionEndpointMappingTest.java @@ -18,7 +18,7 @@ package org.springframework.ws.soap.server.endpoint.mapping; import static org.assertj.core.api.Assertions.*; -import javax.xml.soap.MessageFactory; +import jakarta.xml.soap.MessageFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpSenderConnectionTest.java b/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpSenderConnectionTest.java index f0b545ba..d0a42d29 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpSenderConnectionTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpSenderConnectionTest.java @@ -17,7 +17,7 @@ package org.springframework.ws.transport.http; import static org.assertj.core.api.Assertions.*; -import static org.easymock.EasyMock.*; +import static org.mockito.Mockito.*; import java.io.ByteArrayInputStream; import java.io.InputStream; @@ -26,8 +26,8 @@ import java.util.Random; import org.apache.commons.io.IOUtils; import org.apache.commons.io.input.CountingInputStream; -import org.easymock.Capture; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; import org.springframework.ws.WebServiceMessage; import org.springframework.ws.WebServiceMessageFactory; @@ -49,20 +49,19 @@ public class AbstractHttpSenderConnectionTest { new Random().nextBytes(content); CountingInputStream rawInputStream = new CountingInputStream(new ByteArrayInputStream(content)); - AbstractHttpSenderConnection connection = createNiceMock(AbstractHttpSenderConnection.class); - expect(connection.getResponseCode()).andReturn(200); + AbstractHttpSenderConnection connection = spy(AbstractHttpSenderConnection.class); + when(connection.getResponseCode()).thenReturn(200); // Simulate response with chunking enabled - expect(connection.getResponseContentLength()).andReturn(chunking ? -1L : content.length); - expect(connection.getRawResponseInputStream()).andReturn(rawInputStream); - expect(connection.getResponseHeaders(anyObject())).andReturn(Collections.emptyIterator()); + when(connection.getResponseContentLength()).thenReturn(chunking ? -1L : content.length); + when(connection.getRawResponseInputStream()).thenReturn(rawInputStream); + when(connection.getResponseHeaders(any())).thenReturn(Collections.emptyIterator()); // Create a mock message factory to capture the InputStream passed to it - WebServiceMessageFactory messageFactory = createNiceMock(WebServiceMessageFactory.class); - WebServiceMessage message = createNiceMock(WebServiceMessage.class); - Capture inputStreamCapture = new Capture<>(); - expect(messageFactory.createWebServiceMessage(capture(inputStreamCapture))).andReturn(message); + WebServiceMessageFactory messageFactory = spy(WebServiceMessageFactory.class); + WebServiceMessage message = spy(WebServiceMessage.class); - replay(connection, messageFactory, message); + ArgumentCaptor inputStreamCapture = ArgumentCaptor.forClass(InputStream.class); + when(messageFactory.createWebServiceMessage(inputStreamCapture.capture())).thenReturn(message); connection.receive(messageFactory); diff --git a/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java b/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java index d8b40a68..62ba1e87 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderIntegrationTestCase.java @@ -18,32 +18,35 @@ package org.springframework.ws.transport.http; import static org.assertj.core.api.Assertions.*; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPException; +import jakarta.xml.soap.SOAPMessage; + import java.io.OutputStream; import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.zip.GZIPOutputStream; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mortbay.jetty.Server; -import org.mortbay.jetty.servlet.Context; -import org.mortbay.jetty.servlet.ServletHolder; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.FileCopyUtils; import org.springframework.ws.WebServiceMessage; @@ -80,7 +83,7 @@ public abstract class AbstractHttpWebServiceMessageSenderIntegrationTestCase"; - private Context jettyContext; + private ServletContextHandler jettyContext; private MessageFactory saajMessageFactory; @@ -97,8 +100,14 @@ public abstract class AbstractHttpWebServiceMessageSenderIntegrationTestCase + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-ws-security/pom.xml b/spring-ws-security/pom.xml index 486f8f91..b995e88e 100644 --- a/spring-ws-security/pom.xml +++ b/spring-ws-security/pom.xml @@ -2,266 +2,182 @@ - 4.0.0 + 4.0.0 - - org.springframework.ws - spring-ws - 4.0.0-SNAPSHOT - + + org.springframework.ws + spring-ws + 4.0.0-SNAPSHOT + - spring-ws-security - jar + spring-ws-security + jar - Spring WS Security + Spring WS Security - + - - org.springframework.ws - spring-xml - ${project.parent.version} - - - org.springframework.ws - spring-ws-core - ${project.parent.version} - + + org.springframework.ws + spring-xml + ${project.parent.version} + + + org.springframework.ws + spring-ws-core + ${project.parent.version} + - - - org.springframework - spring-beans - - - org.springframework - spring-tx - - - org.springframework - spring-test - test - + + + org.springframework + spring-beans + + + org.springframework + spring-tx + + + org.springframework + spring-test + test + - - - org.springframework.security - spring-security-core - - - net.sf.ehcache - ehcache - ${ehcache.version} - - - org.slf4j - slf4j-api - - - + + + org.springframework.security + spring-security-core + + + net.sf.ehcache + ehcache + ${ehcache.version} + + + org.slf4j + slf4j-api + + + - - - com.sun.xml.wss - xws-security - ${xws-security.version} - true - - - javax.xml.crypto - xmldsig - - - javax.xml.bind - jaxb-api - - - javax.xml.stream - stax-api - - - javax.xml.ws - jaxws-api - - - javax.mail - mail - - - + + org.apache.wss4j + wss4j-ws-security-dom + ${wss4j.version} + + + org.codehaus.woodstox + wstx-asl + + + org.codehaus.woodstox + woodstox-core-asl + + + org.apache.santuario + xmlsec + + + org.slf4j + slf4j-api + + + commons-codec + commons-codec + + + org.cryptacular + cryptacular + + + jakarta.xml.bind + jakarta.xml.bind-api + + + org.glassfish.jaxb + jaxb-runtime + + + - - javax.xml.ws - jaxws-api - 2.3.0 - provided - + + org.slf4j + slf4j-api + ${slf4j.version} + - - javax.mail - mail - ${mail.version} - provided - + + org.apache.santuario + xmlsec + ${xmlsec.version} + + + org.slf4j + slf4j-api + + + org.codehaus.woodstox + woodstox-core-asl + + + jakarta.xml.bind + jakarta.xml.bind-api + + + - - org.apache.wss4j - wss4j-ws-security-dom - ${wss4j.version} - - - org.codehaus.woodstox - wstx-asl - - - org.codehaus.woodstox - woodstox-core-asl - - - org.apache.santuario - xmlsec - - - org.slf4j - slf4j-api - - - commons-codec - commons-codec - - - org.cryptacular - cryptacular - - - jakarta.xml.bind - jakarta.xml.bind-api - - - org.glassfish.jaxb - jaxb-runtime - - - + + + com.sun.xml.messaging.saaj + saaj-impl + ${saaj-impl.version} + provided + + + jakarta.xml.soap + jakarta.xml.soap-api + + + org.jvnet.staxex + stax-ex + + + - - org.slf4j - slf4j-api - ${slf4j.version} - + + org.jvnet.staxex + stax-ex + ${stax.version} + - - org.apache.santuario - xmlsec - ${xmlsec.version} - - - org.slf4j - slf4j-api - - - org.codehaus.woodstox - woodstox-core-asl - - - jakarta.xml.bind - jakarta.xml.bind-api - - - + - - - com.sun.xml.messaging.saaj - saaj-impl - ${saaj-impl.version} - provided - - - javax.xml.soap - javax.xml.soap-api - - - org.jvnet.staxex - stax-ex - - - + + + docs - - org.jvnet.staxex - stax-ex - ${stax.version} - + + + + org.apache.maven.plugins + maven-assembly-plugin + + + docs + + single + + package + + true + + + + + + - - javax.xml.soap - javax.xml.soap-api - ${soap-api.version} - provided - + + - - org.apache.ws.commons.axiom - axiom-api - ${axiom.version} - true - - - commons-logging - commons-logging - - - - - org.apache.ws.commons.axiom - axiom-impl - ${axiom.version} - true - - - org.codehaus.woodstox - wstx-asl - - - org.codehaus.woodstox - woodstox-core-asl - - - commons-logging - commons-logging - - - - - - - - - docs - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - docs - - single - - package - - true - - - - - - - - - - - \ No newline at end of file + diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecurityFaultException.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecurityFaultException.java deleted file mode 100644 index b353683e..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecurityFaultException.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss; - -import javax.xml.namespace.QName; - -import org.springframework.ws.soap.security.WsSecurityFaultException; - -/** - * XWSS-specific version of the {@link WsSecurityFaultException}. - * - * @author Arjen Poutsma - * @since 1.0.1 - */ -@SuppressWarnings("serial") -public class XwsSecurityFaultException extends WsSecurityFaultException { - - public XwsSecurityFaultException(QName faultCode, String faultString, String faultActor) { - super(faultCode, faultString, faultActor); - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecurityInterceptor.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecurityInterceptor.java deleted file mode 100644 index 9f49aee7..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecurityInterceptor.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss; - -import java.io.IOException; -import java.io.InputStream; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.UnsupportedCallbackException; -import javax.xml.soap.SOAPMessage; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.core.io.Resource; -import org.springframework.util.Assert; -import org.springframework.ws.context.MessageContext; -import org.springframework.ws.soap.SoapMessage; -import org.springframework.ws.soap.saaj.SaajSoapMessage; -import org.springframework.ws.soap.security.AbstractWsSecurityInterceptor; -import org.springframework.ws.soap.security.WsSecurityValidationException; -import org.springframework.ws.soap.security.callback.CleanupCallback; -import org.springframework.ws.soap.security.xwss.callback.XwssCallbackHandlerChain; - -import com.sun.xml.wss.ProcessingContext; -import com.sun.xml.wss.XWSSProcessor; -import com.sun.xml.wss.XWSSProcessorFactory; -import com.sun.xml.wss.XWSSecurityException; -import com.sun.xml.wss.impl.WssSoapFaultException; - -/** - * WS-Security endpoint interceptor that is based on Sun's XML and Web Services Security package (XWSS). This - * WS-Security implementation is part of the Java Web Services Developer Pack (Java WSDP). - *

- * This interceptor needs a {@code CallbackHandler} to operate. This handler is used to retrieve certificates, private - * keys, validate user credentials, etc. Refer to the XWSS Javadoc to learn more about the specific {@code Callback}s - * fired by XWSS. You can also set multiple handlers, each of which will be used in turn. - *

- * Additionally, you must define a XWSS policy file by setting {@code policyConfiguration} property. The format of the - * policy file is documented in the - * Java Web Services - * Tutorial. - *

- * Note that this interceptor depends on SAAJ, and thus requires {@code SaajSoapMessage}s to operate. This means - * that you must use a {@code SaajSoapMessageFactory} to create the SOAP messages. - * - * @author Arjen Poutsma - * @see #setCallbackHandler(javax.security.auth.callback.CallbackHandler) - * @see #setPolicyConfiguration(org.springframework.core.io.Resource) - * @see com.sun.xml.wss.impl.callback.XWSSCallback - * @see org.springframework.ws.soap.saaj.SaajSoapMessageFactory - * @see XWSS - * @since 1.0.0 - */ -public class XwsSecurityInterceptor extends AbstractWsSecurityInterceptor implements InitializingBean { - - private XWSSProcessor processor; - - private CallbackHandler callbackHandler; - - private Resource policyConfiguration; - - /** - * Sets the handler to resolve XWSS callbacks. Setting either this propery, or {@code callbackHandlers}, is required. - * - * @see com.sun.xml.wss.impl.callback.XWSSCallback - * @see #setCallbackHandlers(javax.security.auth.callback.CallbackHandler[]) - */ - public void setCallbackHandler(CallbackHandler callbackHandler) { - this.callbackHandler = callbackHandler; - } - - /** - * Sets the handlers to resolve XWSS callbacks. Setting either this propery, or {@code callbackHandlers}, is required. - * - * @see com.sun.xml.wss.impl.callback.XWSSCallback - * @see #setCallbackHandler(javax.security.auth.callback.CallbackHandler) - */ - public void setCallbackHandlers(CallbackHandler[] callbackHandler) { - this.callbackHandler = new XwssCallbackHandlerChain(callbackHandler); - } - - /** Sets the policy configuration to use for XWSS. Required. */ - public void setPolicyConfiguration(Resource policyConfiguration) { - this.policyConfiguration = policyConfiguration; - } - - @Override - public void afterPropertiesSet() throws Exception { - Assert.notNull(policyConfiguration, "policyConfiguration is required"); - Assert.isTrue(policyConfiguration.exists(), "policyConfiguration [" + policyConfiguration + "] does not exist"); - Assert.notNull(callbackHandler, "callbackHandler is required"); - XWSSProcessorFactory processorFactory = XWSSProcessorFactory.newInstance(); - InputStream is = null; - try { - if (logger.isInfoEnabled()) { - logger.info("Loading policy configuration from from '" + policyConfiguration + "'"); - } - is = policyConfiguration.getInputStream(); - processor = processorFactory.createProcessorForSecurityConfiguration(is, callbackHandler); - } finally { - if (is != null) { - is.close(); - } - } - } - - /** - * Secures the given SoapMessage message in accordance with the defined security policy. - * - * @param soapMessage the message to be secured - * @throws XwsSecuritySecurementException in case of errors - * @throws IllegalArgumentException when soapMessage is not a {@code SaajSoapMessage} - */ - @Override - protected void secureMessage(SoapMessage soapMessage, MessageContext messageContext) - throws XwsSecuritySecurementException { - Assert.isTrue(soapMessage instanceof SaajSoapMessage, "XwsSecurityInterceptor requires a SaajSoapMessage. " - + "Use a SaajSoapMessageFactory to create the SOAP messages."); - SaajSoapMessage saajSoapMessage = (SaajSoapMessage) soapMessage; - try { - ProcessingContext context = processor.createProcessingContext(saajSoapMessage.getSaajMessage()); - SOAPMessage result = processor.secureOutboundMessage(context); - saajSoapMessage.setSaajMessage(result); - } catch (XWSSecurityException ex) { - throw new XwsSecuritySecurementException(ex.getMessage(), ex); - } catch (WssSoapFaultException ex) { - throw new XwsSecurityFaultException(ex.getFaultCode(), ex.getFaultString(), ex.getFaultActor()); - } - } - - /** - * Validates the given SoapMessage message in accordance with the defined security policy. - * - * @param soapMessage the message to be validated - * @throws XwsSecurityValidationException in case of errors - * @throws IllegalArgumentException when soapMessage is not a {@code SaajSoapMessage} - */ - @Override - protected void validateMessage(SoapMessage soapMessage, MessageContext messageContext) - throws WsSecurityValidationException { - Assert.isTrue(soapMessage instanceof SaajSoapMessage, "XwsSecurityInterceptor requires a SaajSoapMessage. " - + "Use a SaajSoapMessageFactory to create the SOAP messages."); - SaajSoapMessage saajSoapMessage = (SaajSoapMessage) soapMessage; - try { - ProcessingContext context = processor.createProcessingContext(saajSoapMessage.getSaajMessage()); - SOAPMessage result = processor.verifyInboundMessage(context); - saajSoapMessage.setSaajMessage(result); - } catch (XWSSecurityException ex) { - throw new XwsSecurityValidationException(ex.getMessage(), ex); - } catch (WssSoapFaultException ex) { - throw new XwsSecurityFaultException(ex.getFaultCode(), ex.getFaultString(), ex.getFaultActor()); - } - } - - @Override - protected void cleanUp() { - if (callbackHandler != null) { - try { - CleanupCallback cleanupCallback = new CleanupCallback(); - callbackHandler.handle(new Callback[] { cleanupCallback }); - } catch (IOException ex) { - logger.warn("Cleanup callback resulted in IOException", ex); - } catch (UnsupportedCallbackException ex) { - // ignore - } - } - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecuritySecurementException.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecuritySecurementException.java deleted file mode 100644 index 17cff75c..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecuritySecurementException.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss; - -import org.springframework.ws.soap.security.WsSecuritySecurementException; - -/** - * XWSS-specific version of the {@link WsSecuritySecurementException}. - * - * @author Arjen Poutsma - * @since 1.0.0 - */ -@SuppressWarnings("serial") -public class XwsSecuritySecurementException extends WsSecuritySecurementException { - - public XwsSecuritySecurementException(String msg) { - super(msg); - } - - public XwsSecuritySecurementException(String msg, Throwable ex) { - super(msg, ex); - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecurityValidationException.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecurityValidationException.java deleted file mode 100644 index 14de61f0..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/XwsSecurityValidationException.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss; - -import org.springframework.ws.soap.security.WsSecurityValidationException; - -/** - * XWSS-specific version of the {@link WsSecurityValidationException}. - * - * @author Arjen Poutsma - * @since 1.0.0 - */ -@SuppressWarnings("serial") -public class XwsSecurityValidationException extends WsSecurityValidationException { - - public XwsSecurityValidationException(String msg) { - super(msg); - } - - public XwsSecurityValidationException(String msg, Throwable ex) { - super(msg, ex); - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/CryptographyCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/CryptographyCallbackHandler.java deleted file mode 100644 index 56085115..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/CryptographyCallbackHandler.java +++ /dev/null @@ -1,436 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss.callback; - -import java.io.IOException; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.UnsupportedCallbackException; - -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; - -import com.sun.xml.wss.impl.callback.CertificateValidationCallback; -import com.sun.xml.wss.impl.callback.DecryptionKeyCallback; -import com.sun.xml.wss.impl.callback.EncryptionKeyCallback; -import com.sun.xml.wss.impl.callback.SignatureKeyCallback; -import com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback; - -/** - * Default callback handler that handles cryptographic callback. This handler determines the exact callback passed, and - * calls a template method for it. By default, all template methods throw an {@code UnsupportedCallbackException}, so - * you only need to override those you need. - * - * @author Arjen Poutsma - * @since 1.0.0 - */ -public class CryptographyCallbackHandler extends AbstractCallbackHandler { - - @Override - protected final void handleInternal(Callback callback) throws IOException, UnsupportedCallbackException { - if (callback instanceof CertificateValidationCallback) { - handleCertificateValidationCallback((CertificateValidationCallback) callback); - } else if (callback instanceof DecryptionKeyCallback) { - handleDecryptionKeyCallback((DecryptionKeyCallback) callback); - } else if (callback instanceof EncryptionKeyCallback) { - handleEncryptionKeyCallback((EncryptionKeyCallback) callback); - } else if (callback instanceof SignatureKeyCallback) { - handleSignatureKeyCallback((SignatureKeyCallback) callback); - } else if (callback instanceof SignatureVerificationKeyCallback) { - handleSignatureVerificationKeyCallback((SignatureVerificationKeyCallback) callback); - } else { - throw new UnsupportedCallbackException(callback); - } - - } - - // - // Certificate validation - // - - /** - * Template method that handles {@code CertificateValidationCallback}s. Called from {@code handleInternal()}. Default - * implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handleCertificateValidationCallback(CertificateValidationCallback callback) - throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - // - // Decryption - // - - /** - * Method that handles {@code DecryptionKeyCallback}s. Called from {@code handleInternal()}. Default implementation - * delegates to specific handling methods. - * - * @see #handlePrivateKeyRequest(com.sun.xml.wss.impl.callback.DecryptionKeyCallback, - * com.sun.xml.wss.impl.callback.DecryptionKeyCallback.PrivateKeyRequest) - * @see #handleSymmetricKeyRequest(com.sun.xml.wss.impl.callback.DecryptionKeyCallback, - * com.sun.xml.wss.impl.callback.DecryptionKeyCallback.SymmetricKeyRequest) - */ - protected final void handleDecryptionKeyCallback(DecryptionKeyCallback callback) - throws IOException, UnsupportedCallbackException { - if (callback.getRequest() instanceof DecryptionKeyCallback.PrivateKeyRequest) { - handlePrivateKeyRequest(callback, (DecryptionKeyCallback.PrivateKeyRequest) callback.getRequest()); - } else if (callback.getRequest() instanceof DecryptionKeyCallback.SymmetricKeyRequest) { - handleSymmetricKeyRequest(callback, (DecryptionKeyCallback.SymmetricKeyRequest) callback.getRequest()); - } else { - throw new UnsupportedCallbackException(callback); - } - } - - /** - * Method that handles {@code DecryptionKeyCallback}s with {@code PrivateKeyRequest} . Called from - * {@code handleDecryptionKeyCallback()}. Default implementation delegates to specific handling methods. - * - * @see #handlePublicKeyBasedPrivKeyCertRequest(com.sun.xml.wss.impl.callback.SignatureKeyCallback, - * com.sun.xml.wss.impl.callback.SignatureKeyCallback.PublicKeyBasedPrivKeyCertRequest) - * @see #handleX509CertificateBasedRequest(com.sun.xml.wss.impl.callback.DecryptionKeyCallback, - * com.sun.xml.wss.impl.callback.DecryptionKeyCallback.X509CertificateBasedRequest) - * @see #handleX509IssuerSerialBasedRequest(com.sun.xml.wss.impl.callback.DecryptionKeyCallback, - * com.sun.xml.wss.impl.callback.DecryptionKeyCallback.X509IssuerSerialBasedRequest) - * @see #handleX509SubjectKeyIdentifierBasedRequest(com.sun.xml.wss.impl.callback.DecryptionKeyCallback, - * com.sun.xml.wss.impl.callback.DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest) - */ - protected final void handlePrivateKeyRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.PrivateKeyRequest request) throws IOException, UnsupportedCallbackException { - if (request instanceof DecryptionKeyCallback.PublicKeyBasedPrivKeyRequest) { - handlePublicKeyBasedPrivKeyRequest(callback, (DecryptionKeyCallback.PublicKeyBasedPrivKeyRequest) request); - } else if (request instanceof DecryptionKeyCallback.X509CertificateBasedRequest) { - handleX509CertificateBasedRequest(callback, (DecryptionKeyCallback.X509CertificateBasedRequest) request); - } else if (request instanceof DecryptionKeyCallback.X509IssuerSerialBasedRequest) { - handleX509IssuerSerialBasedRequest(callback, (DecryptionKeyCallback.X509IssuerSerialBasedRequest) request); - } else if (request instanceof DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest) { - handleX509SubjectKeyIdentifierBasedRequest(callback, - (DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest) request); - } else { - throw new UnsupportedCallbackException(callback); - } - } - - /** - * Template method that handles {@code DecryptionKeyCallback}s with {@code PublicKeyBasedPrivKeyRequest}s. Called from - * {@code handlePrivateKeyRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handlePublicKeyBasedPrivKeyRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.PublicKeyBasedPrivKeyRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - /** - * Template method that handles {@code DecryptionKeyCallback}s with {@code X509CertificateBasedRequest}s. Called from - * {@code handlePrivateKeyRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handleX509CertificateBasedRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.X509CertificateBasedRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - /** - * Template method that handles {@code DecryptionKeyCallback}s with {@code X509IssuerSerialBasedRequest}s. Called from - * {@code handlePrivateKeyRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handleX509IssuerSerialBasedRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.X509IssuerSerialBasedRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - /** - * Template method that handles {@code DecryptionKeyCallback}s with {@code X509SubjectKeyIdentifierBasedRequest}s. - * Called from {@code handlePrivateKeyRequest()}. Default implementation throws an - * {@code UnsupportedCallbackException}. - */ - protected void handleX509SubjectKeyIdentifierBasedRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest request) - throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - /** - * Method that handles {@code DecryptionKeyCallback}s with {@code SymmetricKeyRequest} . Called from - * {@code handleDecryptionKeyCallback()}. Default implementation delegates to specific handling methods. - * - * @see #handleAliasSymmetricKeyRequest(com.sun.xml.wss.impl.callback.DecryptionKeyCallback, - * com.sun.xml.wss.impl.callback.DecryptionKeyCallback.AliasSymmetricKeyRequest) - */ - protected final void handleSymmetricKeyRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.SymmetricKeyRequest request) throws IOException, UnsupportedCallbackException { - if (request instanceof DecryptionKeyCallback.AliasSymmetricKeyRequest) { - DecryptionKeyCallback.AliasSymmetricKeyRequest aliasSymmetricKeyRequest = (DecryptionKeyCallback.AliasSymmetricKeyRequest) request; - handleAliasSymmetricKeyRequest(callback, aliasSymmetricKeyRequest); - } else { - throw new UnsupportedCallbackException(callback); - } - } - - /** - * Template method that handles {@code DecryptionKeyCallback}s with {@code AliasSymmetricKeyRequest}s. Called from - * {@code handleSymmetricKeyRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handleAliasSymmetricKeyRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.AliasSymmetricKeyRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - // - // Encryption - // - - /** - * Method that handles {@code EncryptionKeyCallback}s. Called from {@code handleInternal()}. Default implementation - * delegates to specific handling methods. - * - * @see #handleSymmetricKeyRequest(com.sun.xml.wss.impl.callback.EncryptionKeyCallback, - * com.sun.xml.wss.impl.callback.EncryptionKeyCallback.SymmetricKeyRequest) - * @see #handleX509CertificateRequest(com.sun.xml.wss.impl.callback.EncryptionKeyCallback, - * com.sun.xml.wss.impl.callback.EncryptionKeyCallback.X509CertificateRequest) - */ - protected final void handleEncryptionKeyCallback(EncryptionKeyCallback callback) - throws IOException, UnsupportedCallbackException { - if (callback.getRequest() instanceof EncryptionKeyCallback.SymmetricKeyRequest) { - handleSymmetricKeyRequest(callback, (EncryptionKeyCallback.SymmetricKeyRequest) callback.getRequest()); - } else if (callback.getRequest() instanceof EncryptionKeyCallback.X509CertificateRequest) { - handleX509CertificateRequest(callback, (EncryptionKeyCallback.X509CertificateRequest) callback.getRequest()); - } else { - throw new UnsupportedCallbackException(callback); - - } - } - - /** - * Method that handles {@code EncryptionKeyCallback}s with {@code SymmetricKeyRequest} . Called from - * {@code handleEncryptionKeyCallback()}. Default implementation delegates to specific handling methods. - * - * @see #handleAliasSymmetricKeyRequest(com.sun.xml.wss.impl.callback.EncryptionKeyCallback, - * com.sun.xml.wss.impl.callback.EncryptionKeyCallback.AliasSymmetricKeyRequest) - */ - protected final void handleSymmetricKeyRequest(EncryptionKeyCallback callback, - EncryptionKeyCallback.SymmetricKeyRequest request) throws IOException, UnsupportedCallbackException { - if (request instanceof EncryptionKeyCallback.AliasSymmetricKeyRequest) { - handleAliasSymmetricKeyRequest(callback, (EncryptionKeyCallback.AliasSymmetricKeyRequest) request); - } - } - - /** - * Template method that handles {@code EncryptionKeyCallback}s with {@code AliasSymmetricKeyRequest}s. Called from - * {@code handleSymmetricKeyRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handleAliasSymmetricKeyRequest(EncryptionKeyCallback callback, - EncryptionKeyCallback.AliasSymmetricKeyRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - /** - * Method that handles {@code EncryptionKeyCallback}s with {@code X509CertificateRequest} . Called from - * {@code handleEncryptionKeyCallback()}. Default implementation delegates to specific handling methods. - * - * @see #handleAliasX509CertificateRequest(com.sun.xml.wss.impl.callback.EncryptionKeyCallback, - * com.sun.xml.wss.impl.callback.EncryptionKeyCallback.AliasX509CertificateRequest) - * @see #handleDefaultX509CertificateRequest(com.sun.xml.wss.impl.callback.EncryptionKeyCallback, - * com.sun.xml.wss.impl.callback.EncryptionKeyCallback.DefaultX509CertificateRequest) - * @see #handlePublicKeyBasedRequest(com.sun.xml.wss.impl.callback.EncryptionKeyCallback, - * com.sun.xml.wss.impl.callback.EncryptionKeyCallback.PublicKeyBasedRequest) - */ - protected final void handleX509CertificateRequest(EncryptionKeyCallback callback, - EncryptionKeyCallback.X509CertificateRequest request) throws IOException, UnsupportedCallbackException { - if (request instanceof EncryptionKeyCallback.AliasX509CertificateRequest) { - handleAliasX509CertificateRequest(callback, (EncryptionKeyCallback.AliasX509CertificateRequest) request); - } else if (request instanceof EncryptionKeyCallback.DefaultX509CertificateRequest) { - handleDefaultX509CertificateRequest(callback, (EncryptionKeyCallback.DefaultX509CertificateRequest) request); - } else if (request instanceof EncryptionKeyCallback.PublicKeyBasedRequest) { - handlePublicKeyBasedRequest(callback, (EncryptionKeyCallback.PublicKeyBasedRequest) request); - } else { - throw new UnsupportedCallbackException(callback); - } - } - - /** - * Template method that handles {@code EncryptionKeyCallback}s with {@code AliasX509CertificateRequest}s. Called from - * {@code handleX509CertificateRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handleAliasX509CertificateRequest(EncryptionKeyCallback callback, - EncryptionKeyCallback.AliasX509CertificateRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - /** - * Template method that handles {@code EncryptionKeyCallback}s with {@code DefaultX509CertificateRequest}s. Called - * from {@code handleX509CertificateRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handleDefaultX509CertificateRequest(EncryptionKeyCallback callback, - EncryptionKeyCallback.DefaultX509CertificateRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - /** - * Template method that handles {@code EncryptionKeyCallback}s with {@code PublicKeyBasedRequest}s. Called from - * {@code handleX509CertificateRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handlePublicKeyBasedRequest(EncryptionKeyCallback callback, - EncryptionKeyCallback.PublicKeyBasedRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - // - // Signing - // - - /** - * Method that handles {@code SignatureKeyCallback}s. Called from {@code handleInternal()}. Default implementation - * delegates to specific handling methods. - * - * @see #handlePrivKeyCertRequest(com.sun.xml.wss.impl.callback.SignatureKeyCallback, - * com.sun.xml.wss.impl.callback.SignatureKeyCallback.PrivKeyCertRequest) - */ - protected final void handleSignatureKeyCallback(SignatureKeyCallback callback) - throws IOException, UnsupportedCallbackException { - if (callback.getRequest() instanceof SignatureKeyCallback.PrivKeyCertRequest) { - handlePrivKeyCertRequest(callback, (SignatureKeyCallback.PrivKeyCertRequest) callback.getRequest()); - } else { - throw new UnsupportedCallbackException(callback); - } - } - - /** - * Method that handles {@code SignatureKeyCallback}s with {@code PrivKeyCertRequest}s. Called from - * {@code handleSignatureKeyCallback()}. Default implementation delegates to specific handling methods. - * - * @see #handleDefaultPrivKeyCertRequest(com.sun.xml.wss.impl.callback.SignatureKeyCallback, - * com.sun.xml.wss.impl.callback.SignatureKeyCallback.DefaultPrivKeyCertRequest) - * @see #handleAliasPrivKeyCertRequest(com.sun.xml.wss.impl.callback.SignatureKeyCallback, - * com.sun.xml.wss.impl.callback.SignatureKeyCallback.AliasPrivKeyCertRequest) - * @see #handlePublicKeyBasedPrivKeyCertRequest(com.sun.xml.wss.impl.callback.SignatureKeyCallback, - * com.sun.xml.wss.impl.callback.SignatureKeyCallback.PublicKeyBasedPrivKeyCertRequest) - */ - protected final void handlePrivKeyCertRequest(SignatureKeyCallback cb, - SignatureKeyCallback.PrivKeyCertRequest request) throws IOException, UnsupportedCallbackException { - if (request instanceof SignatureKeyCallback.DefaultPrivKeyCertRequest) { - handleDefaultPrivKeyCertRequest(cb, (SignatureKeyCallback.DefaultPrivKeyCertRequest) request); - } else if (cb.getRequest() instanceof SignatureKeyCallback.AliasPrivKeyCertRequest) { - handleAliasPrivKeyCertRequest(cb, (SignatureKeyCallback.AliasPrivKeyCertRequest) request); - } else if (cb.getRequest() instanceof SignatureKeyCallback.PublicKeyBasedPrivKeyCertRequest) { - handlePublicKeyBasedPrivKeyCertRequest(cb, (SignatureKeyCallback.PublicKeyBasedPrivKeyCertRequest) request); - } else { - throw new UnsupportedCallbackException(cb); - } - } - - /** - * Template method that handles {@code SignatureKeyCallback}s with {@code DefaultPrivKeyCertRequest}s. Called from - * {@code handlePrivKeyCertRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handleDefaultPrivKeyCertRequest(SignatureKeyCallback callback, - SignatureKeyCallback.DefaultPrivKeyCertRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - /** - * Template method that handles {@code SignatureKeyCallback}s with {@code AliasPrivKeyCertRequest}s. Called from - * {@code handlePrivKeyCertRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handleAliasPrivKeyCertRequest(SignatureKeyCallback callback, - SignatureKeyCallback.AliasPrivKeyCertRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - /** - * Template method that handles {@code SignatureKeyCallback}s with {@code PublicKeyBasedPrivKeyCertRequest}s. Called - * from {@code handlePrivKeyCertRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handlePublicKeyBasedPrivKeyCertRequest(SignatureKeyCallback callback, - SignatureKeyCallback.PublicKeyBasedPrivKeyCertRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - // - // Signature verification - // - - /** - * Method that handles {@code SignatureVerificationKeyCallback}s. Called from {@code handleInternal()}. Default - * implementation delegates to specific handling methods. - * - * @see #handleX509CertificateRequest(com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback, - * com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback.X509CertificateRequest) - */ - protected final void handleSignatureVerificationKeyCallback(SignatureVerificationKeyCallback callback) - throws UnsupportedCallbackException, IOException { - if (callback.getRequest() instanceof SignatureVerificationKeyCallback.X509CertificateRequest) { - handleX509CertificateRequest(callback, - (SignatureVerificationKeyCallback.X509CertificateRequest) callback.getRequest()); - } else { - throw new UnsupportedCallbackException(callback); - } - } - - /** - * Method that handles {@code SignatureVerificationKeyCallback}s with {@code X509CertificateRequest}s. Called from - * {@code handleSignatureVerificationKeyCallback()}. Default implementation delegates to specific handling methods. - * - * @see #handlePublicKeyBasedRequest(com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback, - * com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback.PublicKeyBasedRequest) - * @see #handleX509IssuerSerialBasedRequest(com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback, - * com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest) - * @see #handleX509SubjectKeyIdentifierBasedRequest(com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback, - * com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest) - */ - protected final void handleX509CertificateRequest(SignatureVerificationKeyCallback callback, - SignatureVerificationKeyCallback.X509CertificateRequest request) - throws UnsupportedCallbackException, IOException { - if (request instanceof SignatureVerificationKeyCallback.PublicKeyBasedRequest) { - handlePublicKeyBasedRequest(callback, (SignatureVerificationKeyCallback.PublicKeyBasedRequest) request); - } else if (request instanceof SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest) { - handleX509IssuerSerialBasedRequest(callback, - (SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest) request); - } else if (request instanceof SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest) { - handleX509SubjectKeyIdentifierBasedRequest(callback, - (SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest) request); - } else { - throw new UnsupportedCallbackException(callback); - } - } - - /** - * Template method that handles {@code SignatureKeyCallback}s with {@code PublicKeyBasedPrivKeyCertRequest}s. Called - * from {@code handlePrivKeyCertRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handleX509SubjectKeyIdentifierBasedRequest(SignatureVerificationKeyCallback callback, - SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest request) - throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - /** - * Template method that handles {@code SignatureKeyCallback}s with {@code X509IssuerSerialBasedRequest}s. Called from - * {@code handlePrivKeyCertRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handleX509IssuerSerialBasedRequest(SignatureVerificationKeyCallback callback, - SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest request) - throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } - - /** - * Template method that handles {@code SignatureKeyCallback}s with {@code PublicKeyBasedRequest}s. Called from - * {@code handlePrivKeyCertRequest()}. Default implementation throws an {@code UnsupportedCallbackException}. - */ - protected void handlePublicKeyBasedRequest(SignatureVerificationKeyCallback callback, - SignatureVerificationKeyCallback.PublicKeyBasedRequest request) throws IOException, UnsupportedCallbackException { - throw new UnsupportedCallbackException(callback); - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/DefaultTimestampValidator.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/DefaultTimestampValidator.java deleted file mode 100644 index 674f7f2d..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/DefaultTimestampValidator.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; - -import com.sun.xml.wss.impl.callback.TimestampValidationCallback; - -/** - * A default implementation of a {@code TimestampValidationCallback.TimestampValidator}. Based on a version found in the - * JWSDP samples. - * - * @author Arjen Poutsma - * @since 1.0.0 - */ -public class DefaultTimestampValidator implements TimestampValidationCallback.TimestampValidator { - - @Override - public void validate(TimestampValidationCallback.Request request) - throws TimestampValidationCallback.TimestampValidationException { - if (request instanceof TimestampValidationCallback.UTCTimestampRequest) { - TimestampValidationCallback.UTCTimestampRequest utcRequest = (TimestampValidationCallback.UTCTimestampRequest) request; - Date created = parseDate(utcRequest.getCreated()); - - validateCreationTime(created, utcRequest.getMaxClockSkew(), utcRequest.getTimestampFreshnessLimit()); - - if (utcRequest.getExpired() != null) { - Date expired = parseDate(utcRequest.getExpired()); - validateExpirationTime(expired, utcRequest.getMaxClockSkew()); - } - } else { - throw new TimestampValidationCallback.TimestampValidationException("Unsupport request: [" + request + "]"); - } - } - - private Date getFreshnessAndSkewAdjustedDate(long maxClockSkew, long timestampFreshnessLimit) { - Calendar c = new GregorianCalendar(); - long offset = c.get(Calendar.ZONE_OFFSET); - if (c.getTimeZone().inDaylightTime(c.getTime())) { - offset += c.getTimeZone().getDSTSavings(); - } - long beforeTime = c.getTimeInMillis(); - long currentTime = beforeTime - offset; - - long adjustedTime = currentTime - maxClockSkew - timestampFreshnessLimit; - c.setTimeInMillis(adjustedTime); - - return c.getTime(); - } - - private Date getGMTDateWithSkewAdjusted(Calendar calendar, long maxClockSkew, boolean addSkew) { - long offset = calendar.get(Calendar.ZONE_OFFSET); - if (calendar.getTimeZone().inDaylightTime(calendar.getTime())) { - offset += calendar.getTimeZone().getDSTSavings(); - } - long beforeTime = calendar.getTimeInMillis(); - long currentTime = beforeTime - offset; - - if (addSkew) { - currentTime = currentTime + maxClockSkew; - } else { - currentTime = currentTime - maxClockSkew; - } - - calendar.setTimeInMillis(currentTime); - return calendar.getTime(); - } - - private Date parseDate(String date) throws TimestampValidationCallback.TimestampValidationException { - SimpleDateFormat calendarFormatter1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); - SimpleDateFormat calendarFormatter2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.'SSS'Z'"); - - try { - try { - return calendarFormatter1.parse(date); - } catch (ParseException ignored) { - return calendarFormatter2.parse(date); - } - } catch (ParseException ex) { - throw new TimestampValidationCallback.TimestampValidationException("Could not parse request date: " + date, ex); - } - } - - private void validateCreationTime(Date created, long maxClockSkew, long timestampFreshnessLimit) - throws TimestampValidationCallback.TimestampValidationException { - Date current = getFreshnessAndSkewAdjustedDate(maxClockSkew, timestampFreshnessLimit); - - if (created.before(current)) { - throw new TimestampValidationCallback.TimestampValidationException( - "The creation time is older than currenttime - timestamp-freshness-limit - max-clock-skew"); - } - - Date currentTime = getGMTDateWithSkewAdjusted(new GregorianCalendar(), maxClockSkew, true); - if (currentTime.before(created)) { - throw new TimestampValidationCallback.TimestampValidationException( - "The creation time is ahead of the current time."); - } - } - - private void validateExpirationTime(Date expires, long maxClockSkew) - throws TimestampValidationCallback.TimestampValidationException { - Date currentTime = getGMTDateWithSkewAdjusted(new GregorianCalendar(), maxClockSkew, false); - if (expires.before(currentTime)) { - throw new TimestampValidationCallback.TimestampValidationException( - "The current time is ahead of the expiration time in Timestamp"); - } - } - -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/KeyStoreCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/KeyStoreCallbackHandler.java deleted file mode 100644 index 609a578d..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/KeyStoreCallbackHandler.java +++ /dev/null @@ -1,727 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback; - -import java.io.IOException; -import java.math.BigInteger; -import java.security.GeneralSecurityException; -import java.security.InvalidAlgorithmParameterException; -import java.security.KeyStore; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.cert.CertPathBuilder; -import java.security.cert.CertPathBuilderException; -import java.security.cert.Certificate; -import java.security.cert.CertificateExpiredException; -import java.security.cert.CertificateNotYetValidException; -import java.security.cert.PKIXBuilderParameters; -import java.security.cert.X509CertSelector; -import java.security.cert.X509Certificate; -import java.util.Arrays; -import java.util.Enumeration; - -import javax.crypto.SecretKey; - -import org.apache.xml.security.utils.RFC2253Parser; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.ws.soap.security.support.KeyStoreUtils; - -import com.sun.xml.wss.impl.callback.CertificateValidationCallback; -import com.sun.xml.wss.impl.callback.DecryptionKeyCallback; -import com.sun.xml.wss.impl.callback.EncryptionKeyCallback; -import com.sun.xml.wss.impl.callback.SignatureKeyCallback; -import com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback; - -/** - * Callback handler that uses Java Security {@code KeyStore}s to handle cryptographic callbacks. Allows for specific key - * stores to be set for various cryptographic operations. - *

- * This handler requires one or more key stores to be set. You can configure them in your application context by using a - * {@code KeyStoreFactoryBean}. The exact stores to be set depends on the cryptographic operations that are to be - * performed by this handler. The table underneath show the key store to be used for each operation: - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
Cryptographic operationKey store used
Certificate validationfirst {@code keyStore}, then {@code trustStore}
Decryption based on private key{@code keyStore}
Decryption based on symmetric key{@code symmetricStore}
Encryption based on certificate{@code trustStore}
Encryption based on symmetric key{@code symmetricStore}
Signing{@code keyStore}
Signature verification{@code trustStore}
- *

- *

Default key stores

If the {@code symmetricStore} is not set, it will default to the {@code keyStore}. If the - * key or trust store is not set, this handler will use the standard Java mechanism to load or create it. See - * {@link #loadDefaultKeyStore()} and {@link #loadDefaultTrustStore()}. - *

- *

Examples

For instance, if you want to use the {@code KeyStoreCallbackHandler} to validate incoming - * certificates or signatures, you would use a trust store, like so: - * - *
- * <bean id="keyStoreHandler" class="org.springframework.ws.soap.security.xwss.callback.KeyStoreCallbackHandler">
- *	   <property name="trustStore" ref="trustStore"/>
- * </bean>
- *
- * <bean id="trustStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
- *	   <property name="location" value="classpath:truststore.jks"/>
- *	   <property name="password" value="changeit"/>
- * </bean>
- * 
- * - * If you want to use it to decrypt incoming certificates or sign outgoing messages, you would use a key store, like so: - * - *
- * <bean id="keyStoreHandler" class="org.springframework.ws.soap.security.xwss.callback.KeyStoreCallbackHandler">
- *	   <property name="keyStore" ref="keyStore"/>
- *	   <property name="privateKeyPassword" value="changeit"/>
- * </bean>
- *
- * <bean id="keyStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
- *	   <property name="location" value="classpath:keystore.jks"/>
- *	   <property name="password" value="changeit"/>
- * </bean>
- * 
- * - *

Handled callbacks

This class handles {@code CertificateValidationCallback}s, {@code DecryptionKeyCallback}s, - * {@code EncryptionKeyCallback}s, {@code SignatureKeyCallback}s, and {@code SignatureVerificationKeyCallback}s. It - * throws an {@code UnsupportedCallbackException} for others. - * - * @author Arjen Poutsma - * @see KeyStore - * @see org.springframework.ws.soap.security.support.KeyStoreFactoryBean - * @see CertificateValidationCallback - * @see DecryptionKeyCallback - * @see EncryptionKeyCallback - * @see SignatureKeyCallback - * @see SignatureVerificationKeyCallback - * @see The - * standard Java trust store mechanism - * @since 1.0.0 - */ -public class KeyStoreCallbackHandler extends CryptographyCallbackHandler implements InitializingBean { - - private static final String X_509_CERTIFICATE_TYPE = "X.509"; - - private static final String SUBJECT_KEY_IDENTIFIER_OID = "2.5.29.14"; - - private KeyStore keyStore; - - private KeyStore symmetricStore; - - private KeyStore trustStore; - - private String defaultAlias; - - private char[] privateKeyPassword; - - private char[] symmetricKeyPassword; - - private boolean revocationEnabled = false; - - private static X509Certificate getCertificate(String alias, KeyStore store) throws IOException { - try { - return (X509Certificate) store.getCertificate(alias); - } catch (GeneralSecurityException e) { - throw new IOException(e.getMessage()); - } - } - - private static X509Certificate getCertificate(PublicKey pk, KeyStore store) throws IOException { - try { - Enumeration aliases = store.aliases(); - while (aliases.hasMoreElements()) { - String alias = aliases.nextElement(); - Certificate cert = store.getCertificate(alias); - if (cert == null || !X_509_CERTIFICATE_TYPE.equals(cert.getType())) { - continue; - } - X509Certificate x509Cert = (X509Certificate) cert; - if (x509Cert.getPublicKey().equals(pk)) { - return x509Cert; - } - } - } catch (GeneralSecurityException e) { - throw new IOException(e.getMessage()); - } - return null; - } - - /** Sets the key store alias for the default certificate and private key. */ - public void setDefaultAlias(String defaultAlias) { - this.defaultAlias = defaultAlias; - } - - /** - * Sets the default key store. This property is required for decription based on private keys, and signing. If this - * property is not set, a default key store is loaded. - * - * @see org.springframework.ws.soap.security.support.KeyStoreFactoryBean - * @see #loadDefaultTrustStore() - */ - public void setKeyStore(KeyStore keyStore) { - this.keyStore = keyStore; - } - - /** - * Sets the password used to retrieve private keys from the keystore. This property is required for decription based - * on private keys, and signing. - */ - public void setPrivateKeyPassword(String privateKeyPassword) { - if (privateKeyPassword != null) { - this.privateKeyPassword = privateKeyPassword.toCharArray(); - } - } - - /** - * Sets the password used to retrieve keys from the symmetric keystore. If this property is not set, it default to the - * private key password. - * - * @see #setPrivateKeyPassword(String) - */ - public void setSymmetricKeyPassword(String symmetricKeyPassword) { - if (symmetricKeyPassword != null) { - this.symmetricKeyPassword = symmetricKeyPassword.toCharArray(); - } - } - - /** - * Sets the key store used for encryption and decryption using symmetric keys. If this property is not set, it - * defaults to the {@code keyStore} property. - * - * @see org.springframework.ws.soap.security.support.KeyStoreFactoryBean - * @see #setKeyStore(java.security.KeyStore) - */ - public void setSymmetricStore(KeyStore symmetricStore) { - this.symmetricStore = symmetricStore; - } - - /** - * Sets the key store used for signature verifications and encryptions. If this property is not set, a default key - * store will be loaded. - * - * @see org.springframework.ws.soap.security.support.KeyStoreFactoryBean - * @see #loadDefaultTrustStore() - */ - public void setTrustStore(KeyStore trustStore) { - this.trustStore = trustStore; - } - - /** - * Determines if certificate revocation checking is enabled or not. Default is {@code false}. - */ - public void setRevocationEnabled(boolean revocationEnabled) { - this.revocationEnabled = revocationEnabled; - } - - @Override - public void afterPropertiesSet() throws Exception { - if (keyStore == null) { - loadDefaultKeyStore(); - } - if (trustStore == null) { - loadDefaultTrustStore(); - } - if (symmetricStore == null) { - symmetricStore = keyStore; - } - if (symmetricKeyPassword == null) { - symmetricKeyPassword = privateKeyPassword; - } - } - - @Override - protected final void handleAliasPrivKeyCertRequest(SignatureKeyCallback callback, - SignatureKeyCallback.AliasPrivKeyCertRequest request) throws IOException { - PrivateKey privateKey = getPrivateKey(request.getAlias()); - X509Certificate certificate = getCertificate(request.getAlias()); - request.setPrivateKey(privateKey); - request.setX509Certificate(certificate); - } - - @Override - protected final void handleAliasSymmetricKeyRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.AliasSymmetricKeyRequest request) throws IOException { - SecretKey secretKey = getSymmetricKey(request.getAlias()); - request.setSymmetricKey(secretKey); - } - - // - // Encryption - // - - @Override - protected final void handleAliasSymmetricKeyRequest(EncryptionKeyCallback callback, - EncryptionKeyCallback.AliasSymmetricKeyRequest request) throws IOException { - SecretKey secretKey = getSymmetricKey(request.getAlias()); - request.setSymmetricKey(secretKey); - } - - @Override - protected final void handleAliasX509CertificateRequest(EncryptionKeyCallback callback, - EncryptionKeyCallback.AliasX509CertificateRequest request) throws IOException { - X509Certificate certificate = getCertificateFromTrustStore(request.getAlias()); - request.setX509Certificate(certificate); - } - - // - // Certificate validation - // - - @Override - protected final void handleCertificateValidationCallback(CertificateValidationCallback callback) { - callback.setValidator(new KeyStoreCertificateValidator()); - } - - // - // Signing - // - - @Override - protected final void handleDefaultPrivKeyCertRequest(SignatureKeyCallback callback, - SignatureKeyCallback.DefaultPrivKeyCertRequest request) throws IOException { - PrivateKey privateKey = getPrivateKey(defaultAlias); - X509Certificate certificate = getCertificate(defaultAlias); - request.setPrivateKey(privateKey); - request.setX509Certificate(certificate); - } - - @Override - protected final void handleDefaultX509CertificateRequest(EncryptionKeyCallback callback, - EncryptionKeyCallback.DefaultX509CertificateRequest request) throws IOException { - X509Certificate certificate = getCertificateFromTrustStore(defaultAlias); - request.setX509Certificate(certificate); - } - - @Override - protected final void handlePublicKeyBasedPrivKeyCertRequest(SignatureKeyCallback callback, - SignatureKeyCallback.PublicKeyBasedPrivKeyCertRequest request) throws IOException { - PrivateKey privateKey = getPrivateKey(request.getPublicKey()); - X509Certificate certificate = getCertificate(request.getPublicKey()); - request.setPrivateKey(privateKey); - request.setX509Certificate(certificate); - } - - // - // Decryption - // - @Override - protected final void handlePublicKeyBasedPrivKeyRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.PublicKeyBasedPrivKeyRequest request) throws IOException { - PrivateKey key = getPrivateKey(request.getPublicKey()); - request.setPrivateKey(key); - } - - @Override - protected final void handlePublicKeyBasedRequest(EncryptionKeyCallback callback, - EncryptionKeyCallback.PublicKeyBasedRequest request) throws IOException { - X509Certificate certificate = getCertificateFromTrustStore(request.getPublicKey()); - request.setX509Certificate(certificate); - } - - @Override - protected final void handlePublicKeyBasedRequest(SignatureVerificationKeyCallback callback, - SignatureVerificationKeyCallback.PublicKeyBasedRequest request) throws IOException { - X509Certificate certificate = getCertificateFromTrustStore(request.getPublicKey()); - request.setX509Certificate(certificate); - } - - @Override - protected final void handleX509CertificateBasedRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.X509CertificateBasedRequest request) throws IOException { - PrivateKey privKey = getPrivateKey(request.getX509Certificate()); - request.setPrivateKey(privKey); - } - - @Override - protected final void handleX509IssuerSerialBasedRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.X509IssuerSerialBasedRequest request) throws IOException { - PrivateKey key = getPrivateKey(request.getIssuerName(), request.getSerialNumber()); - request.setPrivateKey(key); - } - - @Override - protected final void handleX509IssuerSerialBasedRequest(SignatureVerificationKeyCallback callback, - SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest request) throws IOException { - X509Certificate certificate = getCertificateFromTrustStore(request.getIssuerName(), request.getSerialNumber()); - request.setX509Certificate(certificate); - } - - @Override - protected final void handleX509SubjectKeyIdentifierBasedRequest(DecryptionKeyCallback callback, - DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest request) throws IOException { - PrivateKey key = getPrivateKey(request.getSubjectKeyIdentifier()); - request.setPrivateKey(key); - } - - // - // Signature verification - // - - @Override - protected final void handleX509SubjectKeyIdentifierBasedRequest(SignatureVerificationKeyCallback callback, - SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest request) throws IOException { - X509Certificate certificate = getCertificateFromTrustStore(request.getSubjectKeyIdentifier()); - request.setX509Certificate(certificate); - } - - // Certificate methods - - protected X509Certificate getCertificate(String alias) throws IOException { - return getCertificate(alias, keyStore); - } - - protected X509Certificate getCertificate(PublicKey pk) throws IOException { - return getCertificate(pk, keyStore); - } - - protected X509Certificate getCertificateFromTrustStore(String alias) throws IOException { - return getCertificate(alias, trustStore); - } - - protected X509Certificate getCertificateFromTrustStore(byte[] subjectKeyIdentifier) throws IOException { - try { - Enumeration aliases = trustStore.aliases(); - while (aliases.hasMoreElements()) { - String alias = aliases.nextElement(); - Certificate cert = trustStore.getCertificate(alias); - if (cert == null || !X_509_CERTIFICATE_TYPE.equals(cert.getType())) { - continue; - } - X509Certificate x509Cert = (X509Certificate) cert; - byte[] keyId = getSubjectKeyIdentifier(x509Cert); - if (keyId == null) { - // Cert does not contain a key identifier - continue; - } - if (Arrays.equals(subjectKeyIdentifier, keyId)) { - return x509Cert; - } - } - } catch (GeneralSecurityException e) { - throw new IOException(e.getMessage()); - } - return null; - } - - protected X509Certificate getCertificateFromTrustStore(PublicKey pk) throws IOException { - return getCertificate(pk, trustStore); - } - - protected X509Certificate getCertificateFromTrustStore(String issuerName, BigInteger serialNumber) - throws IOException { - try { - Enumeration aliases = trustStore.aliases(); - while (aliases.hasMoreElements()) { - String alias = aliases.nextElement(); - Certificate cert = trustStore.getCertificate(alias); - if (cert == null || !X_509_CERTIFICATE_TYPE.equals(cert.getType())) { - continue; - } - X509Certificate x509Cert = (X509Certificate) cert; - String thisIssuerName = RFC2253Parser.normalize(x509Cert.getIssuerDN().getName()); - BigInteger thisSerialNumber = x509Cert.getSerialNumber(); - if (thisIssuerName.equals(issuerName) && thisSerialNumber.equals(serialNumber)) { - return x509Cert; - } - } - } catch (GeneralSecurityException e) { - throw new IOException(e.getMessage()); - } - return null; - } - - // Private Key methods - - protected PrivateKey getPrivateKey(String alias) throws IOException { - try { - return (PrivateKey) keyStore.getKey(alias, privateKeyPassword); - } catch (GeneralSecurityException e) { - throw new IOException(e.getMessage()); - } - } - - protected PrivateKey getPrivateKey(PublicKey publicKey) throws IOException { - try { - Enumeration aliases = keyStore.aliases(); - while (aliases.hasMoreElements()) { - String alias = aliases.nextElement(); - if (keyStore.isKeyEntry(alias)) { - // Just returning the first one here - return (PrivateKey) keyStore.getKey(alias, privateKeyPassword); - } - } - } catch (GeneralSecurityException e) { - throw new IOException(e.getMessage()); - } - return null; - } - - protected PrivateKey getPrivateKey(X509Certificate certificate) throws IOException { - try { - Enumeration aliases = keyStore.aliases(); - while (aliases.hasMoreElements()) { - String alias = aliases.nextElement(); - if (!keyStore.isKeyEntry(alias)) { - continue; - } - Certificate cert = keyStore.getCertificate(alias); - if (cert != null && cert.equals(certificate)) { - return (PrivateKey) keyStore.getKey(alias, privateKeyPassword); - } - } - } catch (GeneralSecurityException e) { - throw new IOException(e.getMessage()); - } - return null; - } - - protected PrivateKey getPrivateKey(byte[] keyIdentifier) throws IOException { - try { - Enumeration aliases = keyStore.aliases(); - while (aliases.hasMoreElements()) { - String alias = aliases.nextElement(); - if (!keyStore.isKeyEntry(alias)) { - continue; - } - Certificate cert = keyStore.getCertificate(alias); - if (cert == null || !"X.509".equals(cert.getType())) { - continue; - } - X509Certificate x509Cert = (X509Certificate) cert; - byte[] keyId = getSubjectKeyIdentifier(x509Cert); - if (keyId == null) { - // Cert does not contain a key identifier - continue; - } - if (Arrays.equals(keyIdentifier, keyId)) { - return (PrivateKey) keyStore.getKey(alias, privateKeyPassword); - } - } - } catch (GeneralSecurityException e) { - throw new IOException(e.getMessage()); - } - return null; - } - - protected PrivateKey getPrivateKey(String issuerName, BigInteger serialNumber) throws IOException { - try { - Enumeration aliases = keyStore.aliases(); - while (aliases.hasMoreElements()) { - String alias = aliases.nextElement(); - if (!keyStore.isKeyEntry(alias)) { - continue; - } - Certificate cert = keyStore.getCertificate(alias); - if (cert == null || !"X.509".equals(cert.getType())) { - continue; - } - X509Certificate x509Cert = (X509Certificate) cert; - String thisIssuerName = RFC2253Parser.normalize(x509Cert.getIssuerDN().getName()); - BigInteger thisSerialNumber = x509Cert.getSerialNumber(); - if (thisIssuerName.equals(issuerName) && thisSerialNumber.equals(serialNumber)) { - return (PrivateKey) keyStore.getKey(alias, privateKeyPassword); - } - } - } catch (GeneralSecurityException e) { - throw new IOException(e.getMessage()); - } - return null; - } - - // Utility methods - - protected final byte[] getSubjectKeyIdentifier(X509Certificate cert) { - byte[] subjectKeyIdentifier = cert.getExtensionValue(SUBJECT_KEY_IDENTIFIER_OID); - if (subjectKeyIdentifier == null) { - return null; - } - byte[] dest = new byte[subjectKeyIdentifier.length - 4]; - System.arraycopy(subjectKeyIdentifier, 4, dest, 0, subjectKeyIdentifier.length - 4); - return dest; - } - - // - // Symmetric key methods - // - - protected SecretKey getSymmetricKey(String alias) throws IOException { - try { - return (SecretKey) symmetricStore.getKey(alias, symmetricKeyPassword); - } catch (GeneralSecurityException e) { - throw new IOException(e.getMessage()); - } - } - - /** Loads the key store indicated by system properties. Delegates to {@link KeyStoreUtils#loadDefaultKeyStore()}. */ - protected void loadDefaultKeyStore() { - try { - keyStore = KeyStoreUtils.loadDefaultKeyStore(); - if (logger.isDebugEnabled()) { - logger.debug("Loaded default key store"); - } - } catch (Exception ex) { - logger.warn("Could not open default key store", ex); - } - } - - /** Loads a default trust store. Delegates to {@link KeyStoreUtils#loadDefaultTrustStore()}. */ - protected void loadDefaultTrustStore() { - try { - trustStore = KeyStoreUtils.loadDefaultTrustStore(); - if (logger.isDebugEnabled()) { - logger.debug("Loaded default trust store"); - } - } catch (Exception ex) { - logger.warn("Could not open default trust store", ex); - } - } - - /** - * Creates a {@code PKIXBuilderParameters} instance with the given parameters. Default implementation simply - * instantiates one, without setting additional parameters. - * - * @param trustStore the trust store to use - * @param certSelector the certificate selector to use - * @return the builder parameters - * @throws GeneralSecurityException in case of errors - * @see #setRevocationEnabled(boolean) - */ - protected PKIXBuilderParameters createBuilderParameters(KeyStore trustStore, X509CertSelector certSelector) - throws GeneralSecurityException { - return new PKIXBuilderParameters(trustStore, certSelector); - } - - // - // Inner classes - // - - private class KeyStoreCertificateValidator implements CertificateValidationCallback.CertificateValidator { - - @Override - public boolean validate(X509Certificate certificate) - throws CertificateValidationCallback.CertificateValidationException { - if (isOwnedCert(certificate)) { - if (logger.isDebugEnabled()) { - logger.debug( - "Certificate with DN [" + certificate.getSubjectX500Principal().getName() + "] is in private keystore"); - } - return true; - } else if (trustStore == null) { - return false; - } - - try { - certificate.checkValidity(); - } catch (CertificateExpiredException e) { - if (logger.isDebugEnabled()) { - logger.debug("Certificate with DN [" + certificate.getSubjectX500Principal().getName() + "] has expired"); - } - return false; - } catch (CertificateNotYetValidException e) { - if (logger.isDebugEnabled()) { - logger - .debug("Certificate with DN [" + certificate.getSubjectX500Principal().getName() + "] is not yet valid"); - } - return false; - } - - X509CertSelector certSelector = new X509CertSelector(); - certSelector.setCertificate(certificate); - - PKIXBuilderParameters parameters; - CertPathBuilder builder; - try { - parameters = createBuilderParameters(trustStore, certSelector); - parameters.setRevocationEnabled(revocationEnabled); - builder = CertPathBuilder.getInstance("PKIX"); - } catch (GeneralSecurityException ex) { - throw new CertificateValidationCallback.CertificateValidationException("Could not create PKIX CertPathBuilder", - ex); - } - - try { - builder.build(parameters); - } catch (CertPathBuilderException e) { - if (logger.isDebugEnabled()) { - logger.debug("Certification path of certificate with DN [" + certificate.getSubjectX500Principal().getName() - + "] could not be validated"); - } - return false; - } catch (InvalidAlgorithmParameterException e) { - if (logger.isDebugEnabled()) { - logger.debug("Algorithm of certificate with DN [" + certificate.getSubjectX500Principal().getName() - + "] could not be validated"); - } - return false; - } - if (logger.isDebugEnabled()) { - logger.debug("Certificate with DN [" + certificate.getSubjectX500Principal().getName() + "] validated"); - } - return true; - } - - private boolean isOwnedCert(X509Certificate cert) - throws CertificateValidationCallback.CertificateValidationException { - if (keyStore == null) { - return false; - } - try { - Enumeration aliases = keyStore.aliases(); - while (aliases.hasMoreElements()) { - String alias = aliases.nextElement(); - if (keyStore.isKeyEntry(alias)) { - X509Certificate x509Cert = (X509Certificate) keyStore.getCertificate(alias); - if (x509Cert != null) { - if (x509Cert.equals(cert)) { - return true; - } - } - } - } - return false; - } catch (GeneralSecurityException e) { - throw new CertificateValidationCallback.CertificateValidationException( - "Could not determine whether certificate is contained in main key store", e); - } - } - } - -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/MockValidationCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/MockValidationCallbackHandler.java deleted file mode 100644 index a65ea4f3..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/MockValidationCallbackHandler.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback; - -import java.io.IOException; -import java.security.cert.X509Certificate; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.UnsupportedCallbackException; - -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; - -import com.sun.xml.wss.impl.callback.CertificateValidationCallback; -import com.sun.xml.wss.impl.callback.PasswordValidationCallback; - -/** - * Mock implementation of of callback handler that accepts all password and certificate validation callbacks. - *

- * If the {@code valid} property is set to {@code true} (the default), this handler simply accepts and validates every - * password or certificate validation callback that is passed to it. - *

- * This class handles {@code CertificateValidationCallback}s and {@code PasswordValidationCallback}s, and throws an - * {@code UnsupportedCallbackException} for others - * - * @author Arjen Poutsma - * @since 1.0.0 - */ -public class MockValidationCallbackHandler extends AbstractCallbackHandler { - - private boolean isValid = true; - - public MockValidationCallbackHandler() {} - - public MockValidationCallbackHandler(boolean valid) { - isValid = valid; - } - - @Override - protected void handleInternal(Callback callback) throws IOException, UnsupportedCallbackException { - if (callback instanceof CertificateValidationCallback) { - CertificateValidationCallback validationCallback = (CertificateValidationCallback) callback; - validationCallback.setValidator(new MockCertificateValidator()); - } else if (callback instanceof PasswordValidationCallback) { - PasswordValidationCallback validationCallback = (PasswordValidationCallback) callback; - validationCallback.setValidator(new MockPasswordValidator()); - } else { - throw new UnsupportedCallbackException(callback); - } - } - - public void setValid(boolean valid) { - isValid = valid; - } - - private class MockCertificateValidator implements CertificateValidationCallback.CertificateValidator { - - @Override - public boolean validate(X509Certificate certificate) - throws CertificateValidationCallback.CertificateValidationException { - return isValid; - } - } - - private class MockPasswordValidator implements PasswordValidationCallback.PasswordValidator { - - @Override - public boolean validate(PasswordValidationCallback.Request request) - throws PasswordValidationCallback.PasswordValidationException { - return isValid; - } - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SimplePasswordValidationCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SimplePasswordValidationCallbackHandler.java deleted file mode 100644 index 8288452f..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SimplePasswordValidationCallbackHandler.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.UnsupportedCallbackException; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.util.Assert; -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; - -import com.sun.xml.wss.impl.callback.PasswordValidationCallback; -import com.sun.xml.wss.impl.callback.TimestampValidationCallback; - -/** - * Simple callback handler that validates passwords agains a in-memory {@code Properties} object. Password validation is - * done on a case-sensitive basis. - *

- * This class only handles {@code PasswordValidationCallback}s, and throws an {@code UnsupportedCallbackException} for - * others - * - * @author Arjen Poutsma - * @see #setUsers(java.util.Properties) - * @since 1.0.0 - */ -public class SimplePasswordValidationCallbackHandler extends AbstractCallbackHandler implements InitializingBean { - - private Map users = new HashMap(); - - /** Sets the users to validate against. Property names are usernames, property values are passwords. */ - public void setUsers(Properties users) { - for (Map.Entry entry : users.entrySet()) { - if (entry.getKey() instanceof String && entry.getValue() instanceof String) { - this.users.put((String) entry.getKey(), (String) entry.getValue()); - } - } - } - - public void setUsersMap(Map users) { - this.users = users; - } - - @Override - public void afterPropertiesSet() throws Exception { - Assert.notNull(users, "users is required"); - } - - @Override - protected void handleInternal(Callback callback) throws IOException, UnsupportedCallbackException { - if (callback instanceof PasswordValidationCallback) { - PasswordValidationCallback passwordCallback = (PasswordValidationCallback) callback; - if (passwordCallback.getRequest() instanceof PasswordValidationCallback.PlainTextPasswordRequest) { - passwordCallback.setValidator(new SimplePlainTextPasswordValidator()); - } else if (passwordCallback.getRequest() instanceof PasswordValidationCallback.DigestPasswordRequest) { - PasswordValidationCallback.DigestPasswordRequest digestPasswordRequest = (PasswordValidationCallback.DigestPasswordRequest) passwordCallback - .getRequest(); - String password = users.get(digestPasswordRequest.getUsername()); - digestPasswordRequest.setPassword(password); - passwordCallback.setValidator(new PasswordValidationCallback.DigestPasswordValidator()); - } - } else if (callback instanceof TimestampValidationCallback) { - TimestampValidationCallback timestampCallback = (TimestampValidationCallback) callback; - timestampCallback.setValidator(new DefaultTimestampValidator()); - } else { - throw new UnsupportedCallbackException(callback); - } - } - - private class SimplePlainTextPasswordValidator implements PasswordValidationCallback.PasswordValidator { - - @Override - public boolean validate(PasswordValidationCallback.Request request) - throws PasswordValidationCallback.PasswordValidationException { - PasswordValidationCallback.PlainTextPasswordRequest plainTextPasswordRequest = (PasswordValidationCallback.PlainTextPasswordRequest) request; - String password = users.get(plainTextPasswordRequest.getUsername()); - return password != null && password.equals(plainTextPasswordRequest.getPassword()); - } - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SimpleUsernamePasswordCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SimpleUsernamePasswordCallbackHandler.java deleted file mode 100644 index d3844421..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SimpleUsernamePasswordCallbackHandler.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback; - -import java.io.IOException; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.UnsupportedCallbackException; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.util.Assert; -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; - -import com.sun.xml.wss.impl.callback.PasswordCallback; -import com.sun.xml.wss.impl.callback.UsernameCallback; - -/** - * Simple callback handler that supplies a username and password to a username token at runtime. - *

- * This class handles {@code UsernameCallback}s and {@code PasswordCallback}s, and throws an - * {@code UnsupportedCallbackException} for others - * - * @author Arjen Poutsma - * @see #setUsername(String) - * @see #setPassword(String) - * @since 1.0.0 - */ -public class SimpleUsernamePasswordCallbackHandler extends AbstractCallbackHandler implements InitializingBean { - - private String username; - - private String password; - - /** - * Constructs an empty instance of the {@code SimpleUsernamePasswordCallbackHandler}. - */ - public SimpleUsernamePasswordCallbackHandler() {} - - /** - * Constructs an instance of the {@code SimpleUsernamePasswordCallbackHandler} with the given name and password. - */ - public SimpleUsernamePasswordCallbackHandler(String username, String password) { - this.username = username; - this.password = password; - } - - public void setPassword(String password) { - this.password = password; - } - - public void setUsername(String username) { - this.username = username; - } - - @Override - public void afterPropertiesSet() throws Exception { - Assert.hasLength(username, "username must be set"); - Assert.hasLength(password, "password must be set"); - } - - @Override - protected void handleInternal(Callback callback) throws IOException, UnsupportedCallbackException { - if (callback instanceof UsernameCallback) { - UsernameCallback usernameCallback = (UsernameCallback) callback; - usernameCallback.setUsername(username); - } else if (callback instanceof PasswordCallback) { - PasswordCallback passwordCallback = (PasswordCallback) callback; - passwordCallback.setPassword(password); - } else { - throw new UnsupportedCallbackException(callback); - } - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringCertificateValidationCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringCertificateValidationCallbackHandler.java deleted file mode 100644 index fb2d1765..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringCertificateValidationCallbackHandler.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback; - -import java.io.IOException; -import java.security.cert.X509Certificate; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.UnsupportedCallbackException; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.util.Assert; -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; -import org.springframework.ws.soap.security.callback.CleanupCallback; -import org.springframework.ws.soap.security.x509.X509AuthenticationToken; - -import com.sun.xml.wss.impl.callback.CertificateValidationCallback; - -/** - * Callback handler that validates a certificate using an Spring Security {@code AuthenticationManager}. Logic based on - * Spring Security's {@code X509ProcessingFilter}. - *

- * Spring Security {@code X509AuthenticationToken} is created with the certificate as the credentials. - *

- * The configured authentication manager is expected to supply a provider which can handle this token (usually an - * instance of {@code X509AuthenticationProvider}). - *

- *

- * This class only handles {@code CertificateValidationCallback}s, and throws an {@code UnsupportedCallbackException} - * for others. - * - * @author Arjen Poutsma - * @see org.springframework.ws.soap.security.x509.X509AuthenticationToken - * @see org.springframework.ws.soap.security.x509.X509AuthenticationProvider - * @see com.sun.xml.wss.impl.callback.CertificateValidationCallback - * @since 1.5.0 - */ -public class SpringCertificateValidationCallbackHandler extends AbstractCallbackHandler implements InitializingBean { - - private AuthenticationManager authenticationManager; - - private boolean ignoreFailure = false; - - /** Sets the Spring Security authentication manager. Required. */ - public void setAuthenticationManager(AuthenticationManager authenticationManager) { - this.authenticationManager = authenticationManager; - } - - public void setIgnoreFailure(boolean ignoreFailure) { - this.ignoreFailure = ignoreFailure; - } - - @Override - public void afterPropertiesSet() throws Exception { - Assert.notNull(authenticationManager, "authenticationManager is required"); - } - - /** - * Handles {@code CertificateValidationCallback}s, and throws an {@code UnsupportedCallbackException} for others - * - * @throws javax.security.auth.callback.UnsupportedCallbackException when the callback is not supported - */ - @Override - protected void handleInternal(Callback callback) throws IOException, UnsupportedCallbackException { - if (callback instanceof CertificateValidationCallback) { - ((CertificateValidationCallback) callback).setValidator(new SpringSecurityCertificateValidator()); - } else if (callback instanceof CleanupCallback) { - SecurityContextHolder.clearContext(); - } else { - throw new UnsupportedCallbackException(callback); - } - } - - private class SpringSecurityCertificateValidator implements CertificateValidationCallback.CertificateValidator { - - @Override - public boolean validate(X509Certificate certificate) - throws CertificateValidationCallback.CertificateValidationException { - boolean result; - try { - Authentication authResult = authenticationManager.authenticate(new X509AuthenticationToken(certificate)); - if (logger.isDebugEnabled()) { - logger.debug("Authentication request for certificate with DN [" - + certificate.getSubjectX500Principal().getName() + "] successful"); - } - SecurityContextHolder.getContext().setAuthentication(authResult); - return true; - } catch (AuthenticationException failed) { - if (logger.isDebugEnabled()) { - logger.debug("Authentication request for certificate with DN [" - + certificate.getSubjectX500Principal().getName() + "] failed: " + failed.toString()); - } - SecurityContextHolder.clearContext(); - result = ignoreFailure; - } - return result; - } - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringDigestPasswordValidationCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringDigestPasswordValidationCallbackHandler.java deleted file mode 100644 index 00a904ae..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringDigestPasswordValidationCallbackHandler.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback; - -import java.io.IOException; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.UnsupportedCallbackException; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.dao.DataAccessException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserCache; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.security.core.userdetails.cache.NullUserCache; -import org.springframework.util.Assert; -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; -import org.springframework.ws.soap.security.callback.CleanupCallback; -import org.springframework.ws.soap.security.support.SpringSecurityUtils; - -import com.sun.xml.wss.impl.callback.PasswordValidationCallback; -import com.sun.xml.wss.impl.callback.TimestampValidationCallback; - -/** - * Callback handler that validates a password digest using an Spring Security {@code UserDetailsService}. Logic based on - * Spring Security's {@code DigestProcessingFilter}. - *

- * An Spring Security {@code UserDetailService} is used to load {@code UserDetails} from. The digest of the password - * contained in this details object is then compared with the digest in the message. - *

- * This class only handles {@code PasswordValidationCallback}s that contain a {@code DigestPasswordRequest}, and throws - * an {@code UnsupportedCallbackException} for others. - * - * @author Arjen Poutsma - * @see org.springframework.security.core.userdetails.UserDetailsService - * @see com.sun.xml.wss.impl.callback.PasswordValidationCallback - * @see com.sun.xml.wss.impl.callback.PasswordValidationCallback.DigestPasswordRequest - * @since 1.5.0 - */ -public class SpringDigestPasswordValidationCallbackHandler extends AbstractCallbackHandler implements InitializingBean { - - private UserCache userCache = new NullUserCache(); - - private UserDetailsService userDetailsService; - - /** Sets the users cache. Not required, but can benefit performance. */ - public void setUserCache(UserCache userCache) { - this.userCache = userCache; - } - - /** Sets the Spring Security user details service. Required. */ - public void setUserDetailsService(UserDetailsService userDetailsService) { - this.userDetailsService = userDetailsService; - } - - @Override - public void afterPropertiesSet() throws Exception { - Assert.notNull(userDetailsService, "userDetailsService is required"); - } - - /** - * Handles {@code PasswordValidationCallback}s that contain a {@code DigestPasswordRequest}, and throws an - * {@code UnsupportedCallbackException} for others - * - * @throws javax.security.auth.callback.UnsupportedCallbackException when the callback is not supported - */ - @Override - protected void handleInternal(Callback callback) throws IOException, UnsupportedCallbackException { - if (callback instanceof PasswordValidationCallback) { - PasswordValidationCallback passwordCallback = (PasswordValidationCallback) callback; - if (passwordCallback.getRequest() instanceof PasswordValidationCallback.DigestPasswordRequest) { - PasswordValidationCallback.DigestPasswordRequest request = (PasswordValidationCallback.DigestPasswordRequest) passwordCallback - .getRequest(); - String username = request.getUsername(); - UserDetails user = loadUserDetails(username); - if (user != null) { - SpringSecurityUtils.checkUserValidity(user); - request.setPassword(user.getPassword()); - } - SpringSecurityDigestPasswordValidator validator = new SpringSecurityDigestPasswordValidator(user); - passwordCallback.setValidator(validator); - return; - } - } else if (callback instanceof TimestampValidationCallback) { - TimestampValidationCallback timestampCallback = (TimestampValidationCallback) callback; - timestampCallback.setValidator(new DefaultTimestampValidator()); - - } else if (callback instanceof CleanupCallback) { - SecurityContextHolder.clearContext(); - return; - } - throw new UnsupportedCallbackException(callback); - } - - private UserDetails loadUserDetails(String username) throws DataAccessException { - UserDetails user = userCache.getUserFromCache(username); - - if (user == null) { - try { - user = userDetailsService.loadUserByUsername(username); - } catch (UsernameNotFoundException notFound) { - if (logger.isDebugEnabled()) { - logger.debug("Username '" + username + "' not found"); - } - return null; - } - userCache.putUserInCache(user); - } - return user; - } - - private class SpringSecurityDigestPasswordValidator extends PasswordValidationCallback.DigestPasswordValidator { - - private UserDetails user; - - private SpringSecurityDigestPasswordValidator(UserDetails user) { - this.user = user; - } - - @Override - public boolean validate(PasswordValidationCallback.Request request) - throws PasswordValidationCallback.PasswordValidationException { - if (super.validate(request)) { - UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(user, - user.getPassword()); - if (logger.isDebugEnabled()) { - logger.debug("Authentication success: " + authRequest.toString()); - } - - SecurityContextHolder.getContext().setAuthentication(authRequest); - return true; - } else { - return false; - } - } - } - -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringPlainTextPasswordValidationCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringPlainTextPasswordValidationCallbackHandler.java deleted file mode 100644 index e1ad36f2..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringPlainTextPasswordValidationCallbackHandler.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback; - -import java.io.IOException; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.UnsupportedCallbackException; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.util.Assert; -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; -import org.springframework.ws.soap.security.callback.CleanupCallback; - -import com.sun.xml.wss.impl.callback.PasswordValidationCallback; - -/** - * Callback handler that validates a certificate uses an Spring Security {@code AuthenticationManager}. Logic based on - * Spring Security's {@code BasicProcessingFilter}. - *

- * This handler requires an Spring Security {@code AuthenticationManager} to operate. It can be set using the - * {@code authenticationManager} property. An Spring Security {@code UsernamePasswordAuthenticationToken} is created - * with the username as principal and password as credentials. - *

- * This class only handles {@code PasswordValidationCallback}s that contain a {@code PlainTextPasswordRequest}, and - * throws an {@code UnsupportedCallbackException} for others. - * - * @author Arjen Poutsma - * @see org.springframework.security.authentication.UsernamePasswordAuthenticationToken - * @see com.sun.xml.wss.impl.callback.PasswordValidationCallback - * @see com.sun.xml.wss.impl.callback.PasswordValidationCallback.PlainTextPasswordRequest - * @since 1.5.0 - */ -public class SpringPlainTextPasswordValidationCallbackHandler extends AbstractCallbackHandler - implements InitializingBean { - - private AuthenticationManager authenticationManager; - - private boolean ignoreFailure = false; - - /** Sets the Spring Security authentication manager. Required. */ - public void setAuthenticationManager(AuthenticationManager authenticationManager) { - this.authenticationManager = authenticationManager; - } - - public void setIgnoreFailure(boolean ignoreFailure) { - this.ignoreFailure = ignoreFailure; - } - - @Override - public void afterPropertiesSet() throws Exception { - Assert.notNull(authenticationManager, "authenticationManager is required"); - } - - /** - * Handles {@code PasswordValidationCallback}s that contain a {@code PlainTextPasswordRequest}, and throws an - * {@code UnsupportedCallbackException} for others. - * - * @throws javax.security.auth.callback.UnsupportedCallbackException when the callback is not supported - */ - @Override - protected void handleInternal(Callback callback) throws IOException, UnsupportedCallbackException { - if (callback instanceof PasswordValidationCallback) { - PasswordValidationCallback validationCallback = (PasswordValidationCallback) callback; - if (validationCallback.getRequest() instanceof PasswordValidationCallback.PlainTextPasswordRequest) { - validationCallback.setValidator(new SpringSecurityPlainTextPasswordValidator()); - return; - } - } else if (callback instanceof CleanupCallback) { - SecurityContextHolder.clearContext(); - return; - } - throw new UnsupportedCallbackException(callback); - } - - private class SpringSecurityPlainTextPasswordValidator implements PasswordValidationCallback.PasswordValidator { - - @Override - public boolean validate(PasswordValidationCallback.Request request) - throws PasswordValidationCallback.PasswordValidationException { - PasswordValidationCallback.PlainTextPasswordRequest plainTextRequest = (PasswordValidationCallback.PlainTextPasswordRequest) request; - try { - Authentication authResult = authenticationManager.authenticate( - new UsernamePasswordAuthenticationToken(plainTextRequest.getUsername(), plainTextRequest.getPassword())); - if (logger.isDebugEnabled()) { - logger.debug("Authentication success: " + authResult.toString()); - } - SecurityContextHolder.getContext().setAuthentication(authResult); - return true; - } catch (AuthenticationException failed) { - if (logger.isDebugEnabled()) { - logger.debug( - "Authentication request for user '" + plainTextRequest.getUsername() + "' failed: " + failed.toString()); - } - SecurityContextHolder.clearContext(); - return ignoreFailure; - } - } - } - -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringUsernamePasswordCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringUsernamePasswordCallbackHandler.java deleted file mode 100644 index 7746c7cd..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/SpringUsernamePasswordCallbackHandler.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss.callback; - -import java.io.IOException; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.UnsupportedCallbackException; - -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; - -import com.sun.xml.wss.impl.callback.PasswordCallback; -import com.sun.xml.wss.impl.callback.UsernameCallback; - -/** - * Callback handler that adds username/password information to a mesage using an Spring Security - * {@link org.springframework.security.core.context.SecurityContext}. - *

- * This class handles {@code UsernameCallback}s and {@code PasswordCallback}s, and throws an - * {@code UnsupportedCallbackException} for others - * - * @author Arjen Poutsma - * @since 1.5.0 - */ -public class SpringUsernamePasswordCallbackHandler extends AbstractCallbackHandler { - - @Override - protected void handleInternal(Callback callback) throws IOException, UnsupportedCallbackException { - if (callback instanceof UsernameCallback) { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication != null && authentication.getName() != null) { - UsernameCallback usernameCallback = (UsernameCallback) callback; - usernameCallback.setUsername(authentication.getName()); - return; - } else { - logger.warn("Cannot handle UsernameCallback: Spring Security SecurityContext contains no Authentication"); - } - } else if (callback instanceof PasswordCallback) { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication != null && authentication.getName() != null) { - PasswordCallback passwordCallback = (PasswordCallback) callback; - passwordCallback.setPassword(authentication.getCredentials().toString()); - return; - } else { - logger.warn("Canot handle PasswordCallback: Spring Security SecurityContext contains no Authentication"); - } - } - throw new UnsupportedCallbackException(callback); - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/XwssCallbackHandlerChain.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/XwssCallbackHandlerChain.java deleted file mode 100644 index 74d38dde..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/XwssCallbackHandlerChain.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback; - -import java.io.IOException; -import java.security.cert.X509Certificate; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.UnsupportedCallbackException; - -import org.springframework.ws.soap.security.callback.CallbackHandlerChain; - -import com.sun.xml.wss.impl.callback.CertificateValidationCallback; -import com.sun.xml.wss.impl.callback.PasswordValidationCallback; -import com.sun.xml.wss.impl.callback.TimestampValidationCallback; - -/** - * Represents a chain of {@code CallbackHandler}s. For each callback, each of the handlers is called in term. If a - * handler throws a {@code UnsupportedCallbackException}, the next handler is tried. - * - * @author Arjen Poutsma - * @since 1.0.0 - */ -public class XwssCallbackHandlerChain extends CallbackHandlerChain { - - public XwssCallbackHandlerChain(CallbackHandler[] callbackHandlers) { - super(callbackHandlers); - } - - @Override - protected void handleInternal(Callback callback) throws IOException, UnsupportedCallbackException { - if (callback instanceof CertificateValidationCallback) { - handleCertificateValidationCallback((CertificateValidationCallback) callback); - } else if (callback instanceof PasswordValidationCallback) { - handlePasswordValidationCallback((PasswordValidationCallback) callback); - } else if (callback instanceof TimestampValidationCallback) { - handleTimestampValidationCallback((TimestampValidationCallback) callback); - } else { - super.handleInternal(callback); - } - } - - private void handleCertificateValidationCallback(CertificateValidationCallback callback) { - callback.setValidator(new CertificateValidatorChain(callback)); - } - - private void handlePasswordValidationCallback(PasswordValidationCallback callback) { - callback.setValidator(new PasswordValidatorChain(callback)); - } - - private void handleTimestampValidationCallback(TimestampValidationCallback callback) { - callback.setValidator(new TimestampValidatorChain(callback)); - } - - private class TimestampValidatorChain implements TimestampValidationCallback.TimestampValidator { - - private TimestampValidationCallback callback; - - private TimestampValidatorChain(TimestampValidationCallback callback) { - this.callback = callback; - } - - @Override - public void validate(TimestampValidationCallback.Request request) - throws TimestampValidationCallback.TimestampValidationException { - for (int i = 0; i < getCallbackHandlers().length; i++) { - CallbackHandler callbackHandler = getCallbackHandlers()[i]; - try { - callbackHandler.handle(new Callback[] { callback }); - callback.getResult(); - } catch (IOException e) { - throw new TimestampValidationCallback.TimestampValidationException(e); - } catch (UnsupportedCallbackException e) { - // ignore - } - } - } - } - - private class PasswordValidatorChain implements PasswordValidationCallback.PasswordValidator { - - private PasswordValidationCallback callback; - - private PasswordValidatorChain(PasswordValidationCallback callback) { - this.callback = callback; - } - - @Override - public boolean validate(PasswordValidationCallback.Request request) - throws PasswordValidationCallback.PasswordValidationException { - boolean allUnsupported = true; - for (int i = 0; i < getCallbackHandlers().length; i++) { - CallbackHandler callbackHandler = getCallbackHandlers()[i]; - try { - callbackHandler.handle(new Callback[] { callback }); - allUnsupported = false; - if (!callback.getResult()) { - return false; - } - } catch (IOException e) { - throw new PasswordValidationCallback.PasswordValidationException(e); - } catch (UnsupportedCallbackException e) { - // ignore - } - } - return !allUnsupported; - } - } - - private class CertificateValidatorChain implements CertificateValidationCallback.CertificateValidator { - - private CertificateValidationCallback callback; - - private CertificateValidatorChain(CertificateValidationCallback callback) { - this.callback = callback; - } - - @Override - public boolean validate(X509Certificate certificate) - throws CertificateValidationCallback.CertificateValidationException { - boolean allUnsupported = true; - for (int i = 0; i < getCallbackHandlers().length; i++) { - CallbackHandler callbackHandler = getCallbackHandlers()[i]; - try { - callbackHandler.handle(new Callback[] { callback }); - allUnsupported = false; - if (!callback.getResult()) { - return false; - } - } catch (IOException e) { - throw new CertificateValidationCallback.CertificateValidationException(e); - } catch (UnsupportedCallbackException e) { - // ignore - } - } - return !allUnsupported; - } - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/AbstractJaasValidationCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/AbstractJaasValidationCallbackHandler.java deleted file mode 100644 index 1fef7913..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/AbstractJaasValidationCallbackHandler.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback.jaas; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.util.Assert; -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; - -/** - * Abstract base class for integrating with JAAS. Provides a login context name property. - * - * @author Arjen Poutsma - * @since 1.0.0 - */ -public abstract class AbstractJaasValidationCallbackHandler extends AbstractCallbackHandler - implements InitializingBean { - - private String loginContextName; - - protected AbstractJaasValidationCallbackHandler() {} - - /** Returns the login context name. */ - public String getLoginContextName() { - return loginContextName; - } - - /** Sets the login context name. */ - public void setLoginContextName(String loginContextName) { - this.loginContextName = loginContextName; - } - - @Override - public void afterPropertiesSet() throws Exception { - Assert.notNull(loginContextName, "loginContextName is required"); - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasCertificateValidationCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasCertificateValidationCallbackHandler.java deleted file mode 100644 index 949b55b9..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasCertificateValidationCallbackHandler.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback.jaas; - -import java.security.cert.X509Certificate; - -import javax.security.auth.Subject; -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.UnsupportedCallbackException; -import javax.security.auth.login.LoginContext; -import javax.security.auth.login.LoginException; - -import com.sun.xml.wss.impl.callback.CertificateValidationCallback; - -/** - * Provides basic support for integrating with JAAS and certificates. Requires the {@code loginContextName} to be - * set.Requires a {@code LoginContext} which handles {@code X500Principal}s. - *

- * This class only handles {@code CertificateValidationCallback}s, and throws an {@code UnsupportedCallbackException} - * for others. - * - * @author Arjen Poutsma - * @see javax.security.auth.x500.X500Principal - * @see #setLoginContextName(String) - * @since 1.0.0 - */ -public class JaasCertificateValidationCallbackHandler extends AbstractJaasValidationCallbackHandler { - - /** - * Handles {@code CertificateValidationCallback}s, and throws an {@code UnsupportedCallbackException} for others - * - * @throws UnsupportedCallbackException when the callback is not supported - */ - @Override - protected final void handleInternal(Callback callback) throws UnsupportedCallbackException { - if (callback instanceof CertificateValidationCallback) { - ((CertificateValidationCallback) callback).setValidator(new JaasCertificateValidator()); - } else { - throw new UnsupportedCallbackException(callback); - } - } - - private class JaasCertificateValidator implements CertificateValidationCallback.CertificateValidator { - - @Override - public boolean validate(X509Certificate certificate) - throws CertificateValidationCallback.CertificateValidationException { - Subject subject = new Subject(); - subject.getPrincipals().add(certificate.getSubjectX500Principal()); - LoginContext loginContext; - try { - loginContext = new LoginContext(getLoginContextName(), subject); - } catch (LoginException ex) { - throw new CertificateValidationCallback.CertificateValidationException(ex); - } catch (SecurityException ex) { - throw new CertificateValidationCallback.CertificateValidationException(ex); - } - - try { - loginContext.login(); - Subject subj = loginContext.getSubject(); - if (!subj.getPrincipals().isEmpty()) { - if (logger.isDebugEnabled()) { - logger.debug("Authentication request for certificate with DN [" - + certificate.getSubjectX500Principal().getName() + "] successful"); - } - return true; - } else { - if (logger.isDebugEnabled()) { - logger.debug("Authentication request for certificate with DN [" - + certificate.getSubjectX500Principal().getName() + "] failed"); - } - return false; - } - } catch (LoginException ex) { - if (logger.isDebugEnabled()) { - logger.debug("Authentication request for certificate with DN [" - + certificate.getSubjectX500Principal().getName() + "] failed"); - } - return false; - } - } - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasPlainTextPasswordValidationCallbackHandler.java b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasPlainTextPasswordValidationCallbackHandler.java deleted file mode 100644 index c533b2ce..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasPlainTextPasswordValidationCallbackHandler.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback.jaas; - -import javax.security.auth.Subject; -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.NameCallback; -import javax.security.auth.callback.PasswordCallback; -import javax.security.auth.callback.UnsupportedCallbackException; -import javax.security.auth.login.LoginContext; -import javax.security.auth.login.LoginException; - -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; - -import com.sun.xml.wss.impl.callback.PasswordValidationCallback; - -/** - * Provides basic support for integrating with JAAS and plain text passwords. - *

- * This class only handles {@code PasswordValidationCallback}s that contain a {@code PlainTextPasswordRequest}, and - * throws an {@code UnsupportedCallbackException} for others. - * - * @author Arjen Poutsma - * @see #getLoginContextName() - * @since 1.0.0 - */ -public class JaasPlainTextPasswordValidationCallbackHandler extends AbstractJaasValidationCallbackHandler { - - /** - * Handles {@code PasswordValidationCallback}s that contain a {@code PlainTextPasswordRequest}, and throws an - * {@code UnsupportedCallbackException} for others. - * - * @throws UnsupportedCallbackException when the callback is not supported - */ - @Override - protected final void handleInternal(Callback callback) throws UnsupportedCallbackException { - if (callback instanceof PasswordValidationCallback) { - PasswordValidationCallback validationCallback = (PasswordValidationCallback) callback; - if (validationCallback.getRequest() instanceof PasswordValidationCallback.PlainTextPasswordRequest) { - validationCallback.setValidator(new JaasPlainTextPasswordValidator()); - return; - } - } - throw new UnsupportedCallbackException(callback); - } - - private class JaasPlainTextPasswordValidator implements PasswordValidationCallback.PasswordValidator { - - @Override - public boolean validate(PasswordValidationCallback.Request request) - throws PasswordValidationCallback.PasswordValidationException { - PasswordValidationCallback.PlainTextPasswordRequest plainTextRequest = (PasswordValidationCallback.PlainTextPasswordRequest) request; - - final String username = plainTextRequest.getUsername(); - final String password = plainTextRequest.getPassword(); - - LoginContext loginContext; - try { - loginContext = new LoginContext(getLoginContextName(), new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) throws UnsupportedCallbackException { - if (callback instanceof NameCallback) { - ((NameCallback) callback).setName(username); - } else if (callback instanceof PasswordCallback) { - ((PasswordCallback) callback).setPassword(password.toCharArray()); - } else { - throw new UnsupportedCallbackException(callback); - } - } - }); - } catch (LoginException ex) { - throw new PasswordValidationCallback.PasswordValidationException(ex); - } catch (SecurityException ex) { - throw new PasswordValidationCallback.PasswordValidationException(ex); - } - - try { - loginContext.login(); - Subject subject = loginContext.getSubject(); - if (!subject.getPrincipals().isEmpty()) { - if (logger.isDebugEnabled()) { - logger.debug("Authentication request for user '" + username + "' successful"); - } - return true; - } else { - if (logger.isDebugEnabled()) { - logger.debug("Authentication request for user '" + username + "' failed"); - } - return false; - } - } catch (LoginException ex) { - if (logger.isDebugEnabled()) { - logger.debug("Authentication request for user '" + username + "' failed"); - } - return false; - } - } - - } -} diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/package.html b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/package.html deleted file mode 100644 index adb5dfe6..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/jaas/package.html +++ /dev/null @@ -1,6 +0,0 @@ - - -Contains CallbackHandler implementations for XWSS that use the Java Authentication and Authorization Service (JAAS). - - \ No newline at end of file diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/package.html b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/package.html deleted file mode 100644 index c0983d39..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/callback/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Contains CallbackHandler implementations for XWSS. - - \ No newline at end of file diff --git a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/package.html b/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/package.html deleted file mode 100644 index 9e4b1d21..00000000 --- a/spring-ws-security/src/main/java/org/springframework/ws/soap/security/xwss/package.html +++ /dev/null @@ -1,6 +0,0 @@ - - -Contains classes for using the XML and WebServices Security WS-Security -implementation within Spring-WS. - - \ No newline at end of file diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/SkipValidationWsSecurityInterceptorTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/SkipValidationWsSecurityInterceptorTest.java index d07f7880..23ab81b1 100644 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/SkipValidationWsSecurityInterceptorTest.java +++ b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/SkipValidationWsSecurityInterceptorTest.java @@ -1,86 +1,86 @@ -package org.springframework.ws.soap.security; - -import static org.assertj.core.api.Assertions.*; - -import java.io.IOException; -import java.io.InputStream; - -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPException; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; -import org.springframework.ws.context.DefaultMessageContext; -import org.springframework.ws.context.MessageContext; -import org.springframework.ws.soap.SoapMessage; -import org.springframework.ws.soap.saaj.SaajSoapMessage; -import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; - -public class SkipValidationWsSecurityInterceptorTest { - - private MessageFactory messageFactory; - private AbstractWsSecurityInterceptor interceptor; - private SaajSoapMessageFactory soapMessageFactory; - - @BeforeEach - public void setUp() throws Exception { - - messageFactory = MessageFactory.newInstance(); - soapMessageFactory = new SaajSoapMessageFactory(messageFactory); - interceptor = new AbstractWsSecurityInterceptor() { - - @Override - protected void validateMessage(SoapMessage soapMessage, MessageContext messageContext) - throws WsSecurityValidationException { - fail("validation must be skipped."); - } - - @Override - protected void secureMessage(SoapMessage soapMessage, MessageContext messageContext) - throws WsSecuritySecurementException {} - - @Override - protected void cleanUp() {} - }; - interceptor.setSkipValidationIfNoHeaderPresent(true); - } - - @Test - public void testSkipValidationOnNoHeader() throws Exception { - doTestSkipValidation("noHeader-soap.xml"); - } - - @Test - public void testSkipValidationOnEmptyHeader() throws Exception { - doTestSkipValidation("emptyHeader-soap.xml"); - } - - @Test - public void testSkipValidationOnNoSecurityHeader() throws Exception { - doTestSkipValidation("noSecurityHeader-soap.xml"); - } - - private void doTestSkipValidation(String fileName) throws Exception { - - SoapMessage message = loadSaajMessage(fileName); - MessageContext messageContext = new DefaultMessageContext(message, soapMessageFactory); - - assertThat(interceptor.handleRequest(messageContext, null)).isTrue(); - } - - private SaajSoapMessage loadSaajMessage(String fileName) throws SOAPException, IOException { - - MimeHeaders mimeHeaders = new MimeHeaders(); - mimeHeaders.addHeader("Content-Type", "text/xml"); - Resource resource = new ClassPathResource(fileName, getClass()); - - assertThat(resource.exists()).isTrue(); - - try (InputStream is = resource.getInputStream()) { - return new SaajSoapMessage(messageFactory.createMessage(mimeHeaders, is)); - } - } -} +package org.springframework.ws.soap.security; + +import static org.assertj.core.api.Assertions.*; + +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.SOAPException; + +import java.io.IOException; +import java.io.InputStream; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.ws.context.DefaultMessageContext; +import org.springframework.ws.context.MessageContext; +import org.springframework.ws.soap.SoapMessage; +import org.springframework.ws.soap.saaj.SaajSoapMessage; +import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; + +public class SkipValidationWsSecurityInterceptorTest { + + private MessageFactory messageFactory; + private AbstractWsSecurityInterceptor interceptor; + private SaajSoapMessageFactory soapMessageFactory; + + @BeforeEach + public void setUp() throws Exception { + + messageFactory = MessageFactory.newInstance(); + soapMessageFactory = new SaajSoapMessageFactory(messageFactory); + interceptor = new AbstractWsSecurityInterceptor() { + + @Override + protected void validateMessage(SoapMessage soapMessage, MessageContext messageContext) + throws WsSecurityValidationException { + fail("validation must be skipped."); + } + + @Override + protected void secureMessage(SoapMessage soapMessage, MessageContext messageContext) + throws WsSecuritySecurementException {} + + @Override + protected void cleanUp() {} + }; + interceptor.setSkipValidationIfNoHeaderPresent(true); + } + + @Test + public void testSkipValidationOnNoHeader() throws Exception { + doTestSkipValidation("noHeader-soap.xml"); + } + + @Test + public void testSkipValidationOnEmptyHeader() throws Exception { + doTestSkipValidation("emptyHeader-soap.xml"); + } + + @Test + public void testSkipValidationOnNoSecurityHeader() throws Exception { + doTestSkipValidation("noSecurityHeader-soap.xml"); + } + + private void doTestSkipValidation(String fileName) throws Exception { + + SoapMessage message = loadSaajMessage(fileName); + MessageContext messageContext = new DefaultMessageContext(message, soapMessageFactory); + + assertThat(interceptor.handleRequest(messageContext, null)).isTrue(); + } + + private SaajSoapMessage loadSaajMessage(String fileName) throws SOAPException, IOException { + + MimeHeaders mimeHeaders = new MimeHeaders(); + mimeHeaders.addHeader("Content-Type", "text/xml"); + Resource resource = new ClassPathResource(fileName, getClass()); + + assertThat(resource.exists()).isTrue(); + + try (InputStream is = resource.getInputStream()) { + return new SaajSoapMessage(messageFactory.createMessage(mimeHeaders, is)); + } + } +} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jInterceptorTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jInterceptorTest.java deleted file mode 100644 index 11f0fac8..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jInterceptorTest.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2008 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.ws.soap.security.wss4j2; - -public class AxiomWss4jInterceptorTest extends Wss4jInterceptorTestCase { - -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorEncryptionTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorEncryptionTest.java deleted file mode 100644 index b89e607b..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorEncryptionTest.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2008 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.ws.soap.security.wss4j2; - -public class AxiomWss4jMessageInterceptorEncryptionTest extends Wss4jMessageInterceptorEncryptionTestCase { - -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorHeaderTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorHeaderTest.java deleted file mode 100644 index 645fbdff..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorHeaderTest.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2008 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.ws.soap.security.wss4j2; - -public class AxiomWss4jMessageInterceptorHeaderTest extends Wss4jMessageInterceptorHeaderTestCase { - -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSamlTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSamlTest.java deleted file mode 100644 index 0f2bba4f..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSamlTest.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.springframework.ws.soap.security.wss4j2; - -public class AxiomWss4jMessageInterceptorSamlTest extends Wss4jMessageInterceptorSamlTestCase { - -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSignTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSignTest.java deleted file mode 100644 index e590d374..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSignTest.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2008 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.ws.soap.security.wss4j2; - -public class AxiomWss4jMessageInterceptorSignTest extends Wss4jMessageInterceptorSignTestCase { - -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSoapActionTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSoapActionTest.java deleted file mode 100644 index 24c25012..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSoapActionTest.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2008 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.ws.soap.security.wss4j2; - -public class AxiomWss4jMessageInterceptorSoapActionTest extends Wss4jMessageInterceptorSoapActionTestCase { - -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSpringSecurityCallbackHandlerTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSpringSecurityCallbackHandlerTest.java deleted file mode 100644 index 9b6120a0..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorSpringSecurityCallbackHandlerTest.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2008 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.ws.soap.security.wss4j2; - -public class AxiomWss4jMessageInterceptorSpringSecurityCallbackHandlerTest - extends Wss4jMessageInterceptorSpringSecurityCallbackHandlerTestCase { - -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorTimestampTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorTimestampTest.java deleted file mode 100644 index 00c059f2..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorTimestampTest.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2008 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.ws.soap.security.wss4j2; - -public class AxiomWss4jMessageInterceptorTimestampTest extends Wss4jMessageInterceptorTimestampTestCase { - -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorUsernameTokenSignatureTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorUsernameTokenSignatureTest.java deleted file mode 100644 index 24d7d556..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorUsernameTokenSignatureTest.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2008 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.ws.soap.security.wss4j2; - -public class AxiomWss4jMessageInterceptorUsernameTokenSignatureTest - extends Wss4jMessageInterceptorUsernameTokenSignatureTestCase { - -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorUsernameTokenTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorUsernameTokenTest.java deleted file mode 100644 index 28803872..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorUsernameTokenTest.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2008 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.ws.soap.security.wss4j2; - -public class AxiomWss4jMessageInterceptorUsernameTokenTest extends Wss4jMessageInterceptorUsernameTokenTestCase { - -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorX509Test.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorX509Test.java deleted file mode 100644 index c429c4a9..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/AxiomWss4jMessageInterceptorX509Test.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2008 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.ws.soap.security.wss4j2; - -/** @author tareq */ -public class AxiomWss4jMessageInterceptorX509Test extends Wss4jMessageInterceptorX509TestCase { - -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/SaajWss4jMessageInterceptorSignTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/SaajWss4jMessageInterceptorSignTest.java index 71a5f8b4..5f804c10 100644 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/SaajWss4jMessageInterceptorSignTest.java +++ b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/SaajWss4jMessageInterceptorSignTest.java @@ -18,15 +18,16 @@ package org.springframework.ws.soap.security.wss4j2; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.SOAPHeader; +import jakarta.xml.soap.SOAPHeaderElement; +import jakarta.xml.soap.SOAPMessage; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Iterator; import javax.xml.namespace.QName; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPHeader; -import javax.xml.soap.SOAPHeaderElement; -import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.dom.DOMResult; diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/Wss4jTestCase.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/Wss4jTestCase.java index f399a00c..b2660ae8 100644 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/Wss4jTestCase.java +++ b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/wss4j2/Wss4jTestCase.java @@ -18,18 +18,17 @@ package org.springframework.ws.soap.security.wss4j2; import static org.assertj.core.api.Assertions.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.MimeHeaders; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; + import java.io.InputStream; import java.util.HashMap; import java.util.Map; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; import javax.xml.transform.dom.DOMSource; -import org.apache.axiom.om.OMXMLBuilderFactory; -import org.apache.axiom.soap.SOAPModelBuilder; import org.junit.jupiter.api.BeforeEach; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; @@ -39,9 +38,6 @@ import org.springframework.ws.context.MessageContext; import org.springframework.ws.soap.SoapMessage; import org.springframework.ws.soap.SoapMessageFactory; import org.springframework.ws.soap.SoapVersion; -import org.springframework.ws.soap.axiom.AxiomSoapMessage; -import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory; -import org.springframework.ws.soap.axiom.support.AxiomUtils; import org.springframework.ws.soap.saaj.SaajSoapMessage; import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; import org.springframework.xml.transform.StringSource; @@ -55,8 +51,6 @@ public abstract class Wss4jTestCase { protected MessageFactory saajSoap12MessageFactory; - protected final boolean axiomTest = this.getClass().getSimpleName().startsWith("Axiom"); - protected final boolean saajTest = this.getClass().getSimpleName().startsWith("Saaj"); protected Jaxp13XPathTemplate xpathTemplate = new Jaxp13XPathTemplate(); @@ -64,8 +58,8 @@ public abstract class Wss4jTestCase { @BeforeEach public final void setUp() throws Exception { - if (!axiomTest && !saajTest) { - throw new IllegalArgumentException("test class name must start with either Axiom or Saaj"); + if (!saajTest) { + throw new IllegalArgumentException("test class name must start with Saaj"); } saajSoap11MessageFactory = MessageFactory.newInstance(); @@ -148,48 +142,12 @@ public abstract class Wss4jTestCase { } } - protected AxiomSoapMessage loadAxiom11Message(String fileName) throws Exception { - - Resource resource = new ClassPathResource(fileName, getClass()); - - assertThat(resource.exists()).isTrue(); - - try (InputStream is = resource.getInputStream()) { - - SOAPModelBuilder builder = OMXMLBuilderFactory.createSOAPModelBuilder(is, null); - org.apache.axiom.soap.SOAPMessage soapMessage = builder.getSOAPMessage(); - builder.detach(); - return new AxiomSoapMessage(soapMessage, "", true, true); - } - } - - @SuppressWarnings("Since15") - protected AxiomSoapMessage loadAxiom12Message(String fileName) throws Exception { - - Resource resource = new ClassPathResource(fileName, getClass()); - - assertThat(resource.exists()).isTrue(); - - try (InputStream is = resource.getInputStream()) { - - SOAPModelBuilder builder = OMXMLBuilderFactory.createSOAPModelBuilder(is, null); - org.apache.axiom.soap.SOAPMessage soapMessage = builder.getSOAPMessage(); - builder.detach(); - return new AxiomSoapMessage(soapMessage, "", true, true); - } - } - protected Object getMessage(SoapMessage soapMessage) { if (soapMessage instanceof SaajSoapMessage) { return ((SaajSoapMessage) soapMessage).getSaajMessage(); } - if (soapMessage instanceof AxiomSoapMessage) { - return ((AxiomSoapMessage) soapMessage).getAxiomMessage(); - - } - throw new IllegalArgumentException("Illegal message: " + soapMessage); } @@ -200,11 +158,6 @@ public abstract class Wss4jTestCase { return; } - if (soapMessage instanceof AxiomSoapMessage) { - ((AxiomSoapMessage) soapMessage).setAxiomMessage((org.apache.axiom.soap.SOAPMessage) message); - return; - } - throw new IllegalArgumentException("Illegal message: " + message); } @@ -212,10 +165,6 @@ public abstract class Wss4jTestCase { protected SoapMessage loadSoap11Message(String fileName) throws Exception { - if (axiomTest) { - return loadAxiom11Message(fileName); - } - if (saajTest) { return loadSaaj11Message(fileName); } @@ -225,10 +174,6 @@ public abstract class Wss4jTestCase { protected SoapMessage loadSoap12Message(String fileName) throws Exception { - if (axiomTest) { - return loadAxiom12Message(fileName); - } - if (saajTest) { return loadSaaj12Message(fileName); } @@ -238,10 +183,6 @@ public abstract class Wss4jTestCase { protected SoapMessageFactory getSoap11MessageFactory() { - if (axiomTest) { - return new AxiomSoapMessageFactory(); - } - if (saajTest) { return new SaajSoapMessageFactory(saajSoap11MessageFactory); } @@ -252,9 +193,7 @@ public abstract class Wss4jTestCase { protected SoapMessageFactory getSoap12MessageFactory() { SoapMessageFactory messageFactory; - if (axiomTest) { - messageFactory = new AxiomSoapMessageFactory(); - } else if (saajTest) { + if (saajTest) { messageFactory = new SaajSoapMessageFactory(saajSoap12MessageFactory); } else throw new IllegalArgumentException(); @@ -264,9 +203,6 @@ public abstract class Wss4jTestCase { protected Document getDocument(SoapMessage message) { - if (axiomTest) { - return AxiomUtils.toDocument(((AxiomSoapMessage) message).getAxiomMessage().getSOAPEnvelope()); - } if (saajTest) { return ((SaajSoapMessage) message).getSaajMessage().getSOAPPart(); } diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/AbstractXwssMessageInterceptorKeyStoreTestCase.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/AbstractXwssMessageInterceptorKeyStoreTestCase.java deleted file mode 100644 index a516dcdc..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/AbstractXwssMessageInterceptorKeyStoreTestCase.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss; - -import java.io.InputStream; -import java.security.KeyStore; -import java.security.PrivateKey; -import java.security.cert.X509Certificate; - -public abstract class AbstractXwssMessageInterceptorKeyStoreTestCase extends AbstractXwssMessageInterceptorTestCase { - - protected X509Certificate certificate; - - protected PrivateKey privateKey; - - @Override - protected void onSetup() throws Exception { - - KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - - try (InputStream is = getClass().getResourceAsStream("test-keystore.jks")) { - keyStore.load(is, "password".toCharArray()); - } - - certificate = (X509Certificate) keyStore.getCertificate("alias"); - privateKey = (PrivateKey) keyStore.getKey("alias", "password".toCharArray()); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/AbstractXwssMessageInterceptorTestCase.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/AbstractXwssMessageInterceptorTestCase.java deleted file mode 100644 index 0e38a17f..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/AbstractXwssMessageInterceptorTestCase.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss; - -import static org.assertj.core.api.Assertions.*; - -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; - -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; - -import org.junit.jupiter.api.BeforeEach; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; -import org.springframework.ws.soap.saaj.SaajSoapMessage; -import org.springframework.xml.xpath.XPathExpression; -import org.springframework.xml.xpath.XPathExpressionFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -public abstract class AbstractXwssMessageInterceptorTestCase { - - protected XwsSecurityInterceptor interceptor; - - private MessageFactory messageFactory; - - private Map namespaces; - - @BeforeEach - public final void setUp() throws Exception { - - interceptor = new XwsSecurityInterceptor(); - messageFactory = MessageFactory.newInstance(); - namespaces = new HashMap(4); - namespaces.put("SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/"); - namespaces.put("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); - namespaces.put("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"); - namespaces.put("ds", "http://www.w3.org/2000/09/xmldsig#"); - namespaces.put("xenc", "http://www.w3.org/2001/04/xmlenc#"); - onSetup(); - } - - protected void assertXpathEvaluatesTo(String expectedValue, String xpathExpression, SOAPMessage soapMessage) { - - XPathExpression expression = XPathExpressionFactory.createXPathExpression(xpathExpression, namespaces); - Document document = soapMessage.getSOAPPart(); - String actualValue = expression.evaluateAsString(document); - - assertThat(actualValue).isEqualTo(expectedValue); - } - - protected void assertXpathExists(String xpathExpression, SOAPMessage soapMessage) { - - XPathExpression expression = XPathExpressionFactory.createXPathExpression(xpathExpression, namespaces); - Document document = soapMessage.getSOAPPart(); - Node node = expression.evaluateAsNode(document); - - assertThat(node).isNotNull(); - } - - protected void assertXpathNotExists(String xpathExpression, SOAPMessage soapMessage) { - - XPathExpression expression = XPathExpressionFactory.createXPathExpression(xpathExpression, namespaces); - Document document = soapMessage.getSOAPPart(); - Node node = expression.evaluateAsNode(document); - - assertThat(node).isNull(); - } - - protected SaajSoapMessage loadSaajMessage(String fileName) throws SOAPException, IOException { - - MimeHeaders mimeHeaders = new MimeHeaders(); - mimeHeaders.addHeader("Content-Type", "text/xml"); - Resource resource = new ClassPathResource(fileName, getClass()); - - assertThat(resource.exists()).isTrue(); - - try (InputStream is = resource.getInputStream()) { - return new SaajSoapMessage(messageFactory.createMessage(mimeHeaders, is)); - } - } - - protected void onSetup() throws Exception {} -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwsSecurityInterceptorTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwsSecurityInterceptorTest.java deleted file mode 100644 index 191687ad..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwsSecurityInterceptorTest.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright 2005-2011 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.ws.soap.security.xwss; - -import static org.assertj.core.api.Assertions.*; - -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPMessage; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.ws.context.DefaultMessageContext; -import org.springframework.ws.context.MessageContext; -import org.springframework.ws.soap.SoapMessage; -import org.springframework.ws.soap.saaj.SaajSoapMessage; -import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; -import org.springframework.ws.soap.security.WsSecurityValidationException; - -public class XwsSecurityInterceptorTest { - - private MessageFactory messageFactory; - - @BeforeEach - public void setUp() throws Exception { - messageFactory = MessageFactory.newInstance(); - } - - @Test - public void testHandleServerRequest() throws Exception { - - final SOAPMessage request = messageFactory.createMessage(); - final SOAPMessage validatedRequest = messageFactory.createMessage(); - - XwsSecurityInterceptor interceptor = new XwsSecurityInterceptor() { - - @Override - protected void secureMessage(SoapMessage soapMessage, MessageContext messageContext) - throws XwsSecuritySecurementException { - fail("secure not expected"); - } - - @Override - protected void validateMessage(SoapMessage message, MessageContext messageContext) - throws WsSecurityValidationException { - - SaajSoapMessage saajSoapMessage = (SaajSoapMessage) message; - - assertThat(saajSoapMessage.getSaajMessage()).isEqualTo(request); - - saajSoapMessage.setSaajMessage(validatedRequest); - } - - }; - MessageContext context = new DefaultMessageContext(new SaajSoapMessage(request), - new SaajSoapMessageFactory(messageFactory)); - interceptor.handleRequest(context, null); - - assertThat(((SaajSoapMessage) context.getRequest()).getSaajMessage()).isEqualTo(validatedRequest); - } - - @Test - public void testHandleServerResponse() throws Exception { - - final SOAPMessage securedResponse = messageFactory.createMessage(); - final boolean[] cleanupCalled = new boolean[1]; - cleanupCalled[0] = false; - - XwsSecurityInterceptor interceptor = new XwsSecurityInterceptor() { - - @Override - protected void secureMessage(SoapMessage message, MessageContext messageContext) - throws XwsSecuritySecurementException { - - SaajSoapMessage saajSoapMessage = (SaajSoapMessage) message; - saajSoapMessage.setSaajMessage(securedResponse); - } - - @Override - protected void validateMessage(SoapMessage soapMessage, MessageContext messageContext) - throws WsSecurityValidationException { - fail("validate not expected"); - } - - @Override - protected void cleanUp() { - cleanupCalled[0] = true; - } - }; - - SOAPMessage request = messageFactory.createMessage(); - MessageContext context = new DefaultMessageContext(new SaajSoapMessage(request), - new SaajSoapMessageFactory(messageFactory)); - context.getResponse(); - interceptor.handleResponse(context, null); - interceptor.afterCompletion(context, null, null); - - assertThat(((SaajSoapMessage) context.getResponse()).getSaajMessage()).isEqualTo(securedResponse); - assertThat(cleanupCalled).containsExactly(true); - } - - @Test - public void testHandleServerFault() throws Exception { - - final boolean[] cleanupCalled = new boolean[1]; - cleanupCalled[0] = false; - - XwsSecurityInterceptor interceptor = new XwsSecurityInterceptor() { - - @Override - protected void cleanUp() { - cleanupCalled[0] = true; - } - }; - - SOAPMessage request = messageFactory.createMessage(); - MessageContext context = new DefaultMessageContext(new SaajSoapMessage(request), - new SaajSoapMessageFactory(messageFactory)); - context.getResponse(); - interceptor.handleFault(context, null); - interceptor.afterCompletion(context, null, null); - - assertThat(cleanupCalled).containsExactly(true); - } - - @Test - public void testHandleClientRequest() throws Exception { - - final SOAPMessage request = messageFactory.createMessage(); - final SOAPMessage securedRequest = messageFactory.createMessage(); - - XwsSecurityInterceptor interceptor = new XwsSecurityInterceptor() { - - @Override - protected void secureMessage(SoapMessage soapMessage, MessageContext messageContext) - throws XwsSecuritySecurementException { - - SaajSoapMessage saajSoapMessage = (SaajSoapMessage) soapMessage; - - assertThat(saajSoapMessage.getSaajMessage()).isEqualTo(request); - - saajSoapMessage.setSaajMessage(securedRequest); - } - - @Override - protected void validateMessage(SoapMessage message, MessageContext messageContext) - throws WsSecurityValidationException { - fail("validate not expected"); - } - - }; - MessageContext context = new DefaultMessageContext(new SaajSoapMessage(request), - new SaajSoapMessageFactory(messageFactory)); - interceptor.handleRequest(context); - - assertThat(((SaajSoapMessage) context.getRequest()).getSaajMessage()).isEqualTo(securedRequest); - } - - @Test - public void testHandleClientResponse() throws Exception { - - final SOAPMessage validatedResponse = messageFactory.createMessage(); - XwsSecurityInterceptor interceptor = new XwsSecurityInterceptor() { - - @Override - protected void secureMessage(SoapMessage message, MessageContext messageContext) - throws XwsSecuritySecurementException { - fail("secure not expected"); - } - - @Override - protected void validateMessage(SoapMessage soapMessage, MessageContext messageContext) - throws WsSecurityValidationException { - - SaajSoapMessage saajSoapMessage = (SaajSoapMessage) soapMessage; - saajSoapMessage.setSaajMessage(validatedResponse); - } - - }; - SOAPMessage request = messageFactory.createMessage(); - MessageContext context = new DefaultMessageContext(new SaajSoapMessage(request), - new SaajSoapMessageFactory(messageFactory)); - context.getResponse(); - interceptor.handleResponse(context); - - assertThat(((SaajSoapMessage) context.getResponse()).getSaajMessage()).isEqualTo(validatedResponse); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwssMessageInterceptorEncryptTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwssMessageInterceptorEncryptTest.java deleted file mode 100644 index a914c5da..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwssMessageInterceptorEncryptTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss; - -import static org.assertj.core.api.Assertions.*; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.xml.soap.SOAPMessage; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.core.io.ClassPathResource; -import org.springframework.ws.soap.saaj.SaajSoapMessage; -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; - -import com.sun.xml.wss.impl.callback.DecryptionKeyCallback; -import com.sun.xml.wss.impl.callback.EncryptionKeyCallback; - -public class XwssMessageInterceptorEncryptTest extends AbstractXwssMessageInterceptorKeyStoreTestCase { - - @Test - @Disabled("Does not run under JDK 1.8") - public void encryptDefaultCertificate() throws Exception { - - interceptor.setPolicyConfiguration(new ClassPathResource("encrypt-config.xml", getClass())); - - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOf(EncryptionKeyCallback.class); - - EncryptionKeyCallback keyCallback = (EncryptionKeyCallback) callback; - - assertThat(keyCallback.getRequest()).isInstanceOf(EncryptionKeyCallback.AliasX509CertificateRequest.class); - - EncryptionKeyCallback.AliasX509CertificateRequest request = (EncryptionKeyCallback.AliasX509CertificateRequest) keyCallback - .getRequest(); - - assertThat(request.getAlias()).isEqualTo(""); - - request.setX509Certificate(certificate); - } - }; - - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("empty-soap.xml"); - interceptor.secureMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathExists("SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:BinarySecurityToken", result); - assertXpathExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/xenc:EncryptedKey", result); - } - - @Test - @Disabled("Does not run under JDK 1.8") - public void encryptAlias() throws Exception { - - interceptor.setPolicyConfiguration(new ClassPathResource("encrypt-alias-config.xml", getClass())); - - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOf(EncryptionKeyCallback.class); - - EncryptionKeyCallback keyCallback = (EncryptionKeyCallback) callback; - - assertThat(keyCallback.getRequest()).isInstanceOf(EncryptionKeyCallback.AliasX509CertificateRequest.class); - - EncryptionKeyCallback.AliasX509CertificateRequest request = (EncryptionKeyCallback.AliasX509CertificateRequest) keyCallback - .getRequest(); - - assertThat(request.getAlias()).isEqualTo("alias"); - - request.setX509Certificate(certificate); - } - }; - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("empty-soap.xml"); - interceptor.secureMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathExists("SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:BinarySecurityToken", result); - assertXpathExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/xenc:EncryptedKey", result); - } - - @Test - @Disabled("Does not run under JDK 1.8") - public void testDecrypt() throws Exception { - - interceptor.setPolicyConfiguration(new ClassPathResource("decrypt-config.xml", getClass())); - - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOf(DecryptionKeyCallback.class); - - DecryptionKeyCallback keyCallback = (DecryptionKeyCallback) callback; - - assertThat(keyCallback.getRequest()).isInstanceOf(DecryptionKeyCallback.X509CertificateBasedRequest.class); - - DecryptionKeyCallback.X509CertificateBasedRequest request = (DecryptionKeyCallback.X509CertificateBasedRequest) keyCallback - .getRequest(); - - assertThat(request.getX509Certificate()).isEqualTo(certificate); - - request.setPrivateKey(privateKey); - } - }; - - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("encrypted-soap.xml"); - interceptor.validateMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathNotExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security", result); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwssMessageInterceptorSignTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwssMessageInterceptorSignTest.java deleted file mode 100644 index e4bf646b..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwssMessageInterceptorSignTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss; - -import static org.assertj.core.api.Assertions.*; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.xml.soap.SOAPMessage; - -import org.junit.jupiter.api.Test; -import org.springframework.core.io.ClassPathResource; -import org.springframework.ws.soap.saaj.SaajSoapMessage; -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; - -import com.sun.xml.wss.impl.callback.CertificateValidationCallback; -import com.sun.xml.wss.impl.callback.SignatureKeyCallback; - -public class XwssMessageInterceptorSignTest extends AbstractXwssMessageInterceptorKeyStoreTestCase { - - @Test - public void testSignDefaultCertificate() throws Exception { - - interceptor.setPolicyConfiguration(new ClassPathResource("sign-config.xml", getClass())); - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOf(SignatureKeyCallback.class); - - SignatureKeyCallback keyCallback = (SignatureKeyCallback) callback; - - assertThat(keyCallback.getRequest()).isInstanceOf(SignatureKeyCallback.DefaultPrivKeyCertRequest.class); - - SignatureKeyCallback.DefaultPrivKeyCertRequest request = (SignatureKeyCallback.DefaultPrivKeyCertRequest) keyCallback - .getRequest(); - request.setX509Certificate(certificate); - request.setPrivateKey(privateKey); - } - }; - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("empty-soap.xml"); - interceptor.secureMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathExists("SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:BinarySecurityToken", result); - assertXpathExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/ds:Signature", result); - } - - @Test - public void testSignAlias() throws Exception { - - interceptor.setPolicyConfiguration(new ClassPathResource("sign-alias-config.xml", getClass())); - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOf(SignatureKeyCallback.class); - - SignatureKeyCallback keyCallback = (SignatureKeyCallback) callback; - - assertThat(keyCallback.getRequest()).isInstanceOf(SignatureKeyCallback.AliasPrivKeyCertRequest.class); - - SignatureKeyCallback.AliasPrivKeyCertRequest request = (SignatureKeyCallback.AliasPrivKeyCertRequest) keyCallback - .getRequest(); - - assertThat(request.getAlias()).isEqualTo("alias"); - - request.setX509Certificate(certificate); - request.setPrivateKey(privateKey); - } - }; - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("empty-soap.xml"); - interceptor.secureMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathExists("SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:BinarySecurityToken", result); - assertXpathExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/ds:Signature", result); - } - - @Test - public void testValidateCertificate() throws Exception { - - interceptor.setPolicyConfiguration(new ClassPathResource("requireSignature-config.xml", getClass())); - - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOf(CertificateValidationCallback.class); - - CertificateValidationCallback validationCallback = (CertificateValidationCallback) callback; - - validationCallback.setValidator(passedCertificate -> { - - assertThat(passedCertificate).isEqualTo(certificate); - return true; - }); - } - }; - - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("signed-soap.xml"); - interceptor.validateMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathNotExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security", result); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwssMessageInterceptorUsernameTokenTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwssMessageInterceptorUsernameTokenTest.java deleted file mode 100644 index 929a4922..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/XwssMessageInterceptorUsernameTokenTest.java +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss; - -import static org.assertj.core.api.Assertions.*; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.xml.soap.SOAPMessage; - -import org.junit.jupiter.api.Test; -import org.springframework.core.io.ClassPathResource; -import org.springframework.ws.soap.saaj.SaajSoapMessage; -import org.springframework.ws.soap.security.callback.AbstractCallbackHandler; - -import com.sun.xml.wss.impl.callback.PasswordCallback; -import com.sun.xml.wss.impl.callback.PasswordValidationCallback; -import com.sun.xml.wss.impl.callback.TimestampValidationCallback; -import com.sun.xml.wss.impl.callback.UsernameCallback; - -public class XwssMessageInterceptorUsernameTokenTest extends AbstractXwssMessageInterceptorTestCase { - - @Test - public void testAddUsernameTokenDigest() throws Exception { - - interceptor.setPolicyConfiguration(new ClassPathResource("usernameToken-digest-config.xml", getClass())); - - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOfAny(UsernameCallback.class, PasswordCallback.class); - - if (callback instanceof UsernameCallback) { - ((UsernameCallback) callback).setUsername("Bert"); - } else if (callback instanceof PasswordCallback) { - PasswordCallback passwordCallback = (PasswordCallback) callback; - passwordCallback.setPassword("Ernie"); - } - } - }; - - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("empty-soap.xml"); - interceptor.secureMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathEvaluatesTo("Bert", - "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Username/text()", result); - assertXpathExists( - "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Password[@Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest']", - result); - assertXpathExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Nonce", result); - assertXpathExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsu:Created", result); - } - - @Test - public void testAddUsernameTokenPlainText() throws Exception { - - interceptor.setPolicyConfiguration(new ClassPathResource("usernameToken-plainText-config.xml", getClass())); - - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOfAny(UsernameCallback.class, PasswordCallback.class); - - if (callback instanceof UsernameCallback) { - ((UsernameCallback) callback).setUsername("Bert"); - } else if (callback instanceof PasswordCallback) { - PasswordCallback passwordCallback = (PasswordCallback) callback; - passwordCallback.setPassword("Ernie"); - } - } - }; - - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("empty-soap.xml"); - interceptor.secureMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathEvaluatesTo("Bert", - "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Username/text()", result); - assertXpathEvaluatesTo("Ernie", - "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Password[@Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText']/text()", - result); - } - - @Test - public void testAddUsernameTokenPlainTextNonce() throws Exception { - - interceptor.setPolicyConfiguration(new ClassPathResource("usernameToken-plainText-nonce-config.xml", getClass())); - - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOfAny(UsernameCallback.class, PasswordCallback.class); - - if (callback instanceof UsernameCallback) { - ((UsernameCallback) callback).setUsername("Bert"); - } else if (callback instanceof PasswordCallback) { - PasswordCallback passwordCallback = (PasswordCallback) callback; - passwordCallback.setPassword("Ernie"); - } - } - }; - - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("empty-soap.xml"); - interceptor.secureMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathEvaluatesTo("Bert", - "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Username/text()", result); - assertXpathEvaluatesTo("Ernie", - "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Password[@Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText']/text()", - result); - assertXpathExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Nonce", result); - assertXpathExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsu:Created", result); - } - - @Test - public void testValidateUsernameTokenPlainText() throws Exception { - - interceptor.setPolicyConfiguration(new ClassPathResource("requireUsernameToken-plainText-config.xml", getClass())); - - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOf(PasswordValidationCallback.class); - - PasswordValidationCallback validationCallback = (PasswordValidationCallback) callback; - validationCallback.setValidator(request -> { - - assertThat(request).isInstanceOf(PasswordValidationCallback.PlainTextPasswordRequest.class); - - PasswordValidationCallback.PlainTextPasswordRequest passwordRequest = (PasswordValidationCallback.PlainTextPasswordRequest) request; - - assertThat(passwordRequest.getUsername()).isEqualTo("Bert"); - assertThat(passwordRequest.getPassword()).isEqualTo("Ernie"); - - return true; - }); - } - }; - - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("usernameTokenPlainText-soap.xml"); - interceptor.validateMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathNotExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security", result); - } - - @Test - public void testValidateUsernameTokenPlainTextNonce() throws Exception { - - interceptor - .setPolicyConfiguration(new ClassPathResource("requireUsernameToken-plainText-nonce-config.xml", getClass())); - - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOfAny(PasswordValidationCallback.class, TimestampValidationCallback.class); - - if (callback instanceof PasswordValidationCallback) { - - PasswordValidationCallback validationCallback = (PasswordValidationCallback) callback; - validationCallback.setValidator(request -> { - - assertThat(request).isInstanceOf(PasswordValidationCallback.PlainTextPasswordRequest.class); - - PasswordValidationCallback.PlainTextPasswordRequest passwordRequest = (PasswordValidationCallback.PlainTextPasswordRequest) request; - - assertThat(passwordRequest.getUsername()).isEqualTo("Bert"); - assertThat(passwordRequest.getPassword()).isEqualTo("Ernie"); - - return true; - }); - } else if (callback instanceof TimestampValidationCallback) { - - TimestampValidationCallback validationCallback = (TimestampValidationCallback) callback; - validationCallback.setValidator(request -> {}); - } - } - }; - - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("usernameTokenPlainText-nonce-soap.xml"); - interceptor.validateMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathNotExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security", result); - } - - @Test - public void testValidateUsernameTokenDigest() throws Exception { - - interceptor.setPolicyConfiguration(new ClassPathResource("requireUsernameToken-digest-config.xml", getClass())); - - CallbackHandler handler = new AbstractCallbackHandler() { - - @Override - protected void handleInternal(Callback callback) { - - assertThat(callback).isInstanceOfAny(PasswordValidationCallback.class, TimestampValidationCallback.class); - - if (callback instanceof PasswordValidationCallback) { - - PasswordValidationCallback validationCallback = (PasswordValidationCallback) callback; - - assertThat(validationCallback.getRequest()) - .isInstanceOf(PasswordValidationCallback.DigestPasswordRequest.class); - - PasswordValidationCallback.DigestPasswordRequest passwordRequest = (PasswordValidationCallback.DigestPasswordRequest) validationCallback - .getRequest(); - - assertThat(passwordRequest.getUsername()).isEqualTo("Bert"); - - passwordRequest.setPassword("Ernie"); - validationCallback.setValidator(new PasswordValidationCallback.DigestPasswordValidator()); - } else if (callback instanceof TimestampValidationCallback) { - - TimestampValidationCallback validationCallback = (TimestampValidationCallback) callback; - validationCallback.setValidator(request -> {}); - } - } - }; - - interceptor.setCallbackHandler(handler); - interceptor.afterPropertiesSet(); - SaajSoapMessage message = loadSaajMessage("usernameTokenDigest-soap.xml"); - interceptor.validateMessage(message, null); - SOAPMessage result = message.getSaajMessage(); - - assertThat(result).isNotNull(); - assertXpathNotExists("/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security", result); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/DefaultTimestampValidatorTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/DefaultTimestampValidatorTest.java deleted file mode 100644 index 5a2f2e7d..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/DefaultTimestampValidatorTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss.callback; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import com.sun.xml.wss.impl.callback.TimestampValidationCallback; - -public class DefaultTimestampValidatorTest { - - private DefaultTimestampValidator validator; - - @BeforeEach - public void setUp() { - validator = new DefaultTimestampValidator(); - } - - @Test - public void testValidate() throws Exception { - - TimestampValidationCallback.Request request = new TimestampValidationCallback.UTCTimestampRequest( - "2006-09-25T20:42:50Z", "2107-09-25T20:42:50Z", 100, Long.MAX_VALUE); - validator.validate(request); - } - - @Test - public void testValidateNoExpired() throws Exception { - - TimestampValidationCallback.Request request = new TimestampValidationCallback.UTCTimestampRequest( - "2006-09-25T20:42:50Z", null, 100, Long.MAX_VALUE); - validator.validate(request); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/KeyStoreCallbackHandlerTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/KeyStoreCallbackHandlerTest.java deleted file mode 100644 index af070b32..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/KeyStoreCallbackHandlerTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss.callback; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -public class KeyStoreCallbackHandlerTest { - - private KeyStoreCallbackHandler handler; - - @BeforeEach - public void setUp() { - handler = new KeyStoreCallbackHandler(); - } - - @Test - public void testLoadDefaultTrustStore() { - - System.setProperty("javax.net.ssl.trustStore", "/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/"); - handler.loadDefaultTrustStore(); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SimplePasswordValidationCallbackHandlerTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SimplePasswordValidationCallbackHandlerTest.java deleted file mode 100644 index b9349680..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SimplePasswordValidationCallbackHandlerTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss.callback; - -import static org.assertj.core.api.Assertions.*; - -import java.util.Properties; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import com.sun.xml.wss.impl.callback.PasswordValidationCallback; - -public class SimplePasswordValidationCallbackHandlerTest { - - private SimplePasswordValidationCallbackHandler handler; - - @BeforeEach - public void setUp() { - - handler = new SimplePasswordValidationCallbackHandler(); - Properties users = new Properties(); - users.setProperty("Bert", "Ernie"); - handler.setUsers(users); - } - - @Test - public void testPlainTextPasswordValid() throws Exception { - - PasswordValidationCallback.PlainTextPasswordRequest request = new PasswordValidationCallback.PlainTextPasswordRequest( - "Bert", "Ernie"); - PasswordValidationCallback callback = new PasswordValidationCallback(request); - handler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isTrue(); - } - - @Test - public void testPlainTextPasswordInvalid() throws Exception { - - PasswordValidationCallback.PlainTextPasswordRequest request = new PasswordValidationCallback.PlainTextPasswordRequest( - "Bert", "Big bird"); - PasswordValidationCallback callback = new PasswordValidationCallback(request); - handler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isFalse(); - } - - @Test - public void testPlainTextPasswordNoSuchUser() throws Exception { - - PasswordValidationCallback.PlainTextPasswordRequest request = new PasswordValidationCallback.PlainTextPasswordRequest( - "Big bird", "Bert"); - PasswordValidationCallback callback = new PasswordValidationCallback(request); - handler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isFalse(); - } - - @Test - public void testDigestPasswordValid() throws Exception { - - String username = "Bert"; - String nonce = "9mdsYDCrjjYRur0rxzYt2oD7"; - String passwordDigest = "kwNstEaiFOrI7B31j7GuETYvdgk="; - String creationTime = "2006-06-01T23:48:42Z"; - PasswordValidationCallback.DigestPasswordRequest request = new PasswordValidationCallback.DigestPasswordRequest( - username, passwordDigest, nonce, creationTime); - PasswordValidationCallback callback = new PasswordValidationCallback(request); - handler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isTrue(); - } - - @Test - public void testDigestPasswordInvalid() throws Exception { - - String username = "Bert"; - String nonce = "9mdsYDCrjjYRur0rxzYt2oD7"; - String passwordDigest = "kwNstEaiFOrI7B31j7GuETYvdgk"; - String creationTime = "2006-06-01T23:48:42Z"; - PasswordValidationCallback.DigestPasswordRequest request = new PasswordValidationCallback.DigestPasswordRequest( - username, passwordDigest, nonce, creationTime); - PasswordValidationCallback callback = new PasswordValidationCallback(request); - handler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isFalse(); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SimpleUsernamePasswordCallbackHandlerTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SimpleUsernamePasswordCallbackHandlerTest.java deleted file mode 100644 index 3237a6e0..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SimpleUsernamePasswordCallbackHandlerTest.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss.callback; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import com.sun.xml.wss.impl.callback.PasswordCallback; -import com.sun.xml.wss.impl.callback.UsernameCallback; - -public class SimpleUsernamePasswordCallbackHandlerTest { - - private SimpleUsernamePasswordCallbackHandler handler; - - @BeforeEach - public void setUp() { - - handler = new SimpleUsernamePasswordCallbackHandler(); - handler.setUsername("Bert"); - handler.setPassword("Ernie"); - } - - @Test - public void testUsernameCallback() throws Exception { - - UsernameCallback usernameCallback = new UsernameCallback(); - handler.handleInternal(usernameCallback); - - assertThat(usernameCallback.getUsername()).isEqualTo("Bert"); - } - - @Test - public void testPasswordCallback() throws Exception { - - PasswordCallback passwordCallback = new PasswordCallback(); - handler.handleInternal(passwordCallback); - - assertThat(passwordCallback.getPassword()).isEqualTo("Ernie"); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringCertificateValidationCallbackHandlerTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringCertificateValidationCallbackHandlerTest.java deleted file mode 100644 index ee0d3893..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringCertificateValidationCallbackHandlerTest.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2005-2012 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.ws.soap.security.xwss.callback; - -import static org.assertj.core.api.Assertions.*; -import static org.easymock.EasyMock.*; - -import java.io.InputStream; -import java.security.KeyStore; -import java.security.cert.X509Certificate; -import java.util.Collections; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.core.io.ClassPathResource; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.TestingAuthenticationToken; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.ws.soap.security.callback.CleanupCallback; -import org.springframework.ws.soap.security.x509.X509AuthenticationToken; - -import com.sun.xml.wss.impl.callback.CertificateValidationCallback; - -public class SpringCertificateValidationCallbackHandlerTest { - - private SpringCertificateValidationCallbackHandler callbackHandler; - - private AuthenticationManager authenticationManager; - - private X509Certificate certificate; - - private CertificateValidationCallback callback; - - @BeforeEach - public void setUp() throws Exception { - - callbackHandler = new SpringCertificateValidationCallbackHandler(); - authenticationManager = createMock(AuthenticationManager.class); - callbackHandler.setAuthenticationManager(authenticationManager); - KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - - try (InputStream is = new ClassPathResource("/org/springframework/ws/soap/security/xwss/test-keystore.jks") - .getInputStream()) { - keyStore.load(is, "password".toCharArray()); - } - - certificate = (X509Certificate) keyStore.getCertificate("alias"); - callback = new CertificateValidationCallback(certificate); - } - - @AfterEach - public void tearDown() { - SecurityContextHolder.clearContext(); - } - - @Test - public void testValidateCertificateValid() throws Exception { - - expect(authenticationManager.authenticate(isA(X509AuthenticationToken.class))) - .andReturn(new TestingAuthenticationToken(certificate, null, Collections. emptyList())); - - replay(authenticationManager); - - callbackHandler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isTrue(); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNotNull(); - - verify(authenticationManager); - } - - @Test - public void testValidateCertificateInvalid() throws Exception { - - expect(authenticationManager.authenticate(isA(X509AuthenticationToken.class))) - .andThrow(new BadCredentialsException("")); - - replay(authenticationManager); - - callbackHandler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isFalse(); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - - verify(authenticationManager); - } - - @Test - public void testCleanUp() throws Exception { - - TestingAuthenticationToken authentication = new TestingAuthenticationToken(new Object(), new Object(), - Collections. emptyList()); - SecurityContextHolder.getContext().setAuthentication(authentication); - - CleanupCallback cleanupCallback = new CleanupCallback(); - callbackHandler.handleInternal(cleanupCallback); - - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringDigestPasswordValidationCallbackHandlerTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringDigestPasswordValidationCallbackHandlerTest.java deleted file mode 100644 index 58158384..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringDigestPasswordValidationCallbackHandlerTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright 2005-2012 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.ws.soap.security.xwss.callback; - -import static org.assertj.core.api.Assertions.*; -import static org.easymock.EasyMock.*; - -import java.util.Collections; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.security.authentication.DisabledException; -import org.springframework.security.authentication.TestingAuthenticationToken; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.User; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.ws.soap.security.callback.CleanupCallback; - -import com.sun.xml.wss.impl.callback.PasswordValidationCallback; - -public class SpringDigestPasswordValidationCallbackHandlerTest { - - private SpringDigestPasswordValidationCallbackHandler callbackHandler; - - private UserDetailsService userDetailsService; - - private String username; - - private String password; - - private PasswordValidationCallback callback; - - @BeforeEach - public void setUp() { - // add clearContext() at the beginning of each method in case {@code SecurityContextHolder} isn't clean - SecurityContextHolder.clearContext(); - - callbackHandler = new SpringDigestPasswordValidationCallbackHandler(); - userDetailsService = createMock(UserDetailsService.class); - callbackHandler.setUserDetailsService(userDetailsService); - username = "Bert"; - password = "Ernie"; - String nonce = "9mdsYDCrjjYRur0rxzYt2oD7"; - String passwordDigest = "kwNstEaiFOrI7B31j7GuETYvdgk="; - String creationTime = "2006-06-01T23:48:42Z"; - PasswordValidationCallback.DigestPasswordRequest request = new PasswordValidationCallback.DigestPasswordRequest( - username, passwordDigest, nonce, creationTime); - callback = new PasswordValidationCallback(request); - } - - @AfterEach - public void tearDown() { - SecurityContextHolder.clearContext(); - } - - @Test - public void testAuthenticateUserDigestUserNotFound() throws Exception { - - expect(userDetailsService.loadUserByUsername(username)).andThrow(new UsernameNotFoundException(username)); - - replay(userDetailsService); - - callbackHandler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isFalse(); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - - verify(userDetailsService); - } - - @Test - public void testAuthenticateUserDigestValid() throws Exception { - - User user = new User(username, password, true, true, true, true, Collections. emptyList()); - expect(userDetailsService.loadUserByUsername(username)).andReturn(user); - - replay(userDetailsService); - - callbackHandler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isTrue(); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNotNull(); - - verify(userDetailsService); - } - - @Test - public void testAuthenticateUserDigestValidInvalid() throws Exception { - - User user = new User(username, "Big bird", true, true, true, true, Collections. emptyList()); - expect(userDetailsService.loadUserByUsername(username)).andReturn(user); - - replay(userDetailsService); - - callbackHandler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isFalse(); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - - verify(userDetailsService); - } - - @Test - public void testAuthenticateUserDigestDisabled() { - - User user = new User(username, "Ernie", false, true, true, true, Collections. emptyList()); - expect(userDetailsService.loadUserByUsername(username)).andReturn(user); - - replay(userDetailsService); - - assertThatExceptionOfType(DisabledException.class).isThrownBy(() -> callbackHandler.handleInternal(callback)); - - verify(userDetailsService); - } - - @Test - public void testCleanUp() throws Exception { - - TestingAuthenticationToken authentication = new TestingAuthenticationToken(new Object(), new Object(), - Collections. emptyList()); - SecurityContextHolder.getContext().setAuthentication(authentication); - - CleanupCallback cleanupCallback = new CleanupCallback(); - callbackHandler.handleInternal(cleanupCallback); - - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringPlainTextPasswordValidationCallbackHandlerTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringPlainTextPasswordValidationCallbackHandlerTest.java deleted file mode 100644 index 504b690d..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringPlainTextPasswordValidationCallbackHandlerTest.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2005-2012 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.ws.soap.security.xwss.callback; - -import static org.assertj.core.api.Assertions.*; -import static org.easymock.EasyMock.*; - -import java.util.Collections; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.TestingAuthenticationToken; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.ws.soap.security.callback.CleanupCallback; - -import com.sun.xml.wss.impl.callback.PasswordValidationCallback; - -public class SpringPlainTextPasswordValidationCallbackHandlerTest { - - private SpringPlainTextPasswordValidationCallbackHandler callbackHandler; - - private AuthenticationManager authenticationManager; - - private PasswordValidationCallback callback; - - private String username; - - private String password; - - @BeforeEach - public void setUp() { - - callbackHandler = new SpringPlainTextPasswordValidationCallbackHandler(); - authenticationManager = createMock(AuthenticationManager.class); - callbackHandler.setAuthenticationManager(authenticationManager); - username = "Bert"; - password = "Ernie"; - PasswordValidationCallback.PlainTextPasswordRequest request = new PasswordValidationCallback.PlainTextPasswordRequest( - username, password); - callback = new PasswordValidationCallback(request); - } - - @AfterEach - public void tearDown() { - SecurityContextHolder.clearContext(); - } - - @Test - public void testAuthenticateUserPlainTextValid() throws Exception { - - Authentication authResult = new TestingAuthenticationToken(username, password, - Collections. emptyList()); - expect(authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password))) - .andReturn(authResult); - - replay(authenticationManager); - - callbackHandler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isTrue(); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNotNull(); - - verify(authenticationManager); - } - - @Test - public void testAuthenticateUserPlainTextInvalid() throws Exception { - - expect(authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password))) - .andThrow(new BadCredentialsException("")); - - replay(authenticationManager); - - callbackHandler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isFalse(); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - - verify(authenticationManager); - } - - @Test - public void testCleanUp() throws Exception { - - TestingAuthenticationToken authentication = new TestingAuthenticationToken(new Object(), new Object(), - Collections. emptyList()); - SecurityContextHolder.getContext().setAuthentication(authentication); - - CleanupCallback cleanupCallback = new CleanupCallback(); - callbackHandler.handleInternal(cleanupCallback); - - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringUsernamePasswordCallbackHandlerTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringUsernamePasswordCallbackHandlerTest.java deleted file mode 100644 index 3c83ea01..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/SpringUsernamePasswordCallbackHandlerTest.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss.callback; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; - -import com.sun.xml.wss.impl.callback.PasswordCallback; -import com.sun.xml.wss.impl.callback.UsernameCallback; - -public class SpringUsernamePasswordCallbackHandlerTest { - - private SpringUsernamePasswordCallbackHandler handler; - - @BeforeEach - public void setUp() { - - handler = new SpringUsernamePasswordCallbackHandler(); - Authentication authentication = new UsernamePasswordAuthenticationToken("Bert", "Ernie"); - SecurityContextHolder.getContext().setAuthentication(authentication); - } - - @AfterEach - public void tearDown() { - SecurityContextHolder.clearContext(); - } - - @Test - public void testUsernameCallback() throws Exception { - - UsernameCallback usernameCallback = new UsernameCallback(); - handler.handleInternal(usernameCallback); - - assertThat(usernameCallback.getUsername()).isEqualTo("Bert"); - } - - @Test - public void testPasswordCallback() throws Exception { - - PasswordCallback passwordCallback = new PasswordCallback(); - handler.handleInternal(passwordCallback); - - assertThat(passwordCallback.getPassword()).isEqualTo("Ernie"); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/CertificateLoginModule.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/CertificateLoginModule.java deleted file mode 100644 index d8173672..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/CertificateLoginModule.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback.jaas; - -import java.security.Principal; -import java.util.Map; - -import javax.security.auth.Subject; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.spi.LoginModule; -import javax.security.auth.x500.X500Principal; - -public class CertificateLoginModule implements LoginModule { - - private Subject subject; - - private boolean loginSuccessful = false; - - @Override - public boolean abort() { - return true; - } - - @Override - public boolean commit() { - - if (!loginSuccessful) { - subject.getPrincipals().clear(); - subject.getPrivateCredentials().clear(); - return false; - } - return true; - } - - @Override - public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, - Map options) { - this.subject = subject; - } - - @Override - public boolean login() { - - if (subject == null) { - return false; - } - - String name = getName(subject); - - loginSuccessful = "CN=Arjen Poutsma,OU=Spring-WS,O=Interface21,L=Amsterdam,ST=Unknown,C=NL".equals(name); - - return loginSuccessful; - } - - @Override - public boolean logout() { - - subject.getPrincipals().clear(); - subject.getPrivateCredentials().clear(); - return true; - } - - private String getName(Subject subject) { - - for (Principal principal : subject.getPrincipals()) { - if (principal instanceof X500Principal) { - return principal.getName(); - } - } - - return null; - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasCertificateValidationCallbackHandlerTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasCertificateValidationCallbackHandlerTest.java deleted file mode 100644 index 3cb4490b..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasCertificateValidationCallbackHandlerTest.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss.callback.jaas; - -import static org.assertj.core.api.Assertions.*; - -import java.io.InputStream; -import java.security.KeyStore; -import java.security.cert.X509Certificate; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.core.io.ClassPathResource; - -import com.sun.xml.wss.impl.callback.CertificateValidationCallback; - -public class JaasCertificateValidationCallbackHandlerTest { - - private JaasCertificateValidationCallbackHandler callbackHandler; - - private CertificateValidationCallback callback; - - @BeforeEach - public void setUp() throws Exception { - - System.setProperty("java.security.auth.login.config", getClass().getResource("jaas.config").toString()); - callbackHandler = new JaasCertificateValidationCallbackHandler(); - callbackHandler.setLoginContextName("Certificate"); - KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - - try (InputStream is = new ClassPathResource("/org/springframework/ws/soap/security/xwss/test-keystore.jks") - .getInputStream()) { - keyStore.load(is, "password".toCharArray()); - } - - X509Certificate certificate = (X509Certificate) keyStore.getCertificate("alias"); - callback = new CertificateValidationCallback(certificate); - } - - @Test - public void testValidateCertificateValid() throws Exception { - - callbackHandler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isTrue(); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasPlainTextPasswordValidationCallbackHandlerTest.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasPlainTextPasswordValidationCallbackHandlerTest.java deleted file mode 100644 index 25ad4726..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/JaasPlainTextPasswordValidationCallbackHandlerTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2005-2010 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.ws.soap.security.xwss.callback.jaas; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import com.sun.xml.wss.impl.callback.PasswordValidationCallback; - -public class JaasPlainTextPasswordValidationCallbackHandlerTest { - - private JaasPlainTextPasswordValidationCallbackHandler callbackHandler; - - @BeforeEach - public void setUp() { - - System.setProperty("java.security.auth.login.config", getClass().getResource("jaas.config").toString()); - callbackHandler = new JaasPlainTextPasswordValidationCallbackHandler(); - callbackHandler.setLoginContextName("PlainText"); - } - - @Test - public void testAuthenticateUserPlainTextValid() throws Exception { - - PasswordValidationCallback.PlainTextPasswordRequest request = new PasswordValidationCallback.PlainTextPasswordRequest( - "Bert", "Ernie"); - PasswordValidationCallback callback = new PasswordValidationCallback(request); - callbackHandler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isTrue(); - } - - @Test - public void testAuthenticateUserPlainTextInvalid() throws Exception { - - PasswordValidationCallback.PlainTextPasswordRequest request = new PasswordValidationCallback.PlainTextPasswordRequest( - "Bert", "Big bird"); - PasswordValidationCallback callback = new PasswordValidationCallback(request); - callbackHandler.handleInternal(callback); - boolean authenticated = callback.getResult(); - - assertThat(authenticated).isFalse(); - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/PlainTextLoginModule.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/PlainTextLoginModule.java deleted file mode 100644 index 4915f5c1..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/PlainTextLoginModule.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback.jaas; - -import java.security.Principal; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.security.auth.Subject; -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.NameCallback; -import javax.security.auth.callback.PasswordCallback; -import javax.security.auth.login.LoginException; -import javax.security.auth.spi.LoginModule; - -public class PlainTextLoginModule implements LoginModule { - - private Subject subject; - - private CallbackHandler callbackHandler; - - private boolean success; - - private List principals = new ArrayList(); - - @Override - public boolean abort() { - - success = false; - logout(); - return true; - } - - @Override - public boolean commit() throws LoginException { - - if (success) { - if (subject.isReadOnly()) { - throw new LoginException("Subject is read-only"); - } - try { - subject.getPrincipals().addAll(principals); - principals.clear(); - return true; - } catch (Exception e) { - throw new LoginException(e.getMessage()); - } - } else { - principals.clear(); - } - return true; - } - - @Override - public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, - Map options) { - - this.subject = subject; - this.callbackHandler = callbackHandler; - } - - @Override - public boolean login() throws LoginException { - - if (callbackHandler == null) { - return false; - } - - try { - NameCallback nameCallback = new NameCallback("Username: "); - PasswordCallback passwordCallback = new PasswordCallback("Password: ", false); - Callback[] callbacks = new Callback[] { nameCallback, passwordCallback }; - - callbackHandler.handle(callbacks); - - String username = nameCallback.getName(); - String password = new String(passwordCallback.getPassword()); - - ((PasswordCallback) callbacks[1]).clearPassword(); - - success = validate(username, password); - - callbacks[0] = null; - callbacks[1] = null; - - if (!success) { - throw new LoginException("Authentication failed: Password does not match"); - } - - return true; - } catch (LoginException ex) { - throw ex; - } catch (Exception ex) { - success = false; - throw new LoginException(ex.getMessage()); - } - } - - private boolean validate(String username, String password) { - - if ("Bert".equals(username) && "Ernie".equals(password)) { - this.principals.add(new SimplePrincipal(username)); - return true; - } else { - return false; - } - } - - @Override - public boolean logout() { - - principals.clear(); - - for (SimplePrincipal principal : subject.getPrincipals(SimplePrincipal.class)) { - subject.getPrincipals().remove(principal); - } - - return true; - } -} diff --git a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/SimplePrincipal.java b/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/SimplePrincipal.java deleted file mode 100644 index 88af9837..00000000 --- a/spring-ws-security/src/test/java/org/springframework/ws/soap/security/xwss/callback/jaas/SimplePrincipal.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2005-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.ws.soap.security.xwss.callback.jaas; - -import java.security.Principal; - -public final class SimplePrincipal implements Principal { - - private String name; - - public SimplePrincipal() { - name = ""; - } - - public SimplePrincipal(String name) { - this.name = name; - } - - @Override - public String getName() { - return name; - } - - public int hashCode() { - return name.hashCode(); - } - - public boolean equals(Object o) { - - if (!(o instanceof SimplePrincipal)) { - return false; - } - return name.equals(((SimplePrincipal) o).name); - } - - public String toString() { - return name; - } -} diff --git a/spring-ws-support/.gitignore b/spring-ws-support/.gitignore index 27399402..e65da4b5 100644 --- a/spring-ws-support/.gitignore +++ b/spring-ws-support/.gitignore @@ -3,4 +3,4 @@ target .classpath .project .settings - +data diff --git a/spring-ws-support/pom.xml b/spring-ws-support/pom.xml index 7f2bbcbe..5290c91a 100644 --- a/spring-ws-support/pom.xml +++ b/spring-ws-support/pom.xml @@ -42,24 +42,23 @@ test - - javax.jms - javax.jms-api - ${jms.version} - provided - - - javax.mail - javax.mail-api - ${javax-mail.version} - provided - - - com.sun.mail - javax.mail - ${sun-mail.version} - - + + jakarta.jms + jakarta.jms-api + ${jakarta-jms.version} + provided + + + jakarta.mail + jakarta.mail-api + ${jakarta-mail.version} + + + com.sun.mail + jakarta.mail + ${jakarta-mail.version} + + org.igniterealtime.smack smack-tcp ${smack.version} @@ -91,40 +90,45 @@ - - - org.apache.activemq - activemq-core - ${activemq.version} - test - - - org.apache.geronimo.specs - geronimo-jms_1.1_spec - - - commons-logging - commons-logging - - - - - org.jvnet.mock-javamail - mock-javamail - ${mock-javamail.version} - test - - - javax.mail - mail - - - junit - junit - - - + + org.apache.activemq + artemis-jakarta-server + ${activemq.version} + test + + + jakarta.jms + jakarta.jms-api + + + + + + javax.json + javax.json-api + 1.1.4 + test + + + + com.icegreen + greenmail + ${greenmail.version} + test + + + com.icegreen + greenmail-junit5 + ${greenmail.version} + test + + + com.icegreen + greenmail-spring + ${greenmail.version} + test + @@ -155,4 +159,4 @@ - \ No newline at end of file + diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/http/HttpExchangeConnection.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/http/HttpExchangeConnection.java index af80aa2f..95dac22a 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/http/HttpExchangeConnection.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/http/HttpExchangeConnection.java @@ -16,6 +16,8 @@ package org.springframework.ws.transport.http; +import jakarta.xml.soap.SOAPConstants; + import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; @@ -27,7 +29,6 @@ import java.util.Iterator; import java.util.List; import javax.xml.namespace.QName; -import javax.xml.soap.SOAPConstants; import org.springframework.util.Assert; import org.springframework.util.FileCopyUtils; diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/BytesMessageInputStream.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/BytesMessageInputStream.java index 22aa932c..a7621765 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/BytesMessageInputStream.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/BytesMessageInputStream.java @@ -16,13 +16,13 @@ package org.springframework.ws.transport.jms; +import jakarta.jms.BytesMessage; +import jakarta.jms.JMSException; +import jakarta.jms.MessageEOFException; + import java.io.IOException; import java.io.InputStream; -import javax.jms.BytesMessage; -import javax.jms.JMSException; -import javax.jms.MessageEOFException; - import org.springframework.util.Assert; /** diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/BytesMessageOutputStream.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/BytesMessageOutputStream.java index 2959aaf6..57e30633 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/BytesMessageOutputStream.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/BytesMessageOutputStream.java @@ -16,12 +16,12 @@ package org.springframework.ws.transport.jms; +import jakarta.jms.BytesMessage; +import jakarta.jms.JMSException; + import java.io.IOException; import java.io.OutputStream; -import javax.jms.BytesMessage; -import javax.jms.JMSException; - import org.springframework.util.Assert; /** diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsMessageReceiver.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsMessageReceiver.java index bfc13ff0..b668df5c 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsMessageReceiver.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsMessageReceiver.java @@ -16,10 +16,10 @@ package org.springframework.ws.transport.jms; -import javax.jms.BytesMessage; -import javax.jms.Message; -import javax.jms.Session; -import javax.jms.TextMessage; +import jakarta.jms.BytesMessage; +import jakarta.jms.Message; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.springframework.jms.core.MessagePostProcessor; import org.springframework.ws.transport.WebServiceMessageReceiver; diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java index a4326373..4d1e8939 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java @@ -19,19 +19,12 @@ package org.springframework.ws.transport.jms; import java.io.IOException; import java.net.URI; -import javax.jms.BytesMessage; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.TextMessage; -import javax.jms.Topic; - +import jakarta.jms.Connection; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.Session; import org.springframework.jms.connection.ConnectionFactoryUtils; import org.springframework.jms.core.MessagePostProcessor; import org.springframework.jms.support.JmsUtils; @@ -58,7 +51,7 @@ import org.springframework.ws.transport.jms.support.JmsTransportUtils; * * deliveryMode * Indicates whether the request message is persistent or not. This may be PERSISTENT or - * NON_PERSISTENT. See {@link MessageProducer#setDeliveryMode(int)} + * NON_PERSISTENT. See {@link jakarta.jms.MessageProducer#setDeliveryMode(int)} * * * messageType @@ -66,7 +59,7 @@ import org.springframework.ws.transport.jms.support.JmsTransportUtils; * * * priority - * The JMS priority (0-9) associated with the request message. See {@link MessageProducer#setPriority(int)} + * The JMS priority (0-9) associated with the request message. See {@link jakarta.jms.MessageProducer#setPriority(int)} * * * replyToName @@ -75,14 +68,14 @@ import org.springframework.ws.transport.jms.support.JmsTransportUtils; * * * timeToLive - * The lifetime, in milliseconds, of the request message. See {@link MessageProducer#setTimeToLive(long)} + * The lifetime, in milliseconds, of the request message. See {@link jakarta.jms.MessageProducer#setTimeToLive(long)} * * * *

* If the replyToName is not set, a {@link Session#createTemporaryQueue() temporary queue} is used. *

- * This class uses {@link BytesMessage} messages by default, but can be configured to send {@link TextMessage} messages + * This class uses {@link jakarta.jms.BytesMessage} messages by default, but can be configured to send {@link jakarta.jms.TextMessage} messages * instead. Note that {@code BytesMessages} are preferred, since {@code TextMessages} do not support attachments * and character encodings reliably. *

@@ -100,7 +93,7 @@ public class JmsMessageSender extends JmsDestinationAccessor implements WebServi /** Default timeout for receive operations: -1 indicates a blocking receive without timeout. */ public static final long DEFAULT_RECEIVE_TIMEOUT = -1; - /** Default encoding used to read fromn and write to {@link TextMessage} messages. */ + /** Default encoding used to read fromn and write to {@link jakarta.jms.TextMessage} messages. */ public static final String DEFAULT_TEXT_MESSAGE_ENCODING = "UTF-8"; private long receiveTimeout = DEFAULT_RECEIVE_TIMEOUT; @@ -132,13 +125,13 @@ public class JmsMessageSender extends JmsDestinationAccessor implements WebServi /** * Set the timeout to use for receive calls. The default is -1, which means no timeout. * - * @see MessageConsumer#receive(long) + * @see jakarta.jms.MessageConsumer#receive(long) */ public void setReceiveTimeout(long receiveTimeout) { this.receiveTimeout = receiveTimeout; } - /** Sets the encoding used to read from {@link TextMessage} messages. Defaults to {@code UTF-8}. */ + /** Sets the encoding used to read from {@link jakarta.jms.TextMessage} messages. Defaults to {@code UTF-8}. */ public void setTextMessageEncoding(String textMessageEncoding) { this.textMessageEncoding = textMessageEncoding; } diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsReceiverConnection.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsReceiverConnection.java index 51b41127..afc9fec8 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsReceiverConnection.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsReceiverConnection.java @@ -23,13 +23,12 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Iterator; -import javax.jms.BytesMessage; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageProducer; -import javax.jms.Session; -import javax.jms.TextMessage; - +import jakarta.jms.BytesMessage; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageProducer; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; import org.springframework.jms.core.MessagePostProcessor; import org.springframework.jms.support.JmsUtils; import org.springframework.util.Assert; diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java index 71e9d804..30fc35e6 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java @@ -16,25 +16,16 @@ package org.springframework.ws.transport.jms; +import jakarta.jms.*; + import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.lang.IllegalStateException; import java.net.URI; import java.net.URISyntaxException; import java.util.Iterator; -import javax.jms.BytesMessage; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Session; -import javax.jms.TemporaryQueue; -import javax.jms.TextMessage; - import org.springframework.jms.connection.ConnectionFactoryUtils; import org.springframework.jms.core.MessagePostProcessor; import org.springframework.jms.support.JmsUtils; @@ -230,7 +221,7 @@ public class JmsSenderConnection extends AbstractSenderConnection { } } - /** @see org.springframework.jms.core.JmsTemplate#isSessionLocallyTransacted(Session) */ + /** @see org.springframework.jms.core.JmsTemplate#isSessionLocallyTransacted(Session) (Session) */ private boolean isSessionLocallyTransacted(Session session) { return sessionTransacted && !ConnectionFactoryUtils.isSessionTransactional(session, connectionFactory); } diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsTransportConstants.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsTransportConstants.java index 9557f7f4..97a94780 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsTransportConstants.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsTransportConstants.java @@ -16,8 +16,8 @@ package org.springframework.ws.transport.jms; -import javax.jms.BytesMessage; -import javax.jms.TextMessage; +import jakarta.jms.BytesMessage; +import jakarta.jms.TextMessage; import org.springframework.ws.transport.TransportConstants; diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsTransportException.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsTransportException.java index 76c090b0..42dec0d8 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsTransportException.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/JmsTransportException.java @@ -16,7 +16,7 @@ package org.springframework.ws.transport.jms; -import javax.jms.JMSException; +import jakarta.jms.JMSException; import org.springframework.ws.transport.TransportException; diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/TextMessageInputStream.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/TextMessageInputStream.java index e06d9747..8afd493b 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/TextMessageInputStream.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/TextMessageInputStream.java @@ -16,18 +16,18 @@ package org.springframework.ws.transport.jms; +import jakarta.jms.JMSException; +import jakarta.jms.TextMessage; + import java.io.ByteArrayInputStream; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; -import javax.jms.JMSException; -import javax.jms.TextMessage; - import org.springframework.util.Assert; /** - * Input stream that wraps a {@link javax.jms.TextMessage}. + * Input stream that wraps a {@link TextMessage}. * * @author Arjen Poutsma * @since 1.5.3 diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/TextMessageOutputStream.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/TextMessageOutputStream.java index f3c22148..ed8e7741 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/TextMessageOutputStream.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/TextMessageOutputStream.java @@ -16,17 +16,17 @@ package org.springframework.ws.transport.jms; +import jakarta.jms.JMSException; +import jakarta.jms.TextMessage; + import java.io.ByteArrayOutputStream; import java.io.FilterOutputStream; import java.io.IOException; -import javax.jms.JMSException; -import javax.jms.TextMessage; - import org.springframework.util.Assert; /** - * Writer that wraps a {@link javax.jms.TextMessage}. + * Writer that wraps a {@link TextMessage}. * * @author Arjen Poutsma * @since 1.5.3 diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/WebServiceMessageListener.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/WebServiceMessageListener.java index 4594ed74..24900e92 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/WebServiceMessageListener.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/WebServiceMessageListener.java @@ -16,10 +16,9 @@ package org.springframework.ws.transport.jms; -import javax.jms.BytesMessage; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Session; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.Session; import org.springframework.jms.listener.SessionAwareMessageListener; import org.springframework.ws.WebServiceMessage; @@ -29,9 +28,9 @@ import org.springframework.ws.transport.WebServiceMessageReceiver; /** * Spring {@link SessionAwareMessageListener} that can be used to handle incoming {@link Message} service requests. *

- * Requires a {@link WebServiceMessageFactory} which is used to convert the incoming JMS {@link BytesMessage} into a - * {@link WebServiceMessage}, and passes that to the {@link WebServiceMessageReceiver} - * {@link #setMessageReceiver(WebServiceMessageReceiver) registered}. + * Requires a {@link WebServiceMessageFactory} which is used to convert the incoming JMS + * {@link jakarta.jms.BytesMessage} into a {@link WebServiceMessage}, and passes that to the + * {@link WebServiceMessageReceiver} {@link #setMessageReceiver(WebServiceMessageReceiver) registered}. * * @author Arjen Poutsma * @see #setMessageFactory(org.springframework.ws.WebServiceMessageFactory) diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/support/JmsTransportUtils.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/support/JmsTransportUtils.java index d4299d20..673ac696 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/support/JmsTransportUtils.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/jms/support/JmsTransportUtils.java @@ -16,6 +16,13 @@ package org.springframework.ws.transport.jms.support; +import jakarta.jms.DeliveryMode; +import jakarta.jms.Destination; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.Queue; +import jakarta.jms.Topic; + import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; @@ -26,13 +33,6 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.jms.DeliveryMode; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Queue; -import javax.jms.Topic; - import org.springframework.ws.transport.jms.JmsTransportConstants; /** diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailMessageReceiver.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailMessageReceiver.java index 01ab3f05..63386f5e 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailMessageReceiver.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailMessageReceiver.java @@ -16,17 +16,17 @@ package org.springframework.ws.transport.mail; -import java.util.Properties; +import jakarta.mail.Folder; +import jakarta.mail.FolderClosedException; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.Session; +import jakarta.mail.Store; +import jakarta.mail.URLName; +import jakarta.mail.internet.AddressException; +import jakarta.mail.internet.InternetAddress; -import javax.mail.Folder; -import javax.mail.FolderClosedException; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.Store; -import javax.mail.URLName; -import javax.mail.internet.AddressException; -import javax.mail.internet.InternetAddress; +import java.util.Properties; import org.springframework.scheduling.SchedulingAwareRunnable; import org.springframework.util.Assert; diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailMessageSender.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailMessageSender.java index f35eb8b5..230db0df 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailMessageSender.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailMessageSender.java @@ -16,16 +16,15 @@ package org.springframework.ws.transport.mail; +import jakarta.mail.Session; +import jakarta.mail.URLName; +import jakarta.mail.internet.AddressException; +import jakarta.mail.internet.InternetAddress; + import java.io.IOException; import java.net.URI; import java.util.Properties; -import javax.mail.Session; -import javax.mail.URLName; -import javax.mail.internet.AddressException; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; - import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; import org.springframework.ws.WebServiceMessageFactory; diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailReceiverConnection.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailReceiverConnection.java index 22353cf1..a7971a6c 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailReceiverConnection.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailReceiverConnection.java @@ -16,6 +16,17 @@ package org.springframework.ws.transport.mail; +import jakarta.activation.DataHandler; +import jakarta.activation.DataSource; +import jakarta.mail.Address; +import jakarta.mail.Header; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.Session; +import jakarta.mail.Transport; +import jakarta.mail.URLName; +import jakarta.mail.internet.InternetAddress; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -29,17 +40,6 @@ import java.util.Enumeration; import java.util.Iterator; import java.util.List; -import javax.activation.DataHandler; -import javax.activation.DataSource; -import javax.mail.Address; -import javax.mail.Header; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.URLName; -import javax.mail.internet.InternetAddress; - import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; import org.springframework.ws.WebServiceMessage; diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java index 4439f4e4..7252c11b 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java @@ -16,6 +16,22 @@ package org.springframework.ws.transport.mail; +import jakarta.activation.DataHandler; +import jakarta.activation.DataSource; +import jakarta.mail.Flags; +import jakarta.mail.Folder; +import jakarta.mail.Header; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.Session; +import jakarta.mail.Store; +import jakarta.mail.Transport; +import jakarta.mail.URLName; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeMessage; +import jakarta.mail.search.HeaderTerm; +import jakarta.mail.search.SearchTerm; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -30,22 +46,6 @@ import java.util.Enumeration; import java.util.Iterator; import java.util.List; -import javax.activation.DataHandler; -import javax.activation.DataSource; -import javax.mail.Flags; -import javax.mail.Folder; -import javax.mail.Header; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.Store; -import javax.mail.Transport; -import javax.mail.URLName; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; -import javax.mail.search.HeaderTerm; -import javax.mail.search.SearchTerm; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.util.Assert; diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailTransportException.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailTransportException.java index a5ea2a6a..c713c07d 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailTransportException.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/MailTransportException.java @@ -16,8 +16,7 @@ package org.springframework.ws.transport.mail; -import javax.mail.MessagingException; - +import jakarta.mail.MessagingException; import org.springframework.ws.transport.TransportException; /** diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/AbstractMonitoringStrategy.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/AbstractMonitoringStrategy.java index 2502b3a7..3cf16478 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/AbstractMonitoringStrategy.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/AbstractMonitoringStrategy.java @@ -16,14 +16,14 @@ package org.springframework.ws.transport.mail.monitor; -import javax.mail.FetchProfile; -import javax.mail.Flags; -import javax.mail.Folder; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.search.AndTerm; -import javax.mail.search.FlagTerm; -import javax.mail.search.SearchTerm; +import jakarta.mail.FetchProfile; +import jakarta.mail.Flags; +import jakarta.mail.Folder; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.search.AndTerm; +import jakarta.mail.search.FlagTerm; +import jakarta.mail.search.SearchTerm; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -43,8 +43,8 @@ public abstract class AbstractMonitoringStrategy implements MonitoringStrategy { private boolean deleteMessages = true; /** - * Sets whether messages should be marked as {@link javax.mail.Flags.Flag#DELETED DELETED} after they have been read. - * Default is {@code true}. + * Sets whether messages should be marked as {@link jakarta.mail.Flags.Flag#DELETED DELETED} after they have been + * read. Default is {@code true}. */ public void setDeleteMessages(boolean deleteMessages) { this.deleteMessages = deleteMessages; @@ -95,9 +95,9 @@ public abstract class AbstractMonitoringStrategy implements MonitoringStrategy { /** * Retrieves new messages from the given folder. This implementation creates a {@link SearchTerm} that searches for - * all messages in the folder that are {@link javax.mail.Flags.Flag#RECENT RECENT}, not - * {@link javax.mail.Flags.Flag#ANSWERED ANSWERED}, and not {@link javax.mail.Flags.Flag#DELETED DELETED}. The search - * term is used to {@link Folder#search(SearchTerm) search} for new messages. + * all messages in the folder that are {@link jakarta.mail.Flags.Flag#RECENT RECENT}, not + * {@link jakarta.mail.Flags.Flag#ANSWERED ANSWERED}, and not {@link jakarta.mail.Flags.Flag#DELETED DELETED}. The + * search term is used to {@link Folder#search(SearchTerm) search} for new messages. * * @param folder the folder to retrieve new messages from * @return the new messages diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/ImapIdleMonitoringStrategy.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/ImapIdleMonitoringStrategy.java index 1a4505d2..2b8476cc 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/ImapIdleMonitoringStrategy.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/ImapIdleMonitoringStrategy.java @@ -16,12 +16,12 @@ package org.springframework.ws.transport.mail.monitor; -import javax.mail.Folder; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.event.MessageCountAdapter; -import javax.mail.event.MessageCountEvent; -import javax.mail.event.MessageCountListener; +import jakarta.mail.Folder; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.event.MessageCountAdapter; +import jakarta.mail.event.MessageCountEvent; +import jakarta.mail.event.MessageCountListener; import org.springframework.util.Assert; diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/MonitoringStrategy.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/MonitoringStrategy.java index 538c5411..6fffd3bb 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/MonitoringStrategy.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/MonitoringStrategy.java @@ -16,9 +16,9 @@ package org.springframework.ws.transport.mail.monitor; -import javax.mail.Folder; -import javax.mail.Message; -import javax.mail.MessagingException; +import jakarta.mail.Folder; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; /** * Defines the contract for objects that monitor a given folder for new messages. Allows for multiple implementation diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/PollingMonitoringStrategy.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/PollingMonitoringStrategy.java index 4cbdaa8f..9ba82cb3 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/PollingMonitoringStrategy.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/PollingMonitoringStrategy.java @@ -16,8 +16,8 @@ package org.springframework.ws.transport.mail.monitor; -import javax.mail.Folder; -import javax.mail.MessagingException; +import jakarta.mail.Folder; +import jakarta.mail.MessagingException; /** * Implementation of the {@link MonitoringStrategy} interface that uses a simple polling mechanism. Defines a diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/Pop3PollingMonitoringStrategy.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/Pop3PollingMonitoringStrategy.java index 62dec553..a3826376 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/Pop3PollingMonitoringStrategy.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/monitor/Pop3PollingMonitoringStrategy.java @@ -16,10 +16,10 @@ package org.springframework.ws.transport.mail.monitor; -import javax.mail.Folder; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.internet.MimeMessage; +import jakarta.mail.Folder; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; import org.springframework.ws.transport.mail.support.MailTransportUtils; diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/support/MailTransportUtils.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/support/MailTransportUtils.java index f1a64c3e..fea79143 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/support/MailTransportUtils.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/mail/support/MailTransportUtils.java @@ -16,20 +16,18 @@ package org.springframework.ws.transport.mail.support; +import jakarta.mail.Folder; +import jakarta.mail.MessagingException; +import jakarta.mail.Service; +import jakarta.mail.URLName; +import jakarta.mail.internet.AddressException; +import jakarta.mail.internet.InternetAddress; + import java.net.URI; import java.net.URISyntaxException; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.mail.Folder; -import javax.mail.MessagingException; -import javax.mail.Service; -import javax.mail.Store; -import javax.mail.Transport; -import javax.mail.URLName; -import javax.mail.internet.AddressException; -import javax.mail.internet.InternetAddress; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.util.StringUtils; @@ -81,8 +79,8 @@ public abstract class MailTransportUtils { * in manual JavaMail code. * * @param service the JavaMail Service to close (may be {@code null}) - * @see Transport - * @see Store + * @see jakarta.mail.Transport + * @see jakarta.mail.Store */ public static void closeService(Service service) { if (service != null) { diff --git a/spring-ws-support/src/test/java/org/springframework/ws/transport/http/SimpleHttpServerFactoryBean.java b/spring-ws-support/src/test/java/org/springframework/ws/transport/http/SimpleHttpServerFactoryBean.java new file mode 100644 index 00000000..ef9c934b --- /dev/null +++ b/spring-ws-support/src/test/java/org/springframework/ws/transport/http/SimpleHttpServerFactoryBean.java @@ -0,0 +1,153 @@ +package org.springframework.ws.transport.http; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Executor; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.InitializingBean; + +import com.sun.net.httpserver.Authenticator; +import com.sun.net.httpserver.Filter; +import com.sun.net.httpserver.HttpContext; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; + +/** + * Utility class ONLY used for testing SOAP interactions through the JRE's built-in {@link HttpServer}. + */ +class SimpleHttpServerFactoryBean implements FactoryBean, InitializingBean, DisposableBean { + + protected final Logger logger = LoggerFactory.getLogger(getClass()); + + private int port = 8080; + + private String hostname; + + private int backlog = -1; + + private int shutdownDelay = 0; + + private Executor executor; + + private Map contexts; + + private List filters; + + private Authenticator authenticator; + + private HttpServer server; + + /** + * Specify the HTTP server's port. Default is 8080. + */ + public void setPort(int port) { + this.port = port; + } + + /** + * Specify the HTTP server's hostname to bind to. Default is localhost; can be overridden with a specific network + * address to bind to. + */ + public void setHostname(String hostname) { + this.hostname = hostname; + } + + /** + * Specify the HTTP server's TCP backlog. Default is -1, indicating the system's default value. + */ + public void setBacklog(int backlog) { + this.backlog = backlog; + } + + /** + * Specify the number of seconds to wait until HTTP exchanges have completed when shutting down the HTTP server. + * Default is 0. + */ + public void setShutdownDelay(int shutdownDelay) { + this.shutdownDelay = shutdownDelay; + } + + /** + * Set the JDK concurrent executor to use for dispatching incoming requests. + * + * @see HttpServer#setExecutor + */ + public void setExecutor(Executor executor) { + this.executor = executor; + } + + /** + * Register {@link HttpHandler HttpHandlers} for specific context paths. + * + * @param contexts a Map with context paths as keys and HttpHandler objects as values + */ + public void setContexts(Map contexts) { + this.contexts = contexts; + } + + /** + * Register common {@link Filter Filters} to be applied to all locally registered {@link #setContexts contexts}. + */ + public void setFilters(List filters) { + this.filters = filters; + } + + /** + * Register a common {@link Authenticator} to be applied to all locally registered {@link #setContexts contexts}. + */ + public void setAuthenticator(Authenticator authenticator) { + this.authenticator = authenticator; + } + + @Override + public void afterPropertiesSet() throws IOException { + InetSocketAddress address = (this.hostname != null ? new InetSocketAddress(this.hostname, this.port) + : new InetSocketAddress(this.port)); + this.server = HttpServer.create(address, this.backlog); + if (this.executor != null) { + this.server.setExecutor(this.executor); + } + if (this.contexts != null) { + this.contexts.forEach((key, context) -> { + HttpContext httpContext = this.server.createContext(key, context); + if (this.filters != null) { + httpContext.getFilters().addAll(this.filters); + } + if (this.authenticator != null) { + httpContext.setAuthenticator(this.authenticator); + } + }); + } + if (logger.isInfoEnabled()) { + logger.info("Starting HttpServer at address " + address); + } + this.server.start(); + } + + @Override + public HttpServer getObject() { + return this.server; + } + + @Override + public Class getObjectType() { + return (this.server != null ? this.server.getClass() : HttpServer.class); + } + + @Override + public boolean isSingleton() { + return true; + } + + @Override + public void destroy() { + logger.info("Stopping HttpServer"); + this.server.stop(this.shutdownDelay); + } +} diff --git a/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/JmsIntegrationTest.java b/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/JmsIntegrationTest.java index ca207227..785d7446 100644 --- a/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/JmsIntegrationTest.java +++ b/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/JmsIntegrationTest.java @@ -18,6 +18,11 @@ package org.springframework.ws.transport.jms; import static org.xmlunit.assertj.XmlAssert.*; +import org.apache.activemq.artemis.core.config.Configuration; +import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl; +import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -33,8 +38,23 @@ public class JmsIntegrationTest { @Autowired private WebServiceTemplate webServiceTemplate; - public void setWebServiceTemplate(WebServiceTemplate webServiceTemplate) { - this.webServiceTemplate = webServiceTemplate; + private EmbeddedActiveMQ server; + + @BeforeEach + void setUp() throws Exception { + + Configuration config = new ConfigurationImpl(); + config.addAcceptorConfiguration("vm", "vm://0"); + config.addAcceptorConfiguration("tcp", "tcp://127.0.0.1:61616"); + config.setSecurityEnabled(false); + server = new EmbeddedActiveMQ(); + server.setConfiguration(config); + server.start(); + } + + @AfterEach + void tearDown() throws Exception { + server.stop(); } @Test diff --git a/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/JmsMessageSenderIntegrationTest.java b/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/JmsMessageSenderIntegrationTest.java index 0733ae3e..d5d7a420 100644 --- a/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/JmsMessageSenderIntegrationTest.java +++ b/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/JmsMessageSenderIntegrationTest.java @@ -18,15 +18,19 @@ package org.springframework.ws.transport.jms; import static org.assertj.core.api.Assertions.*; +import jakarta.jms.BytesMessage; +import jakarta.jms.TextMessage; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; + import java.io.ByteArrayOutputStream; import java.net.URI; import java.nio.charset.StandardCharsets; -import javax.jms.BytesMessage; -import javax.jms.TextMessage; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; - +import org.apache.activemq.artemis.core.config.Configuration; +import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl; +import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -53,9 +57,24 @@ public class JmsMessageSenderIntegrationTest { private static final String SOAP_ACTION = "\"http://springframework.org/DoIt\""; + private EmbeddedActiveMQ server; + @BeforeEach public void createMessageFactory() throws Exception { messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL); + + Configuration config = new ConfigurationImpl(); + config.addAcceptorConfiguration("vm", "vm://0"); + config.addAcceptorConfiguration("tcp", "tcp://127.0.0.1:61616"); + config.setSecurityEnabled(false); + server = new EmbeddedActiveMQ(); + server.setConfiguration(config); + server.start(); + } + + @AfterEach + void tearDown() throws Exception { + server.stop(); } @Test diff --git a/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/WebServiceMessageListenerIntegrationTest.java b/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/WebServiceMessageListenerIntegrationTest.java index a4d19518..8c2056fc 100644 --- a/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/WebServiceMessageListenerIntegrationTest.java +++ b/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/WebServiceMessageListenerIntegrationTest.java @@ -18,14 +18,19 @@ package org.springframework.ws.transport.jms; import static org.assertj.core.api.Assertions.*; +import jakarta.annotation.Resource; +import jakarta.jms.BytesMessage; +import jakarta.jms.Queue; +import jakarta.jms.TextMessage; +import jakarta.jms.Topic; + import java.nio.charset.StandardCharsets; -import javax.annotation.Resource; -import javax.jms.BytesMessage; -import javax.jms.Queue; -import javax.jms.TextMessage; -import javax.jms.Topic; - +import org.apache.activemq.artemis.core.config.Configuration; +import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl; +import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -49,6 +54,25 @@ public class WebServiceMessageListenerIntegrationTest { @Autowired private Topic requestTopic; + private EmbeddedActiveMQ server; + + @BeforeEach + void setUp() throws Exception { + + Configuration config = new ConfigurationImpl(); + config.addAcceptorConfiguration("vm", "vm://0"); + config.addAcceptorConfiguration("tcp", "tcp://127.0.0.1:61616"); + config.setSecurityEnabled(false); + server = new EmbeddedActiveMQ(); + server.setConfiguration(config); + server.start(); + } + + @AfterEach + void tearDown() throws Exception { + server.stop(); + } + @Test public void testReceiveQueueBytesMessage() throws Exception { diff --git a/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/support/JmsTransportUtilsTest.java b/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/support/JmsTransportUtilsTest.java index 1615149a..59157897 100644 --- a/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/support/JmsTransportUtilsTest.java +++ b/spring-ws-support/src/test/java/org/springframework/ws/transport/jms/support/JmsTransportUtilsTest.java @@ -18,10 +18,10 @@ package org.springframework.ws.transport.jms.support; import static org.assertj.core.api.Assertions.*; -import java.net.URI; +import jakarta.jms.DeliveryMode; +import jakarta.jms.Message; -import javax.jms.DeliveryMode; -import javax.jms.Message; +import java.net.URI; import org.junit.jupiter.api.Test; import org.springframework.ws.transport.jms.JmsTransportConstants; diff --git a/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/MailIntegrationTest.java b/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/MailIntegrationTest.java index 3e9af0a0..2ad3e093 100644 --- a/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/MailIntegrationTest.java +++ b/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/MailIntegrationTest.java @@ -18,38 +18,43 @@ package org.springframework.ws.transport.mail; import static org.assertj.core.api.Assertions.*; -import org.junit.jupiter.api.AfterEach; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; + import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.jvnet.mock_javamail.Mailbox; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.ws.client.core.WebServiceTemplate; import org.springframework.xml.transform.StringResult; import org.springframework.xml.transform.StringSource; -import org.xmlunit.assertj.XmlAssert; + +import com.icegreen.greenmail.spring.GreenMailBean; +import com.icegreen.greenmail.util.GreenMailUtil; @ExtendWith(SpringExtension.class) @ContextConfiguration("mail-applicationContext.xml") public class MailIntegrationTest { + @Autowired private GreenMailBean greenMailBean; + @Autowired private WebServiceTemplate webServiceTemplate; - @AfterEach - public void clearMailbox() { - Mailbox.clearAll(); - } - @Test - public void testMailTransport() throws Exception { + public void testMailTransport() throws MessagingException { - String content = ""; + String content = ""; StringResult result = new StringResult(); webServiceTemplate.sendSourceAndReceiveToResult(new StringSource(content), result); - assertThat(Mailbox.get("server@example.com")).isEmpty(); - assertThat(Mailbox.get("client@example.com")).hasSize(1); - XmlAssert.assertThat(result.toString()).and(content).ignoreWhitespace().areSimilar(); + MimeMessage[] receivedMessages = greenMailBean.getGreenMail().getReceivedMessages(); + + assertThat(receivedMessages).hasSize(1); + + assertThat(GreenMailUtil.getAddressList(receivedMessages[0].getFrom())) + .isEqualTo("Spring-WS SOAP Client "); + assertThat(GreenMailUtil.getAddressList(receivedMessages[0].getAllRecipients())).isEqualTo("server@localhost"); + assertThat(GreenMailUtil.getBody(receivedMessages[0])).contains(content); } } diff --git a/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/MailMessageSenderIntegrationTest.java b/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/MailMessageSenderIntegrationTest.java index dfa3c747..ffa6f6fd 100644 --- a/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/MailMessageSenderIntegrationTest.java +++ b/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/MailMessageSenderIntegrationTest.java @@ -18,21 +18,27 @@ package org.springframework.ws.transport.mail; import static org.assertj.core.api.Assertions.*; +import jakarta.mail.Address; +import jakarta.mail.internet.MimeMessage; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPConstants; +import jakarta.xml.soap.SOAPMessage; + import java.net.URI; +import java.util.Collections; import javax.xml.namespace.QName; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPMessage; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.jvnet.mock_javamail.Mailbox; import org.springframework.ws.soap.SoapMessage; import org.springframework.ws.soap.saaj.SaajSoapMessage; import org.springframework.ws.transport.WebServiceConnection; +import com.icegreen.greenmail.spring.GreenMailBean; + public class MailMessageSenderIntegrationTest { private MailMessageSender messageSender; @@ -41,26 +47,36 @@ public class MailMessageSenderIntegrationTest { private static final String SOAP_ACTION = "http://springframework.org/DoIt"; + private GreenMailBean greenMailBean; + @BeforeEach public void setUp() throws Exception { + greenMailBean = new GreenMailBean(); + greenMailBean.setAutostart(true); + greenMailBean.setSmtpProtocol(true); + greenMailBean.setImapProtocol(true); + greenMailBean.setUsers(Collections.singletonList("system:password@localhost")); + greenMailBean.afterPropertiesSet(); + messageSender = new MailMessageSender(); - messageSender.setFrom("Spring-WS SOAP Client "); - messageSender.setTransportUri("smtp://smtp.example.com"); - messageSender.setStoreUri("imap://imap.example.com/INBOX"); + messageSender.setFrom("Spring-WS SOAP Client "); + messageSender.setTransportUri("smtp://localhost:" + greenMailBean.getGreenMail().getSmtp().getPort()); + messageSender.setStoreUri("imap://localhost:" + greenMailBean.getGreenMail().getImap().getPort() + "/INBOX"); messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL); messageSender.afterPropertiesSet(); } @AfterEach - public void tearDown() { - Mailbox.clearAll(); + void tearDown() throws Exception { + greenMailBean.destroy(); } + @Disabled @Test public void testSendAndReceiveQueueNoResponse() throws Exception { - URI mailTo = new URI("mailto:server@example.com?subject=SOAP%20Test"); + URI mailTo = new URI("mailto:server@localhost?subject=SOAP%20Test"); try (WebServiceConnection connection = messageSender.createConnection(mailTo)) { @@ -70,7 +86,9 @@ public class MailMessageSenderIntegrationTest { soapRequest.setSoapAction(SOAP_ACTION); connection.send(soapRequest); - assertThat(Mailbox.get("server@example.com")).hasSize(1); + MimeMessage[] receivedMessages = greenMailBean.getGreenMail().getReceivedMessages(); + assertThat(receivedMessages).hasSize(1); + assertThat(receivedMessages[0].getAllRecipients()).extracting(Address::toString).contains("server@localhost"); } } } diff --git a/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/support/MailTransportUtilsTest.java b/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/support/MailTransportUtilsTest.java index 96116c11..161504bd 100644 --- a/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/support/MailTransportUtilsTest.java +++ b/spring-ws-support/src/test/java/org/springframework/ws/transport/mail/support/MailTransportUtilsTest.java @@ -18,10 +18,10 @@ package org.springframework.ws.transport.mail.support; import static org.assertj.core.api.Assertions.*; -import java.net.URI; +import jakarta.mail.URLName; +import jakarta.mail.internet.InternetAddress; -import javax.mail.URLName; -import javax.mail.internet.InternetAddress; +import java.net.URI; import org.junit.jupiter.api.Test; diff --git a/spring-ws-support/src/test/resources/log4j.properties b/spring-ws-support/src/test/resources/log4j.properties index 51bcb860..f6fb0a89 100644 --- a/spring-ws-support/src/test/resources/log4j.properties +++ b/spring-ws-support/src/test/resources/log4j.properties @@ -2,4 +2,4 @@ log4j.rootCategory=WARN, stdout log4j.logger.org.springframework.ws=DEBUG log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n \ No newline at end of file +log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n diff --git a/spring-ws-support/src/test/resources/org/springframework/ws/transport/http/httpserver-applicationContext.xml b/spring-ws-support/src/test/resources/org/springframework/ws/transport/http/httpserver-applicationContext.xml index 213c9709..3c1726f4 100644 --- a/spring-ws-support/src/test/resources/org/springframework/ws/transport/http/httpserver-applicationContext.xml +++ b/spring-ws-support/src/test/resources/org/springframework/ws/transport/http/httpserver-applicationContext.xml @@ -7,7 +7,7 @@ - + diff --git a/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-applicationContext.xml b/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-applicationContext.xml index dfc7f640..d171d43b 100644 --- a/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-applicationContext.xml +++ b/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-applicationContext.xml @@ -2,7 +2,7 @@ - + @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-receiver-applicationContext.xml b/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-receiver-applicationContext.xml index 40473d88..4fe712be 100644 --- a/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-receiver-applicationContext.xml +++ b/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-receiver-applicationContext.xml @@ -2,20 +2,20 @@ - + - - + + - - + + - - + + @@ -44,4 +44,4 @@ - \ No newline at end of file + diff --git a/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-sender-applicationContext.xml b/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-sender-applicationContext.xml index a3f84df4..6329fc4a 100644 --- a/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-sender-applicationContext.xml +++ b/spring-ws-support/src/test/resources/org/springframework/ws/transport/jms/jms-sender-applicationContext.xml @@ -2,26 +2,26 @@ - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - \ No newline at end of file + diff --git a/spring-ws-support/src/test/resources/org/springframework/ws/transport/mail/mail-applicationContext.xml b/spring-ws-support/src/test/resources/org/springframework/ws/transport/mail/mail-applicationContext.xml index 03fae1f1..cf1c3271 100644 --- a/spring-ws-support/src/test/resources/org/springframework/ws/transport/mail/mail-applicationContext.xml +++ b/spring-ws-support/src/test/resources/org/springframework/ws/transport/mail/mail-applicationContext.xml @@ -2,7 +2,7 @@ - + @@ -10,11 +10,22 @@ - + + + + + + + system:password@localhost + + + + + - - - + + + @@ -34,18 +45,18 @@ - + - - - + + + - + diff --git a/spring-ws-test/src/test/java/org/springframework/ws/test/client/MockWebServiceServerTest.java b/spring-ws-test/src/test/java/org/springframework/ws/test/client/MockWebServiceServerTest.java index 0ace10a7..84ea8c29 100644 --- a/spring-ws-test/src/test/java/org/springframework/ws/test/client/MockWebServiceServerTest.java +++ b/spring-ws-test/src/test/java/org/springframework/ws/test/client/MockWebServiceServerTest.java @@ -21,13 +21,14 @@ import static org.easymock.EasyMock.*; import static org.springframework.ws.test.client.RequestMatchers.*; import static org.springframework.ws.test.client.ResponseCreators.*; +import jakarta.xml.soap.MessageFactory; + import java.net.URI; import java.util.Collections; import java.util.Locale; import java.util.Map; import javax.xml.namespace.QName; -import javax.xml.soap.MessageFactory; import javax.xml.transform.Source; import org.junit.jupiter.api.BeforeEach; diff --git a/spring-ws-test/src/test/java/org/springframework/ws/test/integration/CustomerCountRequest.java b/spring-ws-test/src/test/java/org/springframework/ws/test/integration/CustomerCountRequest.java index b6b2b308..8ff37b82 100644 --- a/spring-ws-test/src/test/java/org/springframework/ws/test/integration/CustomerCountRequest.java +++ b/spring-ws-test/src/test/java/org/springframework/ws/test/integration/CustomerCountRequest.java @@ -16,8 +16,8 @@ package org.springframework.ws.test.integration; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement(namespace = "http://springframework.org/spring-ws") public class CustomerCountRequest { diff --git a/spring-ws-test/src/test/java/org/springframework/ws/test/integration/CustomerCountResponse.java b/spring-ws-test/src/test/java/org/springframework/ws/test/integration/CustomerCountResponse.java index 61435a83..e6b97326 100644 --- a/spring-ws-test/src/test/java/org/springframework/ws/test/integration/CustomerCountResponse.java +++ b/spring-ws-test/src/test/java/org/springframework/ws/test/integration/CustomerCountResponse.java @@ -16,8 +16,8 @@ package org.springframework.ws.test.integration; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement(namespace = "http://springframework.org/spring-ws") public class CustomerCountResponse { diff --git a/spring-ws-test/src/test/java/org/springframework/ws/test/support/matcher/PayloadDiffMatcherTest.java b/spring-ws-test/src/test/java/org/springframework/ws/test/support/matcher/PayloadDiffMatcherTest.java index 80130627..9fe058d8 100644 --- a/spring-ws-test/src/test/java/org/springframework/ws/test/support/matcher/PayloadDiffMatcherTest.java +++ b/spring-ws-test/src/test/java/org/springframework/ws/test/support/matcher/PayloadDiffMatcherTest.java @@ -19,7 +19,7 @@ package org.springframework.ws.test.support.matcher; import static org.assertj.core.api.Assertions.*; import static org.easymock.EasyMock.*; -import javax.xml.soap.MessageFactory; +import jakarta.xml.soap.MessageFactory; import org.junit.jupiter.api.Test; import org.springframework.ws.WebServiceMessage; diff --git a/spring-ws-test/src/test/java/org/springframework/ws/test/support/matcher/SoapHeaderMatcherTest.java b/spring-ws-test/src/test/java/org/springframework/ws/test/support/matcher/SoapHeaderMatcherTest.java index 3549a306..06ed88c5 100644 --- a/spring-ws-test/src/test/java/org/springframework/ws/test/support/matcher/SoapHeaderMatcherTest.java +++ b/spring-ws-test/src/test/java/org/springframework/ws/test/support/matcher/SoapHeaderMatcherTest.java @@ -19,9 +19,10 @@ package org.springframework.ws.test.support.matcher; import static org.assertj.core.api.Assertions.*; import static org.easymock.EasyMock.*; +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPMessage; + import javax.xml.namespace.QName; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPMessage; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-xml/src/test/java/org/springframework/xml/transform/TransformerHelperTest.java b/spring-xml/src/test/java/org/springframework/xml/transform/TransformerHelperTest.java index 15bb3352..2520fadf 100644 --- a/spring-xml/src/test/java/org/springframework/xml/transform/TransformerHelperTest.java +++ b/spring-xml/src/test/java/org/springframework/xml/transform/TransformerHelperTest.java @@ -16,11 +16,9 @@ package org.springframework.xml.transform; -import static org.easymock.EasyMock.*; +import static org.mockito.Mockito.*; import static org.xmlunit.assertj.XmlAssert.*; -import java.io.IOException; - import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; @@ -28,7 +26,6 @@ import javax.xml.transform.TransformerException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.xml.sax.SAXException; public class TransformerHelperTest { @@ -39,15 +36,11 @@ public class TransformerHelperTest { public void setUp() throws Exception { helper = new TransformerHelper(); - transformer = createMock(Transformer.class); + transformer = mock(Transformer.class); } @Test - public void defaultTransformerFactory() throws TransformerException, IOException, SAXException { - doTest(); - } - - private void doTest() throws TransformerException, SAXException, IOException { + public void defaultTransformerFactory() throws TransformerException { String xml = "text"; Source source = new StringSource(xml); diff --git a/spring-xml/src/test/java/org/springframework/xml/xpath/AbstractXPathExpressionFactoryTestCase.java b/spring-xml/src/test/java/org/springframework/xml/xpath/AbstractXPathExpressionFactoryTestCase.java index 5d4c371e..7c2dc702 100644 --- a/spring-xml/src/test/java/org/springframework/xml/xpath/AbstractXPathExpressionFactoryTestCase.java +++ b/spring-xml/src/test/java/org/springframework/xml/xpath/AbstractXPathExpressionFactoryTestCase.java @@ -35,8 +35,6 @@ import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.SAXException; -import com.sun.org.apache.xpath.internal.XPathProcessorException; - public abstract class AbstractXPathExpressionFactoryTestCase { private Document noNamespacesDocument;