即使 Apache CXF 处于依赖关系,也使用 JAX-WS 存根

Using JAX-WS stub even if Apache CXF is in dependency

WS 客户端,当我调用我的 WS 时它工作 当我创建我的存根时,我得到一个 SEIStub impl.

然后这里是Apache CXF 中另一个WS 的新客户端。我们把依赖放在我们的 pom 中,然后坏事发生了: 当我用我的 JAX-WS 存根调用我的第一个 WS 时,我现在得到一个 JaxWSClientProxy,Apache CXF 似乎成为默认实现。我不能使用为 WSBindingProvider 而不是 JaxWsClientProxy

完成的特殊 header 函数

使用 jaxws 生成客户端:

            <plugin>
                <groupId>org.jvnet.jax-ws-commons</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>${jaxws.plugin.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <packageName>fr.xxxx.commons.client.stub.y</packageName>
                            <sourceDestDir>${ws.java.target}</sourceDestDir>
                            <extension>true</extension>
                            <wsdlDirectory>${project.parent.basedir}/src/main/wsdl/v2.1/</wsdlDirectory>
                            <wsdlFiles>
                                <wsdlFile>XXXXWebServices_v2.1.wsdl</wsdlFile>
                            </wsdlFiles>
                            <xnocompile>false</xnocompile>
                            <vmArgs>
                                <vmArg>-Djavax.xml.accessExternalDTD=all</vmArg>
                                <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
                            </vmArgs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

错误所在的 JAX-WS 实例化(在转换中)

xStub = new XWebServicesV21(url, qnameXWebServices);

xGetPort.set(xStub.getAutogenerate());

generateHeader(aApplicationID, aUserId, (WSBindingProvider) xGetPort.get(), xUrl);

如何强制实施 JAXWS?我使用 JDK8 和 Apache CXF 2.3.11 .

Sun的jaxws使用了com.sun.xml.ws.developer.WSBindingProvider,但是CXF没有使用。 org.apache.cxf.jaxws.JaxWsClientProxy 实施 javax.xml.ws.BindingProvider

因此您不能将 xGetPort.get() 转换为 WSBindingProvider。为了以类似于 WSBindingProvider.setOutboundHeaders 检查 documentation 或使用 CXF WS-Security 支持为 SOAP 消息生成标准身份验证 headers 的方式使用 CXF 添加 soap headers

如果要使用Sun的jaxws,确保之前的jar包在classpath中,或者去掉cxfjaxws的依赖。