Weird error when calling soap - llegalAccessError: tried to access the org.apache.cxf.staxutils.OverlayW3CDOMStreamWriter.isOverlaid field

I have been working with a soap client since then, and I still cannot understand.

I have this error:

Exception in thread "main" java.lang.IllegalAccessError: tried to access field org.apache.cxf.staxutils.OverlayW3CDOMStreamWriter.isOverlaid from class org.apache.cxf.binding.soap.saaj.SAAJStreamWriter at org.apache.cxf.binding.soap.saaj.SAAJStreamWriter.getPrefix(SAAJStreamWriter.java:79) at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:109) at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:87) at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:67) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:324) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:277) at org.apache.cxf.endpoint.ClientImpl.invokeWrapped(ClientImpl.java:312) at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:321) at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:240) at com.sigetel.web.web.rest.consumer.SoapClient.invoke(SoapClient.java:63) at com.sigetel.web.web.rest.consumer.SoapClient.main(SoapClient.java:37) Disconnected from the target VM, address: '127.0.0.1:60128', transport: 'socket' Process finished with exit code 1 

I saw something in common, but still can't get it to work.

Here is my code:

  Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE); SOAPMessage response; SOAPBody responseBody; dispatch.getRequestContext().put(Dispatch.SOAPACTION_USE_PROPERTY, true); dispatch.getRequestContext().put(Dispatch.SOAPACTION_URI_PROPERTY, soapActionUri); try { MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage message = messageFactory.createMessage(); SOAPPart soapPart = message.getSOAPPart(); StreamSource msgSrc = new StreamSource(new StringReader(request)); soapPart.setContent(msgSrc); message.saveChanges(); response = dispatch.invoke(message); responseBody = response.getSOAPBody(); .... 

Relevant dependencies that may be related:

 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.1.6</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.8</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>javax.xml.ws</groupId> <artifactId>jaxws-api</artifactId> <version>2.2.11</version> </dependency> <dependency> <groupId>org.apache.ws.security</groupId> <artifactId>wss4j</artifactId> <version>1.6.11</version> </dependency> 

Edition:

and the following:

 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.1.11</version> </dependency> 

Any idea on this error?

+8
java soap web-services cxf
source share
2 answers

As you already noticed, you have incompatible versions of SAAJStreamWriter and OverlayW3CDOMStreamWriter .

SAAJStreamWriter is located in the cxf-rt-bindings-soap package, which is provided:

 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.1.11</version> </dependency> 

OverlayW3CDOMStreamWriter is located in pachage cxf-core , which is provided by:

 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.1.6</version> </dependency> 

Try using one of the latest org.apache.cxf versions - 3.1.13 or 3.2.0 - the same version for both dependencies.

+3
source share

You are pulling the wrong version of OverlayW3CDOMStreamWriter .

SAAJStreamWriter extends OverlayW3CDOMStreamWriter , which has an isOverlaid field.

isOverlaid was changed from a closed package to a protected one in version 3.2 and was sent back to version 3.1.7 so that it can be accessed in a subclass of SAAJStreamWriter

Both of the following dependencies pull the cxf core, which has OverlayW3CDOMStreamWriter

one.

 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.1.11</version> </dependency> 

cxf-rt-frontend-jaxws - cxf-rt-bindings-soap - 3.1.11 for SAAJStreamWriter

cxf-rt-transports-http - cxf-core - 3.1.11 for OverlayW3CDOMStreamWriter

2.

 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.1.6</version> </dependency> 

cxf-rt-transports-http - cxf-core - 3.1.6 for OverlayW3CDOMStreamWriter

cxf core 3.1.6 was chosen compared to 3.1.11, since it is closer by default. maven resolves version conflicts with the strategy of near victories.

So essentially 3.1.11 the SAAJStreamWriter class expected 3.1.11 OverlayW3CDOMStreamWriter , but found 3.1.6 OverlayW3CDOMStreamWriter , where isOverlaid was a closed package and was the cause of your error.

Correct change to use 3.1.11 for a berth dependency, or at least use version 3.1.7 for both dependencies.

 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.1.11</version> </dependency> 

This will pull out 3.1.11 to bind cxf core and cxf and should fix the error.

+3
source share

All Articles