即使 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的依赖。
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?我使用 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的依赖。