├── .github
└── workflows
│ └── maven.yml
├── .gitignore
├── .rultor.yml
├── README.md
├── cxf-spring-boot-starter-maven-plugin-integrationtest
├── pom.xml
└── src
│ └── test
│ ├── java
│ └── de
│ │ └── codecentric
│ │ └── cxf
│ │ └── CxfSpringBootStarterMavenPluginIntegrationTest.java
│ └── resources
│ └── generation-test-project
│ ├── pom.xml
│ └── src
│ └── main
│ └── resources
│ └── wsdl
│ ├── Weather-Schemes
│ ├── w3c-xmlmime-definition.xsd
│ ├── weather-datatypes.xsd
│ ├── weather-exception.xsd
│ └── weather-general.xsd
│ ├── Weather1.0.wsdl
│ └── Weather1.0.xsd
├── cxf-spring-boot-starter-maven-plugin
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── de
│ │ │ └── codecentric
│ │ │ └── cxf
│ │ │ └── BootCxfMojo.java
│ └── resources
│ │ └── META-INF
│ │ └── m2e
│ │ └── lifecycle-mapping-metadata.xml
│ └── test
│ ├── java
│ └── de
│ │ └── codecentric
│ │ └── cxf
│ │ └── BootCxfMojoTest.java
│ └── resources
│ └── wsdl
│ ├── Weather-Schemes
│ ├── w3c-xmlmime-definition.xsd
│ ├── weather-datatypes.xsd
│ ├── weather-exception.xsd
│ └── weather-general.xsd
│ ├── Weather1.0.wsdl
│ └── Weather1.0.xsd
├── pom.xml
├── pubring.gpg.asc
├── renovate.json
├── secring.gpg.asc
└── settings.xml.asc
/.github/workflows/maven.yml:
--------------------------------------------------------------------------------
1 | name: github
2 |
3 | on: [push]
4 |
5 | jobs:
6 | build:
7 | runs-on: ubuntu-latest
8 |
9 | strategy:
10 | matrix:
11 | java-version: [ 8, 11, 15 ]
12 |
13 | steps:
14 | - uses: actions/checkout@v2
15 | - uses: actions/setup-java@v1
16 | with:
17 | java-version: ${{ matrix.java-version }}
18 | - run: mvn -B install --no-transfer-progress --file pom.xml
19 |
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.class
2 |
3 | # Package Files #
4 | *.jar
5 | *.war
6 | *.ear
7 |
8 | # Eclipse #
9 | .settings
10 | .project
11 | .classpath
12 | .studio
13 | target
14 |
15 | # Apple #
16 | .DS_Store
17 |
18 | # Intellij #
19 | .idea
20 | *.iml
21 | *.log
22 |
23 | # logback
24 | logback.out.xml
--------------------------------------------------------------------------------
/.rultor.yml:
--------------------------------------------------------------------------------
1 | decrypt:
2 | settings.xml: "repo/settings.xml.asc"
3 | pubring.gpg: "repo/pubring.gpg.asc"
4 | secring.gpg: "repo/secring.gpg.asc"
5 | docker:
6 | image: "yegor256/java8"
7 | release:
8 | script: |
9 | mvn versions:set "-DnewVersion=${tag}"
10 | git commit -am "${tag}"
11 | mvn clean deploy -P central-deploy --settings /home/r/settings.xml -P cxf-spring-boot-starter-maven-plugin -DskipTests=true
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | cxf-spring-boot-starter-maven-plugin complementing cxf-spring-boot-starter
2 | =============================
3 | [](https://github.com/codecentric/cxf-spring-boot-starter-maven-plugin/actions)
4 | [](https://maven-badges.herokuapp.com/maven-central/de.codecentric/cxf-spring-boot-starter-maven-plugin/)
5 | [](http://www.apache.org/licenses/LICENSE-2.0.html)
6 | [](https://renovatebot.com)
7 | [](github.com/eclipse-ee4j/jaxb-ri)
8 | [](https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-rt)
9 | [](https://www.oracle.com/technetwork/java/javase/downloads/index.html)
10 | [](https://github.com/eclipse-ee4j/metro-jax-ws/tree/master/jaxws-ri/extras/jaxws-maven-plugin)
11 | [](https://spring.io/)
12 |
13 |
14 | While a spring-boot-starter like [cxf-spring-boot-starter] generally only serves as a Maven dependency, something that will be executed in the build-section is not delivered in such a way. But the generation of JAX-B Classfiles is a good candidate to run inside the build-process - so the resulting files aren´t checked into source control system. The configuration e.g. of the [jaxws-maven-plugin] is rather complex to work properly and one has to do some research, till all necessary configuration parameters are set properly ([something like this](https://github.com/jonashackt/soap-spring-boot-cxf/blob/master/pom.xml) has to be done - just have a look into the build section of the pom).
15 |
16 | ### Features include:
17 |
18 | * Generating all necessary Java-Classes using JAX-B from your WSDL/XSDs, complementing the [cxf-spring-boot-starter]
19 | * This also works for complex imports of many XSD files that inherit other XSDs themselves
20 | * The generated JAX-B Classfiles will be added to your projects classpath - ready to map & transform into whatever you want
21 | * Scanning your resource-Folder for the WSDL and configuring the jaxws-maven-plugin, so that non-absolute paths will be generated into @WebServiceClient-Class
22 | * Non-absolute paths will be generated into @WebService and @WebServiceClient-Classes (so that one can initialize the Apache CXF endpoint 100% contract-first)
23 | * Extract the targetNamespace from the WSDL, generate the SEI and WebServiceClient annotated classes package names from it & write it together with the project´s package name into a cxf-spring-boot-maven.properties to enable Complete automation of Endpoint initialization in the [cxf-spring-boot-starter](https://github.com/codecentric/cxf-spring-boot-starter) ([documentation here](https://github.com/codecentric/cxf-spring-boot-starter#complete-automation-of-endpoint-initialization))
24 | * Plugin is Eclipse m2e compatible (see [stackoverflow:eclipse-m2e-lifecycle] and [https://wiki.eclipse.org/M2E_compatible_maven_plugins](https://wiki.eclipse.org/M2E_compatible_maven_plugins), so no Plugin execution not covered by lifecycle configuration”-Error should accur
25 |
26 | ### HowTo
27 |
28 | * Put your WSDL into some folder under __/src/main/resources/__ OR __/src/test/resources/__ - and add your XSDs, so they could be imported correct (relatively)
29 | * If you want to tweak your Namespace-Names, put a binding.xml into the same folder, where your WSDL resides
30 | * Add this plugin to your pom´s build-section:
31 |
32 | ```
33 |
34 |
35 |
36 | de.codecentric
37 | cxf-spring-boot-starter-maven-plugin
38 | 2.3.0.RELEASE
39 |
40 |
41 |
42 | generate
43 |
44 |
45 |
46 |
47 |
48 |
49 | ```
50 |
51 |
52 | * it will be executed, if you run a standard:
53 |
54 | ```
55 | mvn clean generate-sources
56 | ```
57 |
58 | (or directly):
59 |
60 | ```
61 | mvn cxf-spring-boot-starter:generate
62 | ```
63 |
64 | * The generated JAX-B Classfiles will be placed in target/generated-sources/wsdlimport
65 |
66 |
67 | ### Moved from "OLD" jaxb to "NEW" jaxb
68 |
69 | As you might noticed there is a lot going on in the Community effort to move JavaEE to JakartaEE from Oracle to Eclipse Foundation.
70 |
71 | One of the impacts for this project was that the JAX-B GitHub repo [github.com/javaee/jaxb-v2](https://github.com/javaee/jaxb-v2) was archived and a new GitHub repo [github.com/eclipse-ee4j/jaxb-ri](https://github.com/eclipse-ee4j/jaxb-ri) has been created.
72 |
73 | Therefore we also moved to the new dependencies inside our [pom.xml](pom.xml) - instead of using [the "OLD JAXB" with the `com.sun.xml.bind` Maven groupId](https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-xjc), we now use the ["NEW JAXB" with the `org.glassfish.jaxb` Maven groupId](https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-xjc):
74 |
75 | ```
76 |
78 |
79 | org.glassfish.jaxb
80 | jaxb-xjc
81 | ${jaxb-xjc.version}
82 |
83 |
84 |
85 | org.glassfish.jaxb
86 | jaxb-runtime
87 | ${jaxb.version}
88 |
89 | ```
90 |
91 |
92 |
93 | ### JDK 11 support
94 |
95 | As of JDK11 many deprecated packages aren't distributed with the JDK anymore - including `javax.xml.ws` (JAX-WS) and `javax.xml.bind` (JAX-B) (see [this post](https://blog.viadee.de/jaxb-und-soap-in-java-11)).
96 |
97 | Therefore we add the JAX-WS runtime to our pom.xml:
98 |
99 | ```
100 |
101 |
102 | com.sun.xml.ws
103 | jaxws-rt
104 | ${jaxws-ri.version}
105 | pom
106 |
107 | ```
108 |
109 | Sadly the jaxws-maven-plugin [isn't JDK11 (nor JDK9) compatible](https://github.com/mojohaus/jaxws-maven-plugin/issues/54) atm!
110 |
111 | __BUT__: Thanks so much to [mickaelbaron](https://github.com/mojohaus/jaxws-maven-plugin/issues/54#issuecomment-434323813) for stating, that the [mojohaus/jaxws-maven-plugin](https://github.com/mojohaus/jaxws-maven-plugin) is just deprecated and moved silently to [eclipse-ee4j/metro-jax-ws/tree/master/jaxws-ri/extras/jaxws-maven-plugin](https://github.com/eclipse-ee4j/metro-jax-ws/tree/master/jaxws-ri/extras/jaxws-maven-plugin)!!!
112 |
113 | ```
114 | plugin(
115 | groupId("com.sun.xml.ws"),
116 | artifactId("jaxws-maven-plugin"),
117 | version("2.3.2"),
118 | dependencies(
119 | dependency(
120 | "org.jvnet.jaxb2_commons",
121 | "jaxb2-namespace-prefix",
122 | "1.3"))
123 | ),
124 | ```
125 |
126 | With this maintained version of [com.sun.xml.ws.jaxws-maven-plugin](https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-maven-plugin) we are also able to run on all major JDK versions like a charm!
127 |
128 |
129 | ##### Build on multiple JDKs locally
130 |
131 | On our local machine in most situations we only have one JDK installation. There are solutions like [jenv](https://www.jenv.be/), but as I really like Docker, we can also run our builds with it:
132 |
133 | ```
134 | # OpenJDK 13 (latest version)
135 | docker run --rm -v "$PWD":/build/our/plugin -w /build/our/plugin maven:3-jdk-13 bash -c "mvn clean install"
136 |
137 | # OpenJDK 12 (latest version)
138 | docker run --rm -v "$PWD":/build/our/plugin -w /build/our/plugin maven:3-jdk-12 bash -c "mvn clean install"
139 |
140 | # OpenJDK 11 (latest version)
141 | docker run --rm -v "$PWD":/build/our/plugin -w /build/our/plugin maven:3-jdk-11 bash -c "mvn clean install"
142 |
143 | # OpenJDK 8 (latest version)
144 | docker run --rm -v "$PWD":/build/our/plugin -w /build/our/plugin maven:3-jdk-8 bash -c "mvn clean install"
145 | ```
146 |
147 | ### Integration testing the plugin
148 |
149 | > When updating development/release version: don't forget to update [generation-test-project/pom.xml](cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/resources/generation-test-project/pom.xml)!
150 |
151 | We want to avoid as many problems as possible, so we should also do integration tests for this plugin.
152 |
153 | The [docs about testing Maven plugins](https://maven.apache.org/plugin-developers/plugin-testing.html) under the headline `Integration/Functional testing` advice us to use the [org.apache.maven.shared.maven-verifier](https://mvnrepository.com/artifact/org.apache.maven.shared/maven-verifier) plugin (__NOT the standard__ [maven-verifier-plugin](https://maven.apache.org/plugins/maven-verifier-plugin/)!!!), mind the groupId):
154 |
155 | ```
156 |
157 | org.apache.maven.shared
158 | maven-verifier
159 | 1.6
160 | test
161 |
162 | ```
163 |
164 | With this dependency we're able to use test the plugin from within JUnit powered Testcases like [CxfSpringBootStarterMavenPluginIntegrationTest.class](cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/java/de/codecentric/cxf/CxfSpringBootStarterMavenPluginIntegrationTest.java):
165 |
166 | ```java
167 | import org.apache.maven.it.VerificationException;
168 | import org.apache.maven.it.Verifier;
169 | import org.apache.maven.it.util.ResourceExtractor;
170 | import org.junit.Test;
171 |
172 | import java.io.File;
173 | import java.io.IOException;
174 |
175 | public class CxfSpringBootStarterMavenPluginIntegrationTest {
176 |
177 | @Test
178 | public void testJaxBandJaxWsClassfilesGenerationInclPluginProperties() throws IOException, VerificationException {
179 |
180 | // Given
181 | File generationTestProjectDir = ResourceExtractor.simpleExtractResources( getClass(), "/generation-test-project" );
182 | Verifier verifier = new Verifier( generationTestProjectDir.getAbsolutePath() );
183 |
184 | // When
185 | verifier.executeGoal( "generate-sources" );
186 |
187 | // Then
188 | verifier.verifyErrorFreeLog();
189 | }
190 |
191 | }
192 | ```
193 |
194 | For more code examples on how to use the Verifier API, see [this blog post](https://blog.akquinet.de/2011/02/21/testing-maven-plugins-with-the-verifier-approach/).
195 |
196 | As you may notice, we need a example project `generation-test-project` with a working [pom.xml](cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/resources/generation-test-project/pom.xml) inside `src/test/resources/generation-test-project`:
197 |
198 | ```
199 |
200 |
202 | 4.0.0
203 |
204 | de.codecentric.soap
205 | generation-test-project
206 | 1.0.0-SNAPSHOT
207 | jar
208 |
209 | Project solely for integrationtesting the cxf-spring-boot-starter-maven-plugin
210 |
211 |
212 | UTF-8
213 | 1.8
214 |
215 |
216 |
217 |
218 |
219 | de.codecentric
220 | cxf-spring-boot-starter-maven-plugin
221 | 2.1.6-SNAPSHOT
222 |
223 |
224 |
225 | generate
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 | ```
235 |
236 | And we need to introduce a parent pom to the project - because before actually running the integration test with `org.apache.maven.shared.maven-verifier` we need to execute the full Maven lifecycle incl. `mvn install` for the standard `cxf-spring-boot-starter-maven-plugin` project. Otherwise we wouldn't have something to integration test - and the second Maven module build would fail!
237 |
238 | The parent [pom.xml](pom.xml) therefore has a `modules` section:
239 |
240 | ```
241 |
242 | cxf-spring-boot-starter-maven-plugin
243 | cxf-spring-boot-starter-maven-plugin-integrationtest
244 |
245 | ```
246 |
247 | Because we want to release this plugin to Maven central, all configuration needed there has also been placed into the parent pom.xml, which makes the plugin's pom.xml much more readable, since it only contains the configuration and dependencies really needed.
248 |
249 | ##### Handling the ArtifactResolutionException: Could not find artifact de.codecentric:cxf-spring-boot-starter-maven-plugin:jar:2.1.6-SNAPSHOT error
250 |
251 | There is one problem with the [org.apache.maven.shared.maven-verifier plugin](https://mvnrepository.com/artifact/org.apache.maven.shared/maven-verifier. When I first used the plugin, I got this error
252 |
253 | ```
254 | [INFO] ------------< de.codecentric.soap:generation-test-project >-------------
255 | [INFO] Building generation-test-project 1.0.0-SNAPSHOT
256 | [INFO] --------------------------------[ jar ]---------------------------------
257 | [WARNING] The POM for de.codecentric:cxf-spring-boot-starter-maven-plugin:jar:2.1.6-SNAPSHOT is missing, no dependency information available
258 | [INFO] ------------------------------------------------------------------------
259 | [INFO] BUILD FAILURE
260 | [INFO] ------------------------------------------------------------------------
261 | [INFO] Total time: 1.193 s
262 | [INFO] Finished at: 2019-06-19T15:19:36+02:00
263 | [INFO] ------------------------------------------------------------------------
264 | [ERROR] Plugin de.codecentric:cxf-spring-boot-starter-maven-plugin:2.1.6-SNAPSHOT or one of its dependencies could not be resolved: Could not find artifact de.codecentric:cxf-spring-boot-starter-maven-plugin:jar:2.1.6-SNAPSHOT -> [Help 1]
265 | org.apache.maven.plugin.PluginResolutionException: Plugin de.codecentric:cxf-spring-boot-starter-maven-plugin:2.1.6-SNAPSHOT or one of its dependencies could not be resolved: Could not find artifact de.codecentric:cxf-spring-boot-starter-maven-plugin:jar:2.1.6-SNAPSHOT
266 | at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve (DefaultPluginDependenciesResolver.java:128)
267 | at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor (DefaultMavenPluginManager.java:182)
268 | at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getMojoDescriptor (DefaultMavenPluginManager.java:286)
269 | at org.apache.maven.plugin.DefaultBuildPluginManager.getMojoDescriptor (DefaultBuildPluginManager.java:244)
270 | at org.apache.maven.lifecycle.internal.DefaultLifecycleMappingDelegate.calculateLifecycleMappings (DefaultLifecycleMappingDelegate.java:116)
271 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateLifecycleMappings (DefaultLifecycleExecutionPlanCalculator.java:265)
272 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateMojoExecutions (DefaultLifecycleExecutionPlanCalculator.java:217)
273 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan (DefaultLifecycleExecutionPlanCalculator.java:126)
274 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan (DefaultLifecycleExecutionPlanCalculator.java:144)
275 | at org.apache.maven.lifecycle.internal.builder.BuilderCommon.resolveBuildPlan (BuilderCommon.java:97)
276 | at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:111)
277 | at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
278 | at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
279 | at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
280 | at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
281 | at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
282 | at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
283 | at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
284 | at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
285 | at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
286 | at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
287 | at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
288 | at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
289 | at java.lang.reflect.Method.invoke (Method.java:567)
290 | at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
291 | at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
292 | at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
293 | at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
294 | Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not find artifact de.codecentric:cxf-spring-boot-starter-maven-plugin:jar:2.1.6-SNAPSHOT
295 | at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve (DefaultArtifactResolver.java:423)
296 | at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java:225)
297 | at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact (DefaultArtifactResolver.java:202)
298 | at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact (DefaultRepositorySystem.java:257)
299 | at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve (DefaultPluginDependenciesResolver.java:124)
300 | at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor (DefaultMavenPluginManager.java:182)
301 | at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getMojoDescriptor (DefaultMavenPluginManager.java:286)
302 | at org.apache.maven.plugin.DefaultBuildPluginManager.getMojoDescriptor (DefaultBuildPluginManager.java:244)
303 | at org.apache.maven.lifecycle.internal.DefaultLifecycleMappingDelegate.calculateLifecycleMappings (DefaultLifecycleMappingDelegate.java:116)
304 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateLifecycleMappings (DefaultLifecycleExecutionPlanCalculator.java:265)
305 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateMojoExecutions (DefaultLifecycleExecutionPlanCalculator.java:217)
306 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan (DefaultLifecycleExecutionPlanCalculator.java:126)
307 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan (DefaultLifecycleExecutionPlanCalculator.java:144)
308 | at org.apache.maven.lifecycle.internal.builder.BuilderCommon.resolveBuildPlan (BuilderCommon.java:97)
309 | at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:111)
310 | at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
311 | at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
312 | at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
313 | at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
314 | at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
315 | at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
316 | at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
317 | at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
318 | at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
319 | at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
320 | at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
321 | at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
322 | at java.lang.reflect.Method.invoke (Method.java:567)
323 | at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
324 | at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
325 | at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
326 | at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
327 | Caused by: org.eclipse.aether.transfer.ArtifactNotFoundException: Could not find artifact de.codecentric:cxf-spring-boot-starter-maven-plugin:jar:2.1.6-SNAPSHOT
328 | at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve (DefaultArtifactResolver.java:413)
329 | at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java:225)
330 | at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact (DefaultArtifactResolver.java:202)
331 | at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact (DefaultRepositorySystem.java:257)
332 | at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve (DefaultPluginDependenciesResolver.java:124)
333 | at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor (DefaultMavenPluginManager.java:182)
334 | at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getMojoDescriptor (DefaultMavenPluginManager.java:286)
335 | at org.apache.maven.plugin.DefaultBuildPluginManager.getMojoDescriptor (DefaultBuildPluginManager.java:244)
336 | at org.apache.maven.lifecycle.internal.DefaultLifecycleMappingDelegate.calculateLifecycleMappings (DefaultLifecycleMappingDelegate.java:116)
337 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateLifecycleMappings (DefaultLifecycleExecutionPlanCalculator.java:265)
338 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateMojoExecutions (DefaultLifecycleExecutionPlanCalculator.java:217)
339 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan (DefaultLifecycleExecutionPlanCalculator.java:126)
340 | at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan (DefaultLifecycleExecutionPlanCalculator.java:144)
341 | at org.apache.maven.lifecycle.internal.builder.BuilderCommon.resolveBuildPlan (BuilderCommon.java:97)
342 | at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:111)
343 | at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
344 | at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
345 | at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
346 | at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
347 | at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
348 | at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
349 | at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
350 | at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
351 | at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
352 | at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
353 | at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
354 | at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
355 | at java.lang.reflect.Method.invoke (Method.java:567)
356 | at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
357 | at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
358 | at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
359 | at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
360 | [ERROR]
361 | [ERROR] Re-run Maven using the -X switch to enable full debug logging.
362 | [ERROR]
363 | [ERROR] For more information about the errors and possible solutions, please read the following articles:
364 | [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
365 |
366 | at org.apache.maven.it.Verifier.executeGoals(Verifier.java:1369)
367 | at org.apache.maven.it.Verifier.executeGoal(Verifier.java:1254)
368 | at org.apache.maven.it.Verifier.executeGoal(Verifier.java:1248)
369 | at de.codecentric.cxf.CxfSpringBootStarterMavenPluginIntegrationTest.testJaxBandJaxWsClassfilesGenerationInclPluginProperties(CxfSpringBootStarterMavenPluginIntegrationTest.java:21)
370 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
371 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
372 | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
373 | at java.base/java.lang.reflect.Method.invoke(Method.java:567)
374 | at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
375 | at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
376 | at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
377 | at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
378 | at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
379 | at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
380 | at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
381 | at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
382 | at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
383 | at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
384 | at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
385 | at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
386 | at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
387 | at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
388 | at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
389 | at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
390 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
391 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
392 | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
393 | at java.base/java.lang.reflect.Method.invoke(Method.java:567)
394 | at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
395 | at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
396 | at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
397 | at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
398 | at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
399 |
400 |
401 | Results :
402 |
403 | Tests in error:
404 | testJaxBandJaxWsClassfilesGenerationInclPluginProperties(de.codecentric.cxf.CxfSpringBootStarterMavenPluginIntegrationTest): Exit code was non-zero: 1; command line and log = (..)
405 |
406 | Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
407 |
408 | [INFO] ------------------------------------------------------------------------
409 | [INFO] Reactor Summary for cxf-spring-boot-starter-maven-plugin-reactor 2.1.6-SNAPSHOT:
410 | [INFO]
411 | [INFO] cxf-spring-boot-starter-maven-plugin-reactor ....... SUCCESS [ 0.589 s]
412 | [INFO] cxf-spring-boot-starter-maven-plugin ............... SUCCESS [ 4.294 s]
413 | [INFO] cxf-spring-boot-starter-maven-plugin-integrationtest FAILURE [ 2.959 s]
414 | [INFO] ------------------------------------------------------------------------
415 | [INFO] BUILD FAILURE
416 | [INFO] ------------------------------------------------------------------------
417 | [INFO] Total time: 8.017 s
418 | [INFO] Finished at: 2019-06-19T15:19:36+02:00
419 | [INFO] ------------------------------------------------------------------------
420 | [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project cxf-spring-boot-starter-maven-plugin-integrationtest: There are test failures.
421 | ```
422 |
423 | After some hours of digging into the problem, I finally went to the source code of the [Verifier.java](https://github.com/apache/maven-verifier/blob/master/src/main/java/org/apache/maven/shared/verifier/Verifier.java#L195):
424 |
425 | ```
426 | private void findDefaultMavenHome()
427 | throws VerificationException
428 | {
429 | defaultClasspath = System.getProperty( "maven.bootclasspath" );
430 | defaultClassworldConf = System.getProperty( "classworlds.conf" );
431 | defaultMavenHome = System.getProperty( "maven.home" );
432 |
433 | if ( defaultMavenHome == null )
434 | {
435 | Properties envVars = CommandLineUtils.getSystemEnvVars();
436 | defaultMavenHome = envVars.getProperty( "M2_HOME" );
437 | }
438 |
439 | if ( defaultMavenHome == null )
440 | {
441 | File f = new File( System.getProperty( "user.home" ), "m2" );
442 | if ( new File( f, "bin/mvn" ).isFile() )
443 | {
444 | defaultMavenHome = f.getAbsolutePath();
445 | }
446 | }
447 | }
448 | ```
449 |
450 | And there we are - if we havent set either `M2_HOME` or `maven.home`, the Verifier will place an ugly `${user.home)/m2` directory inside the `cxf-spring-boot-starter-maven-plugin-integrationtest` project folder and tries to download our pre-build `de.codecentric:cxf-spring-boot-starter-maven-plugin:jar:2.1.6-SNAPSHOT`, which isn't available on Maven central - since this was only build into our local Maven repository located under `$HOME/.m2/repository`.
451 |
452 | Finally the `README` of the [Maven plugin integration testing source](https://github.com/apache/maven-integration-testing) gave me the hint - we simply use a CLI parameter to set the correct Maven repository location:
453 |
454 | ```
455 | mvn clean install -Dmaven.repo.local=$HOME/.m2/repository
456 | ```
457 |
458 | __BUT:__ this means, we need to set this `-D` parameter every time we want to run our integration tests, which is quite nasty. Isn't there a way we could set this programmatically, since our tests aren't executable inside our IDEs otherwise.
459 |
460 | Looking into the the [Verifier source at line 137](https://github.com/apache/maven-verifier/blob/master/src/main/java/org/apache/maven/shared/verifier/Verifier.java#L137) we find out, that there are other constructors - e.g. one with a `settingsFile` parameter, where we can inject the current systems configuration (which mainly also inherits the maven repo path). So we initialize the `Verifier` with:
461 |
462 | ```
463 | verifier = new Verifier( generationTestProjectDir.getAbsolutePath(), "$HOME/.m2/settings.xml");
464 | ```
465 |
466 | Now the tests should work also inside our IDEs and without setting the `-D` parameter.
467 |
468 |
469 | ##### Where's the log file?
470 |
471 | We configure the `Verifier` to name the log file like this:
472 |
473 | ```
474 | verifier.setLogFileName("verifier-output.log");
475 | ```
476 |
477 | But where can I find this file? Have a look into `target/test-classes/yourTestProjectName`. In this plugin's case, the file is located in:
478 |
479 | ```
480 | cxf-spring-boot-starter-maven-plugin/cxf-spring-boot-starter-maven-plugin-integrationtest/target/test-classes/generation-test-project/verifier-output.log
481 | ```
482 |
483 | ##### Final testcase
484 |
485 | Now after all this our Testcase [CxfSpringBootStarterMavenPluginIntegrationTest.class](cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/java/de/codecentric/cxf/CxfSpringBootStarterMavenPluginIntegrationTest.java) looks like:
486 |
487 | ```java
488 | package de.codecentric.cxf;
489 |
490 | import org.apache.maven.it.VerificationException;
491 | import org.apache.maven.it.Verifier;
492 | import org.apache.maven.it.util.ResourceExtractor;
493 | import org.junit.Before;
494 | import org.junit.Test;
495 |
496 | import java.io.File;
497 | import java.io.IOException;
498 |
499 | public class CxfSpringBootStarterMavenPluginIntegrationTest {
500 |
501 | private File generationTestProjectDir;
502 | private Verifier verifier;
503 |
504 | @Before
505 | public void setUp() throws IOException, VerificationException {
506 | // Given
507 | generationTestProjectDir = ResourceExtractor.simpleExtractResources( getClass(), "/generation-test-project" );
508 | verifier = new Verifier( generationTestProjectDir.getAbsolutePath(), "$HOME/.m2/settings.xml");
509 | verifier.setLogFileName("verifier-output.log");
510 | }
511 |
512 | @Test
513 | public void plugin_output_should_look_good_in_log() throws VerificationException {
514 |
515 | // When
516 | verifier.executeGoal( "generate-sources" );
517 |
518 | // Then
519 | verifier.verifyErrorFreeLog();
520 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN STEP 0: Scanning for WSDL file in src/main/resources");
521 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN STEP 1: Found .wsdl-File");
522 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN STEP 2: Generating JAX-B Classfiles.");
523 | verifier.verifyTextInLog("Processing: file:");
524 | verifier.verifyTextInLog("jaxws:wsimport args: [-keep, -s, '");
525 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN setting relative wsdlLocation into @WebServiceClient:");
526 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN STEP 4: Guessing SEI implementation´s package name & injecting it into cxf-spring-boot-maven.properties for later Autodetection of Endpoints...");
527 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN STEP 5: Extracting targetNamespace from WSDL, generating packageName from it with com.sun.tools.xjc.api.XJC (see wsgen, WSImportTool and WSDLModeler at line 2312 of the JAXWSRI) and injecting it into cxf-spring-boot-maven.properties for later Autodetection of Endpoints...");
528 |
529 | // Reset the streams before executing the verifier
530 | verifier.resetStreams();
531 | }
532 |
533 | }
534 | ```
535 |
536 |
537 | [cxf-spring-boot-starter]:https://github.com/codecentric/cxf-spring-boot-starter
538 | [jaxws-maven-plugin]:https://github.com/eclipse-ee4j/metro-jax-ws/tree/master/jaxws-ri/extras/jaxws-maven-plugin
539 | [mojo-executor]:https://github.com/TimMoore/mojo-executor
540 | [stackoverflow:eclipse-m2e-lifecycle]:http://stackoverflow.com/a/26447353/4964553
541 | [bipro.net]:https://www.bipro.net/
542 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin-integrationtest/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 4.0.0
4 |
5 | de.codecentric
6 | cxf-spring-boot-starter-maven-plugin-reactor
7 | 2.4.0-SNAPSHOT
8 |
9 | cxf-spring-boot-starter-maven-plugin-integrationtest
10 | Project solely for integrationtesting the cxf-spring-boot-starter-maven-plugin
11 |
12 |
13 | 1.8
14 |
15 |
16 | 5.12.0
17 | 1.8.0
18 |
19 |
20 |
21 |
22 |
23 | org.junit.jupiter
24 | junit-jupiter
25 | ${junit.version}
26 | test
27 |
28 |
29 |
30 | org.apache.maven.shared
31 | maven-verifier
32 | ${maven-verifier.version}
33 | test
34 |
35 |
36 |
37 |
38 |
39 |
40 |
42 |
43 | org.apache.maven.plugins
44 | maven-surefire-plugin
45 | 2.22.2
46 |
47 |
48 |
49 | maven-deploy-plugin
50 |
51 | true
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/java/de/codecentric/cxf/CxfSpringBootStarterMavenPluginIntegrationTest.java:
--------------------------------------------------------------------------------
1 | package de.codecentric.cxf;
2 |
3 | import org.apache.maven.it.VerificationException;
4 | import org.apache.maven.it.Verifier;
5 | import org.apache.maven.it.util.ResourceExtractor;
6 | import org.junit.jupiter.api.BeforeEach;
7 | import org.junit.jupiter.api.Test;
8 |
9 | import java.io.File;
10 | import java.io.IOException;
11 |
12 | public class CxfSpringBootStarterMavenPluginIntegrationTest {
13 |
14 | private File generationTestProjectDir;
15 | private Verifier verifier;
16 |
17 | @BeforeEach
18 | public void setUp() throws IOException, VerificationException {
19 | // Given
20 | generationTestProjectDir = ResourceExtractor.simpleExtractResources( getClass(), "/generation-test-project" );
21 | verifier = new Verifier( generationTestProjectDir.getAbsolutePath(), "$HOME/.m2/settings.xml");
22 | verifier.setLogFileName("verifier-output.log");
23 | }
24 |
25 | @Test
26 | public void plugin_output_should_look_good_in_log() throws VerificationException {
27 |
28 | // When
29 | verifier.executeGoal( "generate-sources" );
30 |
31 | // Then
32 | verifier.verifyErrorFreeLog();
33 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN STEP 0: Scanning for WSDL file in src/main/resources");
34 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN STEP 1: Found .wsdl-File");
35 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN STEP 2: Generating JAX-B Classfiles.");
36 | verifier.verifyTextInLog("Processing: file:");
37 | verifier.verifyTextInLog("jaxws:wsimport args: [-keep, -s, '");
38 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN setting relative wsdlLocation into @WebServiceClient:");
39 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN STEP 4: Guessing SEI implementation´s package name & injecting it into cxf-spring-boot-maven.properties for later Autodetection of Endpoints...");
40 | verifier.verifyTextInLog("CXF-BOOT-MAVEN-PLUGIN STEP 5: Extracting targetNamespace from WSDL, generating packageName from it with com.sun.tools.xjc.api.XJC (see wsgen, WSImportTool and WSDLModeler at line 2312 of the JAXWSRI) and injecting it into cxf-spring-boot-maven.properties for later Autodetection of Endpoints...");
41 |
42 | // Reset the streams before executing the verifier
43 | verifier.resetStreams();
44 | }
45 |
46 | }
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/resources/generation-test-project/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | de.codecentric.soap
7 | generation-test-project
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | Project solely for integrationtesting the cxf-spring-boot-starter-maven-plugin
12 |
13 |
14 | UTF-8
15 | 1.8
16 |
17 |
18 |
19 |
20 |
21 | de.codecentric
22 | cxf-spring-boot-starter-maven-plugin
23 | 2.4.0-SNAPSHOT
24 |
25 |
26 |
27 | generate
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/resources/generation-test-project/src/main/resources/wsdl/Weather-Schemes/w3c-xmlmime-definition.xsd:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/resources/generation-test-project/src/main/resources/wsdl/Weather-Schemes/weather-datatypes.xsd:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/resources/generation-test-project/src/main/resources/wsdl/Weather-Schemes/weather-exception.xsd:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/resources/generation-test-project/src/main/resources/wsdl/Weather-Schemes/weather-general.xsd:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/resources/generation-test-project/src/main/resources/wsdl/Weather1.0.wsdl:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | Gets Information for each WeatherID
47 |
48 |
49 |
50 |
51 |
52 | Allows you to get your City Forecast Over the Next 7 Days, which is updated hourly.
53 |
54 |
55 |
56 |
57 |
58 | Allows you to get your City's Weather, which is updated hourly.
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin-integrationtest/src/test/resources/generation-test-project/src/main/resources/wsdl/Weather1.0.xsd:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
12 |
13 |
15 |
16 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 4.0.0
4 |
5 | de.codecentric
6 | cxf-spring-boot-starter-maven-plugin-reactor
7 | 2.4.0-SNAPSHOT
8 |
9 | cxf-spring-boot-starter-maven-plugin
10 | cxf-spring-boot-starter-maven-plugin
11 | Maven plugin complementing the Boot starter for SOAP-Webservices with Apache CXF using JAX-WS & JAXB with Annotations only
12 | maven-plugin
13 | https://github.com/codecentric/cxf-spring-boot-starter-maven-plugin
14 |
15 |
16 | Apache License, Version 2.0
17 | http://opensource.org/licenses/Apache-2.0
18 | repo
19 |
20 |
21 |
22 |
23 | Jonas Hecht
24 | jonas.hecht@codecentric.de
25 | codecentric AG
26 | http://www.codecentric.de
27 |
28 |
29 |
30 |
31 | 1.8
32 | 1.8
33 | 1.8
34 |
35 |
36 | 2.8.0
37 | 3.11
38 | 5.3.39
39 | 3.0.2
40 | 3.0.0
41 | 2.3.1
42 | 3.15.1
43 | 3.15.1
44 | 3.9.9
45 |
46 |
47 | 5.12.0
48 | 2.2
49 |
50 |
51 |
52 |
53 | org.apache.maven
54 | maven-plugin-api
55 | ${maven-plugin-api.version}
56 |
57 |
58 |
59 |
60 | org.apache.maven.plugin-tools
61 | maven-plugin-annotations
62 | ${maven-plugin-annotations.version}
63 | provided
64 |
65 |
66 |
68 |
69 | org.twdata.maven
70 | mojo-executor
71 | ${mojo-executor.version}
72 |
73 |
74 | org.slf4j
75 | slf4j-simple
76 |
77 |
78 |
79 |
80 |
81 | commons-io
82 | commons-io
83 | ${commons-io.version}
84 |
85 |
86 |
87 | org.apache.commons
88 | commons-lang3
89 | ${commons-lang3.version}
90 |
91 |
92 |
94 |
95 | org.glassfish.jaxb
96 | jaxb-xjc
97 | ${jaxb.version}
98 |
99 |
100 |
101 | org.glassfish.jaxb
102 | jaxb-runtime
103 | ${jaxb.version}
104 |
105 |
106 |
107 |
108 | com.sun.xml.ws
109 | jaxws-rt
110 | ${jaxws-ri.version}
111 | pom
112 |
113 |
114 |
115 |
116 | org.junit.jupiter
117 | junit-jupiter
118 | ${junit.version}
119 | test
120 |
121 |
122 |
123 | org.hamcrest
124 | hamcrest
125 | ${hamcrest.version}
126 | test
127 |
128 |
129 |
130 | org.springframework
131 | spring-core
132 | ${spring.version}
133 | test
134 |
135 |
136 |
137 |
138 |
139 |
140 |
142 |
143 | org.apache.maven.plugins
144 | maven-surefire-plugin
145 | 2.22.2
146 |
147 |
148 | org.apache.maven.plugins
149 | maven-plugin-plugin
150 | ${maven-plugin-plugin.version}
151 |
152 |
153 | default-descriptor
154 | process-classes
155 |
156 |
157 |
158 | help-goal
159 |
160 | helpmojo
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin/src/main/java/de/codecentric/cxf/BootCxfMojo.java:
--------------------------------------------------------------------------------
1 | package de.codecentric.cxf;
2 |
3 | import com.sun.tools.xjc.api.XJC;
4 | import org.apache.commons.io.FileUtils;
5 | import org.apache.commons.lang3.StringUtils;
6 | import org.apache.maven.execution.MavenSession;
7 | import org.apache.maven.plugin.AbstractMojo;
8 | import org.apache.maven.plugin.BuildPluginManager;
9 | import org.apache.maven.plugin.MojoExecutionException;
10 | import org.apache.maven.plugins.annotations.Component;
11 | import org.apache.maven.plugins.annotations.LifecyclePhase;
12 | import org.apache.maven.plugins.annotations.Mojo;
13 | import org.apache.maven.plugins.annotations.Parameter;
14 | import org.apache.maven.project.MavenProject;
15 |
16 | import java.io.File;
17 | import java.io.IOException;
18 | import java.nio.charset.Charset;
19 | import java.util.Collection;
20 | import java.util.Optional;
21 | import java.util.regex.Matcher;
22 | import java.util.regex.Pattern;
23 |
24 | import static org.twdata.maven.mojoexecutor.MojoExecutor.*;
25 |
26 | @Mojo(name = "generate", defaultPhase=LifecyclePhase.GENERATE_SOURCES)
27 | public class BootCxfMojo extends AbstractMojo {
28 |
29 | private static final String GENERATED_SOURCES_TARGET_FOLDER = "target/generated-sources/wsdlimport";
30 | private static final String TEST_GENERATED_SOURCES_TARGET_FOLDER = "target/test/generated-sources/wsdlimport";
31 |
32 | private static final String WSDL_NOT_FOUND_ERROR_MESSAGE = ".wsdl-File not found - is it placed somewhere under /src/main/resources or /src/test/resources?";
33 | private static final String LOG_PREFIX = "CXF-BOOT-MAVEN-PLUGIN ";
34 | public static final String CXF_SPRING_BOOT_MAVEN_PROPERTIES_FILE_NAME = "cxf-spring-boot-maven.properties";
35 | public static final String SEI_IMPLEMENTATION_PACKAGE_NAME_KEY = "sei.implementation.package.name";
36 | public static final String SEI_AND_WEB_SERVICE_CLIENT_PACKAGE_NAME_KEY = "sei.and.webserviceclient.package.name";
37 |
38 | // (?<=targetNamespace=")[:./a-zA-Z0-9]+(?=")
39 | private static final String REGEX_FIND_TARGET_NAMESPACE_CONTENT = "(?<=targetNamespace=\")[:._/a-zA-Z0-9-]+(?=\")";
40 | private static final String TARGET_NAMESPACE_COULDNT_BE_EXTRACTED = "targetNamespace could not be extracted from WSDL file.";
41 |
42 |
43 | @Parameter( defaultValue = "${project}", readonly = true )
44 | private MavenProject mavenProject;
45 |
46 | @Parameter( defaultValue = "${session}", readonly = true )
47 | private MavenSession mavenSession;
48 |
49 | @Component
50 | private BuildPluginManager pluginManager;
51 |
52 | public void execute() throws MojoExecutionException {
53 |
54 | logWithPrefix("STEP 0: Scanning for WSDL file in src/main/resources");
55 |
56 | File wsdl = findWsdl(mavenProject.getBasedir());
57 | String buildDirectory = mavenProject.getBuild().getOutputDirectory();
58 |
59 | logWithPrefix("STEP 1: Found .wsdl-File: " + wsdl.getPath());
60 | if(isWsdlLocatedInTestResources(wsdl)) {
61 | logWithPrefix("STEP 2: Generating JAX-B Classfiles for Test purpose.");
62 | generateJaxbClassFiles(wsdl, "wsimport-test", TEST_GENERATED_SOURCES_TARGET_FOLDER);
63 |
64 | logWithPrefix("STEP 3: Adding the generated Test-Java-Classes to project´s classpath...");
65 | addGeneratedTestClasses2Cp();
66 |
67 | } else if(isWsdlLocatedInMainResources(wsdl)) {
68 | logWithPrefix("STEP 2: Generating JAX-B Classfiles.");
69 | generateJaxbClassFiles(wsdl, "wsimport", GENERATED_SOURCES_TARGET_FOLDER);
70 |
71 | logWithPrefix("STEP 3: Adding the generated Java-Classes to project´s classpath...");
72 | addGeneratedClasses2Cp();
73 | }
74 |
75 | logWithPrefix("STEP 4: Guessing SEI implementation´s package name & injecting it into " + CXF_SPRING_BOOT_MAVEN_PROPERTIES_FILE_NAME + " for later Autodetection of Endpoints...");
76 | // The first writer to cxf-spring-boot-maven.properties should clean the file of old entries
77 | // Otherwise just appending would lead to bogus properties
78 | cleanCxfSpringBootMavenProperties(buildDirectory);
79 | writeSeiImplementationPackageToCxfSpringBootMavenPropterties(buildDirectory, mavenProject.getGroupId());
80 |
81 | logWithPrefix("STEP 5: Extracting targetNamespace from WSDL, generating packageName from it with com.sun.tools.xjc.api.XJC (see wsgen, WSImportTool and WSDLModeler at line 2312 of the JAXWSRI) and injecting it into " + CXF_SPRING_BOOT_MAVEN_PROPERTIES_FILE_NAME + " for later Autodetection of Endpoints...");
82 | String targetNamespaceFromWsdl = readTargetNamespaceFromWsdl(readWsdlIntoString(wsdl));
83 | String seiImplementationBasePackageName = generatePackageNameFromTargetNamespaceInWsdl(targetNamespaceFromWsdl);
84 | writeSeiAndWebServiceClientPackageToCxfSpringBootMavenPropterties(buildDirectory, seiImplementationBasePackageName);
85 | }
86 |
87 | private void generateJaxbClassFiles(File wsdl, String jaxwsMavenPluginGoal, String dir2PutGeneratedClassesIn) throws MojoExecutionException {
88 | executeMojo(
89 | /*
90 | * Generate Java-Classes inkl. JAXB-Bindings from WSDL & imported XSD
91 | * See Doku at http://www.mojohaus.org/jaxws-maven-plugin/
92 | *
93 | * Attention: The project has been moved from codehaus to project metro in 2007:
94 | * https://jax-ws-commons.java.net/jaxws-maven-plugin/ and then back to codehaus
95 | * in 2015, where it is developed further: https://github.com/mojohaus/jaxws-maven-plugin
96 | *
97 | * From 2019/20 on the https://github.com/mojohaus/jaxws-maven-plugin is deprecated and moved to
98 | * https://github.com/eclipse-ee4j/metro-jax-ws/tree/master/jaxws-ri/extras/jaxws-maven-plugin
99 | */
100 | plugin(
101 | groupId("com.sun.xml.ws"),
102 | artifactId("jaxws-maven-plugin"),
103 | version("3.0.0"),
104 | dependencies(
105 | dependency(
106 | "org.jvnet.jaxb2_commons",
107 | "jaxb2-namespace-prefix",
108 | "1.3"))
109 | ),
110 | goal(jaxwsMavenPluginGoal),
111 | configuration(
112 | /*
113 | * See http://www.mojohaus.org/jaxws-maven-plugin/wsimport-mojo.html
114 | */
115 | element(name("wsdlDirectory"), wsdlPathWithoutFileName(wsdl)),
116 | /*
117 | * This is very useful to NOT generate something like
118 | * wsdlLocation = "file:/Users/myuser/devfolder/cxf-spring-boot-starter/src/test/resources/wsdl/Weather1.0.wsdl"
119 | * into the @WebServiceClient generated Class. This could break stuff, e.g. when u build on Jenkins
120 | * and then try to deploy on a Linux server, where the path is completely different
121 | */
122 | element(name("wsdlLocation"), constructWsdlLocation(wsdl)),
123 | element(name("sourceDestDir"), dir2PutGeneratedClassesIn),
124 | /*
125 | * For accessing the imported schema, see https://netbeans.org/bugzilla/show_bug.cgi?id=241570
126 | */
127 | element("vmArgs",
128 | element("vmArg", "-Djavax.xml.accessExternalSchema=all -Djavax.xml.accessExternalDTD=all")),
129 | /*
130 | * the binding.xml in the given directory is found automatically,
131 | * because the directory is scanned for '.xml'-Files
132 | */
133 | element("bindingDirectory", wsdlPathWithoutFileName(wsdl)),
134 | /*
135 | * Arguments for JAXB2-Generator behind JAX-WS-Frontend
136 | */
137 | element("args",
138 | element("arg", "-extension"),
139 | /*
140 | * Thats a tricky parameter: The first '-B' is for passing the following argument
141 | * to JAXB2-Generator the second is needed to generate the human readable Namespace-
142 | * Prefixes
143 | */
144 | element("arg", "-B-Xnamespace-prefix"))
145 | ),
146 | executionEnvironment(
147 | mavenProject,
148 | mavenSession,
149 | pluginManager
150 | )
151 | );
152 | }
153 |
154 |
155 | private String constructWsdlLocation(File wsdl) throws MojoExecutionException {
156 | String wsdlLocation = "/" + wsdlFolderInResources(wsdl) + wsdlFileName(wsdl);
157 | logWithPrefix("setting relative wsdlLocation into @WebServiceClient: " + wsdlLocation);
158 | return wsdlLocation;
159 | }
160 |
161 | private boolean isWsdlLocatedInTestResources(File wsdl) throws MojoExecutionException {
162 | return StringUtils.contains(wsdl.getPath(), "/test/") || StringUtils.contains(wsdl.getPath(), "\\test\\");
163 | }
164 |
165 |
166 | private boolean isWsdlLocatedInMainResources(File wsdl) throws MojoExecutionException {
167 | return StringUtils.contains(wsdl.getPath(), "/main/") || StringUtils.contains(wsdl.getPath(), "\\main\\");
168 | }
169 |
170 | private String wsdlFileName(File wsdl) throws MojoExecutionException {
171 | return wsdl.getName();
172 | }
173 |
174 | private String wsdlFolderInResources(File wsdl) {
175 | String folderAboveResourceDir = wsdlFileParentFolderName(wsdl, "");
176 | return folderAboveResourceDir;
177 | }
178 |
179 | private String wsdlFileParentFolderName(File wsdl, String folderAboveResourceDir) {
180 | if(!"resources".equals(wsdl.getParentFile().getName())) {
181 | folderAboveResourceDir = wsdl.getParentFile().getName() + "/" + folderAboveResourceDir;
182 | return wsdlFileParentFolderName(wsdl.getParentFile(), folderAboveResourceDir);
183 | } else {
184 | return folderAboveResourceDir;
185 | }
186 | }
187 |
188 | private String wsdlPathWithoutFileName(File wsdl) throws MojoExecutionException {
189 | return wsdl.getParent();
190 | }
191 |
192 | protected File findWsdl(File buildDirectory) throws MojoExecutionException {
193 | String[] extension = {"wsdl"};
194 | Collection wsdls = FileUtils.listFiles(buildDirectory, extension, true);
195 |
196 | filterOutWsdlsInsideBuildOutputFolder(wsdls);
197 |
198 | Optional wsdl = wsdls.stream().findFirst();
199 |
200 | if(wsdl.isPresent()) {
201 | return wsdl.get();
202 | } else {
203 | throw new MojoExecutionException(WSDL_NOT_FOUND_ERROR_MESSAGE);
204 | }
205 | }
206 |
207 | private void filterOutWsdlsInsideBuildOutputFolder(Collection wsdls) {
208 | if(mavenProject != null) {
209 | String targetDirectory = mavenProject.getBuild().getOutputDirectory().replaceAll("classes$", "");
210 | wsdls.removeIf(f -> f.getAbsolutePath().startsWith(targetDirectory));
211 | }
212 | }
213 |
214 | private void addGeneratedClasses2Cp() throws MojoExecutionException {
215 | /*
216 | * Add the generated Java-Classes to classpath
217 | */
218 | executeMojo(
219 | plugin(
220 | groupId("org.codehaus.mojo"),
221 | artifactId("build-helper-maven-plugin"),
222 | version("3.0.0")
223 | ),
224 | goal("add-source"),
225 | configuration(
226 | element("sources",
227 | element("source", GENERATED_SOURCES_TARGET_FOLDER))
228 | ),
229 | executionEnvironment(
230 | mavenProject,
231 | mavenSession,
232 | pluginManager
233 | )
234 | );
235 | }
236 |
237 | private void addGeneratedTestClasses2Cp() throws MojoExecutionException {
238 | /*
239 | * Add the generated Java-Classes to classpath
240 | */
241 | executeMojo(
242 | plugin(
243 | groupId("org.codehaus.mojo"),
244 | artifactId("build-helper-maven-plugin"),
245 | version("3.0.0")
246 | ),
247 | goal("add-test-source"),
248 | configuration(
249 | element("sources",
250 | element("source", TEST_GENERATED_SOURCES_TARGET_FOLDER))
251 | ),
252 | executionEnvironment(
253 | mavenProject,
254 | mavenSession,
255 | pluginManager
256 | )
257 | );
258 | }
259 |
260 | private void logWithPrefix(String logMessage) {
261 | getLog().info(LOG_PREFIX + logMessage);
262 | }
263 |
264 | protected String readTargetNamespaceFromWsdl(String wsdl) throws MojoExecutionException {
265 |
266 | Matcher matcher = buildMatcher(wsdl, REGEX_FIND_TARGET_NAMESPACE_CONTENT);
267 |
268 | if (matcher.find()) {
269 | return matcher.group(0);
270 | } else {
271 | throw new MojoExecutionException(TARGET_NAMESPACE_COULDNT_BE_EXTRACTED);
272 | }
273 | }
274 |
275 | protected static String readWsdlIntoString(File wsdl) throws MojoExecutionException {
276 | try {
277 | return FileUtils.readFileToString(wsdl, Charset.defaultCharset());
278 | } catch (IOException ioEx) {
279 | throw new MojoExecutionException("Problems in transforming WSDL File to String.", ioEx);
280 | }
281 | }
282 |
283 | private static Matcher buildMatcher(String string2SearchIn, String regex) {
284 | Pattern pattern = Pattern.compile(regex);
285 | return pattern.matcher(string2SearchIn);
286 | }
287 |
288 | protected String generatePackageNameFromTargetNamespaceInWsdl(String targetNamespaceFromWsdl) throws MojoExecutionException {
289 | /*
290 | * We need to use the same mechanism jaxws-maven-plugin, which itself uses WSimportTool of the JAXWS-RI implementation,
291 | * to obtain the package-Name from the WSDL file, where the classes are generated to. The WSDL´s targetNamespace is
292 | * used to generate the package name. If you have targetNamespace="http://www.codecentric.de/namespace/weatherservice/"
293 | * for example, your package will be de.codecentric.namespace.weatherservice.
294 | * The code is in WSDLModeler at line 2312:
295 | */
296 | return XJC.getDefaultPackageName(targetNamespaceFromWsdl);
297 | }
298 |
299 | protected void writeSeiAndWebServiceClientPackageToCxfSpringBootMavenPropterties(String outputDirectory, String packageName) throws MojoExecutionException {
300 | writeCxfSpringBootMavenProperties(outputDirectory, SEI_AND_WEB_SERVICE_CLIENT_PACKAGE_NAME_KEY, packageName);
301 | }
302 |
303 | protected void writeSeiImplementationPackageToCxfSpringBootMavenPropterties(String outputDirectory, String packageName) throws MojoExecutionException {
304 | writeCxfSpringBootMavenProperties(outputDirectory, SEI_IMPLEMENTATION_PACKAGE_NAME_KEY, packageName);
305 | }
306 |
307 | protected void writeCxfSpringBootMavenProperties(String outputDirectory, String propertyKey, String packageName) throws MojoExecutionException {
308 | try {
309 | File cxfSpringBootMavenProperties = new File(outputDirectory + "/" + CXF_SPRING_BOOT_MAVEN_PROPERTIES_FILE_NAME);
310 | FileUtils.writeStringToFile(cxfSpringBootMavenProperties, propertyKey + "=" + packageName + "\n", Charset.defaultCharset(), true);
311 |
312 | } catch (IOException ioExc) {
313 | throw new MojoExecutionException("Could not inject packageName into " + CXF_SPRING_BOOT_MAVEN_PROPERTIES_FILE_NAME + "." +
314 | "Have you set the pom groupId correctly?", ioExc);
315 | }
316 | }
317 |
318 | public void cleanCxfSpringBootMavenProperties(String outputDirectory) throws MojoExecutionException {
319 | try {
320 | File cxfSpringBootMavenProperties = new File(outputDirectory + "/" + CXF_SPRING_BOOT_MAVEN_PROPERTIES_FILE_NAME);
321 | FileUtils.writeStringToFile(cxfSpringBootMavenProperties, "", Charset.defaultCharset());
322 |
323 | } catch (IOException ioExc) {
324 | throw new MojoExecutionException("Could not clean " + CXF_SPRING_BOOT_MAVEN_PROPERTIES_FILE_NAME, ioExc);
325 | }
326 | }
327 | }
328 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | generate
8 |
9 |
10 |
11 |
12 | true
13 | false
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin/src/test/java/de/codecentric/cxf/BootCxfMojoTest.java:
--------------------------------------------------------------------------------
1 | package de.codecentric.cxf;
2 |
3 | import org.apache.commons.io.FileUtils;
4 | import org.apache.maven.plugin.MojoExecutionException;
5 | import org.junit.jupiter.api.Test;
6 | import org.springframework.core.io.Resource;
7 | import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
8 |
9 | import java.io.File;
10 | import java.io.FileNotFoundException;
11 | import java.io.IOException;
12 | import java.nio.charset.Charset;
13 | import java.util.Arrays;
14 | import java.util.Optional;
15 |
16 | import static de.codecentric.cxf.BootCxfMojo.readWsdlIntoString;
17 | import static org.hamcrest.MatcherAssert.assertThat;
18 | import static org.hamcrest.Matchers.containsString;
19 | import static org.junit.jupiter.api.Assertions.assertEquals;
20 |
21 | public class BootCxfMojoTest {
22 |
23 | private File weatherServiceWsdl = new File("src/test/resources/Weather1.0.wsdl");
24 |
25 | private BootCxfMojo bootCxfMojo = new BootCxfMojo();;
26 | private File resourcesDirectory = new File("src/test/resources");
27 | private String buildDirectory = new File("target/classes").getAbsolutePath();
28 |
29 | @Test
30 | public void
31 | find_Wsdl_in_classpath() throws IOException, MojoExecutionException {
32 |
33 | File wsdl = bootCxfMojo.findWsdl(resourcesDirectory);
34 |
35 | assertEquals(weatherServiceWsdl.getName(), wsdl.getName());
36 | }
37 |
38 | @Test public void
39 | read_target_namespace_from_Wsdl() throws MojoExecutionException {
40 |
41 | File wsdl = bootCxfMojo.findWsdl(resourcesDirectory);
42 | String targetNamespace = bootCxfMojo.readTargetNamespaceFromWsdl(readWsdlIntoString(wsdl));
43 |
44 | assertEquals("http://www.codecentric.de/namespace/weatherservice/", targetNamespace);
45 | }
46 |
47 | @Test public void
48 | extract_correct_package_name_from_target_namespace_in_Wsdl() throws MojoExecutionException {
49 |
50 | File wsdl = bootCxfMojo.findWsdl(resourcesDirectory);
51 | String targetNamespace = bootCxfMojo.readTargetNamespaceFromWsdl(readWsdlIntoString(wsdl));
52 | String packageName = bootCxfMojo.generatePackageNameFromTargetNamespaceInWsdl(targetNamespace);
53 |
54 | assertEquals("de.codecentric.namespace.weatherservice", packageName);
55 | }
56 |
57 | @Test public void
58 | extract_correct_package_name_from_target_namespace_containing_numbers_in_Wsdl() throws MojoExecutionException {
59 |
60 | String wsdl = "\n" +
61 | "\n" +
65 | "";
66 | String targetNamespace = bootCxfMojo.readTargetNamespaceFromWsdl(wsdl);
67 | String packageName = bootCxfMojo.generatePackageNameFromTargetNamespaceInWsdl(targetNamespace);
68 |
69 | assertEquals("ch.abc.namespase.filsearch.v5", packageName);
70 | }
71 |
72 | @Test public void
73 | extract_correct_package_name_from_target_namespace_containing_dash_in_Wsdl() throws MojoExecutionException {
74 |
75 | String wsdl = "\n" +
76 | "\n" +
80 | "";
81 | String targetNamespace = bootCxfMojo.readTargetNamespaceFromWsdl(wsdl);
82 | String packageName = bootCxfMojo.generatePackageNameFromTargetNamespaceInWsdl(targetNamespace);
83 |
84 | assertEquals("schemas.dynamics.microsoft.page.customers", packageName);
85 | }
86 |
87 | @Test public void
88 | extract_correct_package_name_from_target_namespace_containing_underscores_in_Wsdl() throws MojoExecutionException {
89 |
90 | String wsdl = "\n" +
91 | "\n" +
95 | "";
96 | String targetNamespace = bootCxfMojo.readTargetNamespaceFromWsdl(wsdl);
97 | String packageName = bootCxfMojo.generatePackageNameFromTargetNamespaceInWsdl(targetNamespace);
98 |
99 | assertEquals("com.comarch.crm.tag.webservice_v26", packageName);
100 | }
101 |
102 | @Test public void
103 | does_write_cxfSpringBootMavenProperties() throws MojoExecutionException, IOException {
104 |
105 | bootCxfMojo.writeCxfSpringBootMavenProperties(buildDirectory, "foo.key", "foo.bar");
106 |
107 | File cxfSpringBootMavenProperties = findCxfSpringBootMavenPropertiesInClasspath();
108 | assertEquals(BootCxfMojo.CXF_SPRING_BOOT_MAVEN_PROPERTIES_FILE_NAME, cxfSpringBootMavenProperties.getName());
109 |
110 | }
111 |
112 | @Test public void
113 | does_clean_cxfSpringBootMavenProperties() throws MojoExecutionException, IOException {
114 |
115 | bootCxfMojo.cleanCxfSpringBootMavenProperties(buildDirectory);
116 |
117 | String content = FileUtils.readFileToString(findCxfSpringBootMavenPropertiesInClasspath(), Charset.defaultCharset());
118 | assertEquals(0, content.length());
119 | }
120 |
121 | @Test public void
122 | does_write_Sei_And_WebServiceClient_packageName_into_cxfSpringBootMavenProperties_file() throws MojoExecutionException, IOException {
123 |
124 | String packageNameGeneratedFromTargetNamespace = "de.codecentric.namespace.weatherservice";
125 |
126 | bootCxfMojo.writeSeiAndWebServiceClientPackageToCxfSpringBootMavenPropterties(buildDirectory, packageNameGeneratedFromTargetNamespace);
127 |
128 | String content = FileUtils.readFileToString(findCxfSpringBootMavenPropertiesInClasspath(), Charset.defaultCharset());
129 | assertThat(content, containsString(BootCxfMojo.SEI_AND_WEB_SERVICE_CLIENT_PACKAGE_NAME_KEY + "=" + packageNameGeneratedFromTargetNamespace));
130 | }
131 |
132 |
133 | @Test public void
134 | does_write_Sei_Implementation_packageName_into_cxfSpringBootMavenProperties_file() throws Exception {
135 |
136 | String seiImplementationPackageName = "de.codecentric.soap";
137 |
138 | bootCxfMojo.writeSeiImplementationPackageToCxfSpringBootMavenPropterties(buildDirectory, seiImplementationPackageName);
139 |
140 | String content = FileUtils.readFileToString(findCxfSpringBootMavenPropertiesInClasspath(), Charset.defaultCharset());
141 | assertThat(content, containsString(BootCxfMojo.SEI_IMPLEMENTATION_PACKAGE_NAME_KEY + "=" + seiImplementationPackageName));
142 | }
143 |
144 | @Test public void
145 | does_not_overwrite_packages_in_cxfSpringBootMavenProperties_file() throws MojoExecutionException, IOException {
146 | bootCxfMojo.writeCxfSpringBootMavenProperties(buildDirectory, "foo.key", "foo.bar");
147 | bootCxfMojo.writeCxfSpringBootMavenProperties(buildDirectory, "bar.key", "bar.boar");
148 |
149 | String content = FileUtils.readFileToString(findCxfSpringBootMavenPropertiesInClasspath(), Charset.defaultCharset());
150 | assertThat(content, containsString("foo.key" + "=" + "foo.bar"));
151 | assertThat(content, containsString("bar.key" + "=" + "bar.boar"));
152 | }
153 |
154 | private File findCxfSpringBootMavenPropertiesInClasspath() throws IOException {
155 | return findInClasspath("classpath*:**/" + BootCxfMojo.CXF_SPRING_BOOT_MAVEN_PROPERTIES_FILE_NAME).getFile();
156 | }
157 |
158 | private Resource findInClasspath(String pattern) throws IOException {
159 | PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
160 |
161 | Resource[] resources = resolver.getResources(pattern);
162 |
163 | Optional first = Arrays.stream(resources).findFirst();
164 |
165 | if(first.isPresent()) {
166 | return first.get();
167 | } else {
168 | throw new FileNotFoundException();
169 | }
170 | }
171 |
172 | }
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin/src/test/resources/wsdl/Weather-Schemes/w3c-xmlmime-definition.xsd:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin/src/test/resources/wsdl/Weather-Schemes/weather-datatypes.xsd:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin/src/test/resources/wsdl/Weather-Schemes/weather-exception.xsd:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin/src/test/resources/wsdl/Weather-Schemes/weather-general.xsd:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin/src/test/resources/wsdl/Weather1.0.wsdl:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | Gets Information for each WeatherID
47 |
48 |
49 |
50 |
51 |
52 | Allows you to get your City Forecast Over the Next 7 Days, which is updated hourly.
53 |
54 |
55 |
56 |
57 |
58 | Allows you to get your City's Weather, which is updated hourly.
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
--------------------------------------------------------------------------------
/cxf-spring-boot-starter-maven-plugin/src/test/resources/wsdl/Weather1.0.xsd:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
12 |
13 |
15 |
16 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 4.0.0
4 | de.codecentric
5 | cxf-spring-boot-starter-maven-plugin-reactor
6 | cxf-spring-boot-starter-maven-plugin-reactor
7 | 2.4.0-SNAPSHOT
8 |
9 | Reactor Maven project for the cxf-spring-boot-starter-maven-plugin
10 | pom
11 | https://github.com/codecentric/cxf-spring-boot-starter-maven-plugin
12 |
13 |
14 | Apache License, Version 2.0
15 | http://opensource.org/licenses/Apache-2.0
16 | repo
17 |
18 |
19 |
20 |
21 | Jonas Hecht
22 | jonas.hecht@codecentric.de
23 | codecentric AG
24 | http://www.codecentric.de
25 |
26 |
27 |
28 | scm:git:git://github.com/codecentric/cxf-spring-boot-starter-maven-plugin.git
29 | scm:git:ssh://git@github.com/codecentric/cxf-spring-boot-starter-maven-plugin.git
30 | git@github.com:/codecentric/cxf-spring-boot-starter-maven-plugin.git
31 |
32 |
33 |
34 | oss.sonatype.org
35 | https://oss.sonatype.org/service/local/staging/deploy/maven2/
36 |
37 |
38 | oss.sonatype.org
39 | https://oss.sonatype.org/content/repositories/snapshots
40 |
41 |
42 |
43 |
44 | cxf-spring-boot-starter-maven-plugin
45 | cxf-spring-boot-starter-maven-plugin-integrationtest
46 |
47 |
48 |
49 | 1.8
50 | 1.8
51 | 1.8
52 |
53 |
54 | 2.18.0
55 | 1.6
56 | 3.3.1
57 | 3.11.2
58 | 1.6.8
59 |
60 |
61 |
62 |
63 |
64 | central-deploy
65 |
66 |
67 |
68 | maven-gpg-plugin
69 | ${maven-gpg-plugin.version}
70 |
71 |
72 | sign-artifacts
73 | verify
74 |
75 | sign
76 |
77 |
78 |
79 |
80 |
81 | org.codehaus.mojo
82 | versions-maven-plugin
83 | ${versions-maven-plugin.version}
84 |
85 | false
86 |
87 |
88 |
89 | maven-deploy-plugin
90 |
91 | true
92 |
93 |
94 |
95 | org.apache.maven.plugins
96 | maven-source-plugin
97 | ${maven-source-plugin.version}
98 |
99 |
100 | attach-sources
101 |
102 | jar
103 |
104 |
105 |
106 |
107 |
108 | org.apache.maven.plugins
109 | maven-javadoc-plugin
110 | ${maven-javadoc-plugin.version}
111 |
112 |
113 | attach-javadocs
114 |
115 | jar
116 |
117 |
118 |
119 |
120 |
121 | org.sonatype.plugins
122 | nexus-staging-maven-plugin
123 | ${nexus-staging-maven-plugin.version}
124 | true
125 |
126 | oss.sonatype.org
127 | https://oss.sonatype.org/
128 | ${project.version}
129 |
130 |
131 |
132 | deploy-to-sonatype
133 | deploy
134 |
135 | deploy
136 | release
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
--------------------------------------------------------------------------------
/pubring.gpg.asc:
--------------------------------------------------------------------------------
1 | -----BEGIN PGP MESSAGE-----
2 | Version: GnuPG v1
3 |
4 | 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
66 | R67/OWydp4M/YtYt/E0GDg==
67 | =hRfA
68 | -----END PGP MESSAGE-----
69 |
--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "config:base"
4 | ],
5 | "automerge": true,
6 | "automergeType": "branch",
7 | "major": {
8 | "automerge": false
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/secring.gpg.asc:
--------------------------------------------------------------------------------
1 | -----BEGIN PGP MESSAGE-----
2 | Version: GnuPG v1
3 |
4 | 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
71 | DsP+owMsTkqpuqwF37Y=
72 | =Zg3d
73 | -----END PGP MESSAGE-----
74 |
--------------------------------------------------------------------------------
/settings.xml.asc:
--------------------------------------------------------------------------------
1 | -----BEGIN PGP MESSAGE-----
2 | Version: GnuPG v1
3 |
4 | hQEMA5qETcGag5w6AQf9HrlSkxTsQHf89rHnhM7WdpOYSaBCg7qew37D6Q6iMauU
5 | cbFFP7ebv3hVDZmTwDKWwVSCy05v7GMoKOSpsyi/sSrnJoCCFTd+L+0e/Ppi8fIJ
6 | FzqWEcT9VkeNuAiunkXkKDrybue7GllcrTLr6ZO/6x25QHT9kDa6bwpJnBVPOiUT
7 | C6sp0rVz2k4bR1+oN8rRmyVHkLyOdVgsyk8WpQFfzelvYqecmzXM9ZOuC2b1rjIY
8 | hx9wvtYl80no7U7L0Meei+SZuEngosrD/eYHVtE3BDR/vZSuCfPOEvcDcC2cc2xs
9 | PI7z/0I8MwccLDfHZGiKMbdcmDL70ftM8xhA/KqJ1NLpAQJT6u3TxJeHSiMlYYcr
10 | BjY0YylmtQPoojllwNAl68ILMbnMNoEsHwmJx5GgGsnjZRFU/UC6TOIA/BRTCIpS
11 | hgTxUZUq72xVh7q6zO+HJ+lqSVCX0e37dSTMqYTjAQ151elEjOMmfW7p+TSpftOq
12 | RxcD03alS7NJk+d9mYtZMeJaWnpLAUdQ1MbZ4hQCSQoa2/CGgbJl/1VXSt6k9fmt
13 | a0Li1/Mkm7VDa/AHo6SUkPokSlKokprFjC4rttUMWxb4ZPFkVdZs3BwFfYNQNJeI
14 | ZsIIMLPPn7z2qqnVjne0N3JEM+yLzpE/Va/AaIGuOgmyAoLI98MxF+FtiapX54NJ
15 | BugHfuDWOoR/09fotUpZmsfV75ga64wq82+jPgIa636vZs5BFBMz71RdLADK8OK+
16 | cDmlliRqVc3apZd+Mpk1Itn8RSmvyB9IGhBkvBDfjt8mNGahVj3KN6xg9Z4iTXMO
17 | /tVBSoATOrYRf/oWQsgpnXcnuBTPXGsljV5WFDsJvj5d1ojUUBbI9jsTmP7w1VIQ
18 | 3/Wan4pQHm/3xskED+CvYfUTusQvZPC/wGN+4ejfVwfZ+MsGsRuuqO9ombdfECtP
19 | vTZ06LHc3K/pJKzueHIs3dFO0GiKtiLW6Cfc/ROAY/s2GUJplPgI8vsM+7XoIOgU
20 | /eQIPo6qgJPIpO8VgaQOHCsdpv5hbsD/zt3v1Jud9St4Z2POZMh8HYiGyoX/dHA=
21 | =9KUg
22 | -----END PGP MESSAGE-----
23 |
--------------------------------------------------------------------------------