使用API管理器的Mule代理SOAP服务

使用API管理器的Mule代理SOAP服务,mule,Mule,我试图在mule中代理HTTPS SOAP服务,因此在anypoint中使用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"

我试图在mule中代理HTTPS SOAP服务,因此在anypoint中使用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>
但由于未配置TLS,因此收到以下错误。不确定如何在wsdl函数中配置TLS

sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径


有两个不同的问题

1.您无法从属性文件中读取属性。

回答:需要使用spring上下文标记将属性文件加载到上下文中

例如:


有关更多详细信息,请参阅

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存储

确保您对JRE具有写访问权限,并使用keytool实用程序导入它:

keytool-import-alias-keystore-path-to-jre/lib/security/cacerts-file-path-to-certificate文件

例如:

keytool-import-alias newCert-keystore/opt/jdk1.6/jre/lib/security/cacerts-file/home/newCert.der

系统将提示您输入密钥库密码,默认情况下为changeit

您可以使用一个基于java的实用工具轻松地完成这项工作。
在wsdl函数中配置TLS。 TLS配置元素独立于任何模块或传输。在Mule 3.7以后的版本中,HTTP连接器和Web服务使用者都支持它

您可以通过HTTP连接器全局配置元素的UI(位于TLS/SSL选项卡上)或Web服务使用者的UI(位于安全选项卡上)创建此元素

context元素定义了tls的配置,可以从客户端和服务器端使用。它可以被其他模块的其他配置对象引用(或定义为其中一个模块的嵌套元素)

在其中,可以包含两个嵌套元素:密钥存储和信任存储。您不需要同时包含这两个选项,但必须至少包含其中一个:

从服务器端:信任存储包含受信任客户端的证书,密钥存储包含服务器的私钥和公钥

从客户端:信任存储包含受信任服务器的证书,密钥存储包含客户端的私钥和公钥


将信任存储或密钥存储添加到TLS配置会隐式实现相应类型的身份验证。将密钥库和信任存储添加到同一配置(如上面的代码示例所示)会隐式实现双向TLS身份验证,也称为相互身份验证。

如果您发现下面的答案有助于解决问题,请告诉我们。.感谢您的详细回复Mahesh。对于答案1-我不是在构建项目,它的mule anypoint API本身正在创建具有这些属性的项目,对于答案2-我不能在本地拥有密钥库,而是使用TLS Unsecure作为所有https连接的真实密钥。因此,我的疑问是如何在wsdl(“url”)dataweave函数中配置tls,或者是否有其他方法来创建HTTPS代理服务
#[dw(wsdl('https://myhost/check/checkrecieveAPI?WSDL'))]
<context:property-placeholder location="propetyFileName.properties" />
<flow name="myProject_flow">
<logger message="${propertyFromPropertyFile}" doc:name="System Property 
 Set in Property File"/>
</flow>