Windows Phone 10: Your account settings are out of date

Today I started my with a cheerful notice from my Windows Phone 10 mentioning that my Outlook account settings are out of date. A bit annoyed I ignored it until the afternoon when a second (hotmail) account started annoying me with the same message.

Letting Windows Phone “repair” the issue resulted in nothing but an¬†0x80070426 error. A suggestion from the Microsoft fora was to manually enter the go to the outlook site and login there, but this didn’t work. The only thing left was removing and re-adding the account, but I didn’t feel like doing so because Windows Phone already has the annoying habit of forgetting my settings.

At this point the PIN code of my phone went missing and when I tried to re-enable the PIN code I got another error saying I had to “try it again on a later time”.

In the end I fixed it with rule number one in IT:

1.PNG

 

So instead of removing your accounts, maybe you can try to restart your WP10 deviceūüėČ

maven-jaxb2-plugin: java.lang.NoSuchFieldError: encoding

This is the TLDR; version of this bug, so if the following solution doesn’t work for you, you might want to read it all.

When upgrading to a new version of Maven you might be faced with the following exception


[ERROR] Failed to execute goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.1:generate (schema-generate) on project WSModel: 
Execution schema-generate of goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.1:generate failed: 
An API incompatibility was encountered while executing org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.1:generate: 
java.lang.NoSuchFieldError: encoding

 

The problem is caused by a more recent version of com.sun.xml.bind:jabx-xjc being used when running the maven-jaxb2-plugin. It can be easily solved by excluding it from your plugin dependencies:

<plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <executions>
                    <execution>
                        <id>schema-generate</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <specVersion>2.1</specVersion>
                            <schemaDirectory>src/main/resources/xsd/models</schemaDirectory>
                            <schemaIncludes>
                                <include>
                                    XSD_releaseV00-09.xsd
                                </include>
                            </schemaIncludes>
                            <generateDirectory>target/generated-sources/xjc</generateDirectory>
                            <generatePackage>a.b.c</generatePackage>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.jvnet.jaxb2-commons</groupId>
                        <artifactId>property-listener-injector</artifactId>
                        <version>1.0</version>
                        <exclusions>
                            <exclusion>
                                <groupId>com.sun.xml.bind</groupId>
                                <artifactId>jaxb-xjc</artifactId>
                            </exclusion>
                        </exclusions>
                    </dependency>
                </dependencies>
            </plugin>

No inserts using Hibernate and Spring

I was setting up a simple side-project with Spring, Spring Data and Hibernate.¬†My repositories are generated using Spring Data’s jpa:repositories to save on development time and the database schema is generated using Hibernate, based on my¬†JPA and JSR-303 annotated entities.

However, one of the issues I encountered was that my repositories did not insert anything in the database. After searching the web I followed a suggestion on Stackoverflow to add an entityManager.flush() to the repository to see if a transaction was running or not. There was indeed no transaction running but I had yet to find out why.

Exception in thread "main" javax.persistence.TransactionRequiredException: no transaction is in progress
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.checkTransactionNeeded(AbstractEntityManagerImpl.java:1136)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1297)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:344)
at com.sun.proxy.$Proxy31.flush(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:293)
at com.sun.proxy.$Proxy31.flush(Unknown Source)
at be.pw999.photocol.service.PhotoColServiceImpl.makeImage(PhotoColServiceImpl.java:45)
...

At that point my code looked like this:

@Service
public class PhotoColServiceImpl implements PhotoColService {

// My Injected beans

@Autowired
private EntityManager em;

@Transactional(readOnly = false)
@Override
public MakeImageResponse makeImage(MakeImageRequest request) {
em.flush();
}
}

 

 

public class Backend {

 public static void main(String[] args) {
  ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("classpath:/META-INF/webapp/WEB-INF/application-context.xml");
  
  PhotoColService service = ac.getBean(PhotoColService.class);
  
  MakeImageRequest r = new MakeImageRequest("DSC0012.JPG", "/home/phillip/Pictures", "12345678901234567890123456789012");
  MakeImageResponse resp = service.makeImage(r);
  
  ac.close();
 }
}

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.8.xsd">

 <context:component-scan base-package="be.pw999.photocol.service"></context:component-scan>
 <!-- Define your application beans here. They will be available to the
beans defined in your web-context because it is a sub-context. Beans defined
in the web-context will not be available in the application context. -->
 <context:property-placeholder location="classpath:persistence-h2.properties" />

 <bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="packagesToScan" value="be.pw999.photocol.model" />
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
   </props>
  </property>
 </bean>

 <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
  <property name="driverClassName" value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.user}" />
  <property name="password" value="${jdbc.pass}" />
 </bean>

 <bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>

 <bean id="persistenceExceptionTranslationPostProcessor"
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

 <bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
  <property name="showSql" value="true" />
  <property name="generateDdl" value="true" />
  <property name="database" value="H2" />
 </bean>

 <bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
  <!-- spring based scanning for entity classes> -->
  <property name="packagesToScan" value="be.pw999.photocol.model" />
</bean>


 <jpa:repositories base-package="be.pw999.photocol.repository"
transaction-manager-ref="transactionManager"
entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>
</beans>

There were actually a couple of issues with this configuration.

Mistake 1

Using the wrong @Transaction annotation. There are two @Transaction annotations: @javax.persistence.Transaction and @org.springframework.transaction.annotation.Transactional. Only the latter will add transaction management to your Spring services and I had used the first one (because I trust autocomplete too much).

Mistake 2

Second mistake was that I had forgotten to add <tx:annotation-driven /> to my configuration. Stupid, stupid, stupid !

Mistake 3

After solving the first two mistakes I still had no transaction and no inserts in my H2 database. I quickly realized that¬†my transaction manager was an instance of¬†org.springframework.orm.hibernate5.HibernateTransactionManager and even though I use Hibernate, I’m not using it directly. My repositories are generated with¬†Spring’s¬†jpa:repositories and they¬†use a JPA EntityManager instead of the Hibernate¬†SessionFactory. So even though my configuration looked great, the JPA repositories did not use the Hibernate managed transactions.

So instead of using the HibernateTransactionManager, I used the org.springframework.orm.jpa.JpaTransactionManager and this did solve the no-inserts problem.

So this is now my configuration that works:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.8.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">

 <context:component-scan base-package="be.pw999.photocol.service"></context:component-scan>
 <!-- Define your application beans here. They will be available to the
beans defined in your web-context because it is a sub-context. Beans defined
in the web-context will not be available in the application context. -->
 <context:property-placeholder location="classpath:persistence-h2.properties" />
 <tx:annotation-driven transaction-manager="jpaTransactionManager" />

 <bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="packagesToScan" value="be.pw999.photocol.model" />
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
   </props>
  </property>
 </bean>

 <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
  <property name="driverClassName" value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.user}" />
  <property name="password" value="${jdbc.pass}" />
 </bean>

 <bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>

 <bean id="persistenceExceptionTranslationPostProcessor"
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

 <bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
  <property name="showSql" value="true" />
  <property name="generateDdl" value="true" />
  <property name="database" value="H2" />
 </bean>

 <bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
  <!-- spring based scanning for entity classes> -->
  <property name="packagesToScan" value="be.pw999.photocol.model" />
 </bean>

 <bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  <property name="entityManagerFactory" ref="entityManagerFactory"></property>
 </bean>

 <jpa:repositories base-package="be.pw999.photocol.repository"
transaction-manager-ref="jpaTransactionManager"
entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>
</beans>

Using ExifTool from Lightroom

A while ago I started testing Adobe Lightroom to process my photo’s and so far I’m pretty happy with it.

Even though it can handle some Exif metadata changes when exporting, I somehow missed the power of ExifTool and thus I started looking for a way to integrate it. There is somewhere on the internet a plugin, but you’ve got to pay for it so I looked further to find a cheaper way to do it.

And so I wrote myself a little export action script for Windows.

Step 1: find your export action folder

This is rather simple, by default it should be in C:\Users\<you>\AppData\Roaming\Adobe\Lightroom\Export Actions
However, if you’re a bit special, you can find it back by following the steps:

  1. Select a picture in your catalog and click the Export button (Library view)
  2. Scroll to the bottom of the screen that just opened and open the “After Export” dropdown and click on “Go To Export Action Folder Now”

 

Step 2: Download ExifTool and put the executable in this folder

It’s probably not the best place to store the executable, but this way you’ll also back-up the executable when backing up your settings. It’s best to rename the exiftool(-k).exe file to just exiftool.exe.

 

Step 3: Create the .bat

Create an empty text file and name it something like mySuperAction.bat ¬†(name it like you want, just make sure it’s a .bat and not a .txt).

Past the following code in the .bat file:


@echo off
echo Processing Images
:loop
if not exist %1 exit
if exist %1 call "C:\Users\you\AppData\Roaming\Adobe\Lightroom\Export Actions\exiftool.exe" -overwrite_original -software=ExifTool %1
shift
goto loop
:endloop

 

Adapt the call to exiftool to your likings, this example will just overwrite the Software tag with ExifTool. Also don’t forget to update the path to exiftool in the script.

 

Have fun shopping.

Eclipse RCP Dynamic popup menu

I do not have a lot of experience with the Eclipse Rich Client Platform (RCP), yet I was asked to create a dynamic submenu for an element in a JFace TreeView. The submenu should be filled in depending on the selected object plus¬†a fixed menu item which should open a new dialog. The menu should be hidden if the selected object has a value set for the property ‘myProperty’.
I’ve struggled for days to get this working, especially since most solutions¬†on the internet referred to the MenuManager which didn’t work at all in my case.

Fortunately, after some trial and error I managed to set up the submenu using the standard plugin extensions.

Continue reading

Automating JMX calls using JMXTerm

On the project I’m currently working on, we have a lot of tasks which are exposed through JMX and which we use very often. Some tasks need to be executed on a daily base, some even more often. As we all know, repetitive task are the ones we should automate and so I did.

 

 

Since I didn’t feel like writing another Java application just to call a Java application over JMX, I did some searches for a good command line JXM application and so I found JMXTerm. After fiddling around a bit, I wrote the following script which will connect to an Oracle XE database, retreive some data and use this data to call a JMX method which accepts a couple of parameters (many of which are just 0).

 

 

# prepare Oracle connection
. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

# Find the exact bean name
BEAN="$(java -jar jmxterm-1.0-alpha4.jar s -l service:jmx:rmi:///jndi/rmi://localhost:2000/myjmx -n -i discover | grep "process=MyBeanProcess,type=MyProcess")"
echo $BEAN

# Variable I'll use to query the database
BPS="40706 42001 41038 40705 40186"
for bp in $BPS; do
        # send commands to sqlplus, spool results to a file output.out
        echo "SPOOL output.out;
        SELECT REF_ID FROM MYTABLE;
        SPOOL OFF;
        exit;" | sqlplus sys/oracle@localhost as SYSDBA

        # extract the id's from the (human readable) output
        DATA=$(cat output.out | egrep "^[ ]{5}[0-9]+" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')

        # create an input script for jmxterm
        echo bean $BEAN > tmpJmxScript
        for x in $DATA; do
                echo run myJmxMethod 0 "$bp" 0 0 "${x}" 0 >> tmpJmxScript
        done;

        # connect to JMX server and execute the previously generated script
        java -jar jmxterm-1.0-alpha4.jar s -l service:jmx:rmi:///jndi/rmi://localhost:2000/myjmx -i tmpJmxScript -n
done;

The tmpJmxScript file will look something like this

bean Processes:name=MyBeanProcess,Id=2,process=MyBeanProcess,type=MyProcess
run myJmxMethod 0 40186 0 0 15907 0
run myJmxMethod 0 40186 0 0 16340 0
run myJmxMethod 0 40186 0 0 16496 0

This script tells JMXTerm to use the bean ‘MyBeanProcess’ and execute the myJmxMethod JMX method using the parameters that follow.

javax.xml.ws.soap.SOAPFaultException: Fault occurred while processing.

Last week, completely out of the blue I got faced with the following Soap exception:

 

2015-05-21 14:33:38,649 ERROR http-apr-8080-exec-4 [xxx.web.upload.generic.ExceptionHandler] Soap error
javax.xml.ws.soap.SOAPFaultException: Fault occurred while processing.
 at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:156)
 at com.sun.proxy.$Proxy231.geefExcelLijst(Unknown Source)
 at xxx.web.upload.controller.UploadController.downloadBestand(UploadController.java:170)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:606)
 at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:743)
 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:672)
 at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:82)
 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:919)
 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851)
 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
 at xxx.web.beheer.shared.util.CspFilter.doFilter(CspFilter.java:50)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
 at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
 at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
 at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
 at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
 at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
 at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
 at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
 at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
 at xxx.security.openam.spring.security.OpenAMSSOLogoutFilter.doFilter(OpenAMSSOLogoutFilter.java:69)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
 at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
 at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
 at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
 at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
 at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
 at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
 at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
 at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
 at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466)
 at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
 at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.cxf.binding.soap.SoapFault: Fault occurred while processing.
 at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:75)
 at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:46)
 at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35)
 at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
 at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:105)
 at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
 at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
 at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
 at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:771)
 at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1604)
 at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1489)
 at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1397)
 at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
 at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:644)
 at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
 at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
 at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:519)
 at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:449)
 at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:352)
 at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:304)
 at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:88)
 at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
 ... 72 more

I didn’t matter whether I ran my calls through Soap-UI or through the application, I would always face this error. No clear solutions were available on the internet, except for a bunch of things you could try.

Eventually I started debugging my code again but instead of stopping once my webservice method returned, I kept going deeper, passing through a lot of unknown (decompiled) code untill I finally hit on a caught exception. It turned out that a newly added advice would convert the result to a JSON message for audit logging and this particular conversion would result in a StackOverflowException when the result contained binary data (through a javax.activation.DataHandler object).

So if you happen to have this error, you might also want to check out your aspectsūüėČ