我正在尝试在mule中代理一个HTTPS SOAP服务,所以在任意点使用了API管理器并在那里给出了wsdl url,但是在部署应用程序时我遇到了如下错误
Could not resolve placeholder
'wsdl(p['wsdl.uri']).services[0].preferredPort.addresses[0].host'
in string value "<http:request-config name="http-request-config"
host="![wsdl(p['wsdl.uri']).services[0].preferredPort.addresses[0].host]"
port="![wsdl(p['wsdl.uri']).services[0].preferredPort.addresses[0].port]" protocol="HTTPS">
</http:request-config>
我已下载该项目, wsdl.uri 属性存在于属性文件中。
更新:
为了了解wsdl函数返回的内容,我尝试在示例项目中提供以下数据编织。
#[dw(wsdl('https://myhost/check/checkrecieveAPI?WSDL'))]
但由于未配置TLS,因此收到以下错误。不确定如何在 wsdl 功能中配置TLS。
sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径
答案 0 :(得分:1)
有两个不同的问题。
1.您无法从属性文件中读取属性。
回答:您需要使用spring context标记将属性文件加载到上下文中。
例如:
<context:property-placeholder location="propetyFileName.properties" />
<flow name="myProject_flow">
<logger message="${propertyFromPropertyFile}" doc:name="System Property
Set in Property File"/>
</flow>
有关详细信息,请参阅link。
2.SSL握手异常。
<强>答案:强>
您收到此异常,因为您正在尝试访问受保护资源,而对于此资源,您没有向JDK添加有效证书。
为此,请检查mule / anypoint studio中配置的JDK。
您需要将所需的证书导入JDK。
有几种方法可以做到这一点。下面是我使用的方法之一,
当您的Java程序尝试连接到具有无效或自签名证书的服务器(例如开发环境中的应用程序服务器)时,您可能会遇到以下异常:
javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径
要使Java运行时环境信任该证书,您需要将其导入JRE证书库。
第1步 - 将证书存入您的浏览器商店
使用SSL浏览到您的应用程序服务器。您的浏览器会告诉您证书不受信任,并允许您信任它,从而将其放入浏览器证书存储区。
步骤2 - 将证书导出为二进制文件
您的浏览器将拥有某种证书管理器,允许您将特定证书导出或备份到二进制文件。在Firefox中,它将位于Preferences / Advanced / Encryption / Servers下。找到服务器提供的证书并将其导出为二进制DER文件。
步骤3 - 将证书导入Java Store
确保您具有对JRE的写入权限,并使用keytool实用程序导入它:
keytool -import -alias alias -keystore path-to-jre / lib / security / cacerts -file path-to-certificate-file
示例:
keytool -import -alias newCert -keystore /opt/jdk1.6/jre/lib/security/cacerts -file /home/newCert.der
系统将提示您输入密钥库密码,默认情况下为changeit。
或强>
您可以使用基于实用程序java的工具轻松完成。请在下面链接查看。 https://github.com/escline/InstallCert
答案 1 :(得分:0)
在wsdl函数中配置TLS。 TLS配置元素独立于任何模块或传输。在Mule 3.7及更高版本中,HTTP连接器和Web服务消费者都支持它。
您可以通过HTTP连接器的全局配置元素的UI,在TLS / SSL选项卡上,或通过安全选项卡上的Web服务使用者的UI创建此元素。
tls:context元素定义了TLS的配置,可以从客户端和服务器端使用。它可以被其他模块的其他配置对象引用(或者定义为其中一个模块的嵌套元素)。
在其中,您可以包含两个嵌套元素:密钥存储区和信任存储区。您不需要同时包含这两者,但两者中必须至少有一个存在:
从服务器端:信任存储包含可信客户端的证书,密钥存储区包含服务器的私钥和公钥。
从客户端:信任存储包含可信服务器的证书,密钥存储包含客户端的私钥和公钥。
将信任存储或密钥库添加到TLS配置会隐式实现相应的身份验证。将密钥库和信任库添加到同一个配置(如上面的代码示例中)隐式实现双向TLS身份验证,也称为相互身份验证。