<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Spring on Maarten on IT</title><link>https://maarten.mulders.it/categories/spring/</link><description>Recent content in Spring on Maarten on IT</description><generator>Hugo</generator><language>en-us</language><copyright>&amp;copy; 2013 - 2026 Maarten Mulders</copyright><lastBuildDate>Mon, 27 Sep 2021 21:26:41 +0200</lastBuildDate><atom:link href="https://maarten.mulders.it/categories/spring/index.xml" rel="self" type="application/rss+xml"/><item><title>Custom SOAP Faults using Spring WS</title><link>https://maarten.mulders.it/2018/07/custom-soap-faults-using-spring-ws/</link><pubDate>Tue, 24 Jul 2018 16:05:35 +0200</pubDate><guid>https://maarten.mulders.it/2018/07/custom-soap-faults-using-spring-ws/</guid><description>&lt;p&gt;There are many situations when you need to write a SOAP-based webservice.
Maybe you are writing a test dummy, or maybe you got the interface from some kind of architect.
&lt;a href="https://docs.spring.io/spring-ws/sites/1.5/reference/html/why-contract-first.html"&gt;(Yes, there are other reasons, too.)&lt;/a&gt;
And chances are you&amp;rsquo;ll be using &lt;a href="https://docs.spring.io/spring-ws/docs/3.0.1.RELEASE/reference/#tutorial"&gt;Spring-WS&lt;/a&gt; to do this.&lt;/p&gt;
&lt;p&gt;Recently I was doing that, and I found the following inside the interface definition (WSDL):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;element&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;faultMessage&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;type=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;common:FaultMessage&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;message&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;faultMessage&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;part&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;faultMessage&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;element=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;tns:faultMessage&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/message&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;portType&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;someName&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;operation&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;searchOrder&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;input&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;message=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;tns:searchOrderRequest&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;output&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;message=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;tns:searchOrderResponse&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;fault&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;faultMessage&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;message=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;tns:faultMessage&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/operation&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/portType&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That was a rather challenging thing!
In case the operation would fail, it should give a SOAP Fault with a custom element in it:&lt;/p&gt;</description></item><item><title>I upgraded to Java 9 - Part II</title><link>https://maarten.mulders.it/2018/01/i-upgraded-to-java-9-part-ii/</link><pubDate>Tue, 23 Jan 2018 16:14:35 +0200</pubDate><guid>https://maarten.mulders.it/2018/01/i-upgraded-to-java-9-part-ii/</guid><description>&lt;p&gt;A few weeks ago, &lt;a href="https://maarten.mulders.it/blog/2018/01/migrating-to-java9.html"&gt;I wrote&lt;/a&gt; about migrating an existing Spring-application to Java 9.
When I finished, two things remained to be investigated:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Code coverage for unit tests.&lt;/li&gt;
&lt;li&gt;A bunch of warnings when running the application in Tomcat.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="code-coverage-for-unit-tests"&gt;Code coverage for unit tests&lt;/h3&gt;
&lt;p&gt;As &lt;a href="https://maarten.mulders.it/blog/2018/01/migrating-to-java9.html#comment-3706293583"&gt;Alan Bateman pointed out&lt;/a&gt;, upgrading JaCoCo to its latest version &lt;em&gt;should&lt;/em&gt; resolve the issue about the &lt;code&gt;$jacocoData&lt;/code&gt; field.
In fact, I thought I had done that, but somehow I kept on getting the same error every single time.
But when I tried (again) last week, it somehow disappeared.
No error to be seen, all tests green, and a nice coverage report from JaCoCo.
I&amp;rsquo;m a happy developer, again!&lt;/p&gt;</description></item><item><title>I upgraded to Java 9 - here's what happened</title><link>https://maarten.mulders.it/2018/01/i-upgraded-to-java-9-heres-what-happened/</link><pubDate>Fri, 12 Jan 2018 20:28:35 +0200</pubDate><guid>https://maarten.mulders.it/2018/01/i-upgraded-to-java-9-heres-what-happened/</guid><description>&lt;p&gt;I recently participated in a &lt;a href="https://twitter.com/royvanrijn/status/951087591272714241"&gt;Twitter conversation&lt;/a&gt; about upgrading to Java 9.
Like &lt;a href="https://twitter.com/royvanrijn/status/950718660641017856"&gt;most of the people&lt;/a&gt;, my current projects are all on Java 8.
Of course the question came up, why don&amp;rsquo;t you upgrade?
Good question!
Since I hadn&amp;rsquo;t even tried, I decided to see how far I could come&amp;hellip;&lt;/p&gt;
&lt;p&gt;The component I took for my experiment is a pretty simple Spring application.
It doesn&amp;rsquo;t use Spring Boot.
It exposes a few REST endpoints, and calls couple of webservices over SOAP.
For these webservices, it uses bindings generated by the &lt;a href="https://github.com/highsource/maven-jaxb2-plugin"&gt;JAXB plugin for Maven&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Getting Started with Zuul</title><link>https://maarten.mulders.it/2017/12/getting-started-with-zuul/</link><pubDate>Sat, 30 Dec 2017 14:15:35 +0200</pubDate><guid>https://maarten.mulders.it/2017/12/getting-started-with-zuul/</guid><description>&lt;p&gt;It&amp;rsquo;s been a while since my last post!
I recently have been reading a lot about the idea of &amp;ldquo;API management&amp;rdquo; or an &amp;ldquo;API gateway&amp;rdquo;.
There&amp;rsquo;s a lot of commercial offerings in this field.
Many of them promise you (to some extend) ultimate flexibility and endless possibilities.
My preference is for &amp;ldquo;lean and mean&amp;rdquo; approaches where I can pick the building blocks that I need.
In the long run, that offers more flexibility.
After all, you could replace building blocks.
Having small building blocks makes it less tempting to put any kind of business logic in such a gateway.
Doing that must sooner or later lead to some kind of vendor lock-in.&lt;/p&gt;</description></item></channel></rss>