调用soap时出现奇怪的错误--llegalAccessError:尝试访问字段org.apache.cxf.staxutils.OverlayW3CDOMStreamWriter.isOverlaid

jpg*_*z18 8 java soap web-services cxf

从那时起我一直在为肥皂客户工作,我仍然无法理解.

我有这个错误:

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
Run Code Online (Sandbox Code Playgroud)

我看到它有点普遍,但仍然无法使它工作.

这是我的代码:

 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();
....
Run Code Online (Sandbox Code Playgroud)

可能相关的相关依赖项:

<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>
Run Code Online (Sandbox Code Playgroud)

编辑:

这些:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
    <version>3.1.11</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

有关此错误的任何想法?

Ana*_*mov 5

您可能已经注意到,您的SAAJStreamWriterOverlayW3CDOMStreamWriter版本不兼容。

SAAJStreamWriter位于 package 中cxf-rt-bindings-soap,由以下提供:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
    <version>3.1.11</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

OverlayW3CDOMStreamWriter位于 pachage cxf-core,由以下提供:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http-jetty</artifactId>
    <version>3.1.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

尝试org.apache.cxf的最新版本之一- 3.1.13 或 3.2.0 - 两个依赖项的版本相同。