【发布时间】:2013-07-09 14:38:14
【问题描述】:
好时光!
我创建了一个简单的 CXF 客户端来与受 SSL 保护的远程服务进行通信。如果我运行 JUnit 测试,握手执行没有错误并且通信正常。
<http:conduit name="<service_namespace_port>.http-conduit">
<http:client AutoRedirect="true" Connection="Keep-Alive"/>
<http:tlsClientParameters secureSocketProtocol="SSL" disableCNCheck="true">
<sec:keyManagers keyPassword="pass">
<sec:keyStore type="JKS" password="pass" file="keystore"/>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore type="JKS" password="pass" file="truststore"/>
</sec:trustManagers>
<sec:cipherSuitesFilter>
<sec:include>.*_EXPORT_.*</sec:include>
<sec:include>.*_EXPORT1024_.*</sec:include>
<sec:include>.*_WITH_DES_.*</sec:include>
<sec:include>.*_WITH_AES_.*</sec:include>
<sec:include>.*_WITH_NULL_.*</sec:include>
<sec:exclude>.*_DH_anon_.*</sec:exclude>
</sec:cipherSuitesFilter>
</http:tlsClientParameters>
如果我在 Weblogic Server (11g) 上部署我的应用程序并执行请求,则握手失败并显示错误“无法找到到所请求目标的有效证书路径”。根据“-Djavax.net.debug=all”得到的日志,问题是Weblogic得到它的java cacert (/jre/lib/security) 忽略了配置的CXF客户端的信任库。
我试图在 weblogic-application.xml 中写一行<package-name>javax.jws.*</package-name>,但这会杀死应用程序,并出现错误“org.springframework.beans.MethodInvocationException: Property 'serviceClass' throw exception; nested exception is java .lang.NoClassDefFoundError: javax/jws/WebService"。
有人可以建议如何告诉weblogic不要参与客户端-服务器通信吗?
编辑。这是完整的客户端配置(Spring-CXF):
<http:conduit name="<service_namespace_port>.http-conduit">
<http:client AutoRedirect="true" Connection="Keep-Alive"/>
<http:tlsClientParameters secureSocketProtocol="SSL" disableCNCheck="true">
<sec:keyManagers keyPassword="pass">
<sec:keyStore type="JKS" password="pass" file="keystore"/>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore type="JKS" password="pass" file="truststore"/>
</sec:trustManagers>
<sec:cipherSuitesFilter>
<sec:include>.*_EXPORT_.*</sec:include>
<sec:include>.*_EXPORT1024_.*</sec:include>
<sec:include>.*_WITH_DES_.*</sec:include>
<sec:include>.*_WITH_AES_.*</sec:include>
<sec:include>.*_WITH_NULL_.*</sec:include>
<sec:exclude>.*_DH_anon_.*</sec:exclude>
</sec:cipherSuitesFilter>
</http:tlsClientParameters>
</http:conduit>
<jaxws:client id="service"
serviceClass="foo.bar.ServiceClass"
address="<service_url>" />
<bean id="client" class="foo.bar.ClientClass"/>
编辑。根据this post,我改变了
<http:conduit name="<service_namespace_port>.http-conduit"> 到 <http:conduit name="*.http-conduit">
现在我收到错误“嵌套异常是 java.lang.RuntimeException:无法创建安全的 XMLInputFactory”。前段时间我遇到了这个错误,我找到的解决方案是using the system property。但是已经不适合了……
有谁知道,如何解决这个问题?
【问题讨论】:
-
您是否在 Apache CXF 网站上检查了 weblogic 的特定服务器配置? cxf.apache.org/docs/…
-
是的,正如我在问题中所写,此配置会终止部署。请参阅带有“javax.jws.*”行的段落。你知道如何解决这个问题吗?
-
既然您告诉 Weblogic 在您的 EAR/WAR 中更喜欢
javax.jws.*packages,那么您的应用程序中是否包含 JAX-WS 库? -
似乎没有这样的库,只要它失败了。但是如果没有这样的库,CXF 就不会使用它们。如果是这样,它将包含它们作为依赖项,Maven 会为它下载它们并且部署不会失败。如果我弄错了,请纠正我。
-
我已经发布了关于我的发现的答案,请告诉我它是怎么回事,如果你需要其他东西,我可以帮助你。
标签: java cxf weblogic11g