即使Apache CXF依赖,也使用JAX-WS存根

时间:2016-06-01 15:04:50

标签: java cxf jax-ws

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

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

完成的特殊标头函数

使用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 impl?我使用JDK8和Apache CXF 2.3.11。

1 个答案:

答案 0 :(得分:1)

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

因此,您无法将xGetPort.get()投射到WSBindingProvider。为了使用CXF添加soap标头,方式与WSBindingProvider.setOutboundHeaders检查documentation或使用CXF WS-Security支持生成SOAP消息的标准身份验证标头类似

如果您想使用Sun的jaxws,请确保之前的jar文件位于类路径中,或删除cxfjaxws依赖项。