我正在研究 Oracle Fusion Middleware 12.1.3。
在我的组合中,我添加了一个“Rest Binding”外部参考,为此我添加了一个oracle/wss_http_token_client_policy并覆盖了csf-key属性。
在文件中,它看起来像:
myComposite.BAS:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SOA Modeler version 12.1.3.0.0 at [01-06-2016 16:01]. -->
<composite name="MyCompositeBAS"
revision="9.8.8"
label="2016-06-01_16-01-48_442"
mode="active"
state="on"
xmlns="http://xmlns.oracle.com/sca/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
xmlns:ui="http://xmlns.oracle.com/soa/designer/"
xmlns:sca-ext="http://xmlns.oracle.com/sca/1.0-ext">
[.....]
<component name="MyCompositeBASProcess" version="2.0">
<implementation.bpel src="BPEL/MyCompositeBASProcess.bpel"/>
<componentType>
<service name="mycompositebasprocess_client" ui:wsdlLocation="WSDLs/MyCompositeBASProcess.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/GDDSOA/MyCompositeBAS/MyCompositeBASProcess#wsdl.interface(MyCompositeBASProcess)"
callbackInterface="http://xmlns.oracle.com/GDDSOA/MyCompositeBAS/MyCompositeBASProcess#wsdl.interface(MyCompositeBASProcessCallback)"/>
</service>
<reference name="CMProxyRS" ui:wsdlLocation="WSDLs/CMProxyRS.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/GDDSOA/MyCompositeBAS/CMProxyRS#wsdl.interface(CMProxyRS_ptt)"/>
</reference>
</componentType>
<property name="bpel.config.oneWayDeliveryPolicy" type="xs:string" many="false">async.persist</property>
</component>
<reference name="CMProxyRS" ui:wsdlLocation="WSDLs/CMProxyRS.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/GDDSOA/MyCompositeBAS/CMProxyRS#wsdl.interface(CMProxyRS_ptt)"/>
<binding.rest config="Adapters/CMProxyRS.wadl" location="http://myUatServer/cmproxy/resources/v2/" />
</reference>
[....]
<wire>
<source.uri>MyCompositeBASProcess/CMProxyRS</source.uri>
<target.uri>CMProxyRS</target.uri>
</wire>
</composite>
wsm-assembly.xml :
<?xml version="1.0" encoding="windows-1252" ?>
<orawsp:wsm-assembly xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy">
<sca11:policySet xmlns:sca11="http://docs.oasis-open.org/ns/opencsa/sca/200912" name="policySet"
appliesTo="SCA-REST-REFERENCE()" attachTo="REFERENCE('CMProxyRS')" orawsp:highId="2"
xml:id="SCA-REST-REFERENCE__REFERENCE__CMProxyRS__">
<wsp:PolicyReference xmlns:wsp="http://www.w3.org/ns/ws-policy"
DigestAlgorithm="http://www.w3.org/ns/ws-policy/Sha1Exc"
URI="oracle/wss_http_token_client_policy" orawsp:status="enabled" orawsp:id="2">
<orawsp:OverrideProperty xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy" orawsp:name="csf-key"
orawsp:value="cmproxy.rest"/>
</wsp:PolicyReference>
</sca11:policySet>
</orawsp:wsm-assembly>
这在我的 UAT 和 PROD 环境中运行良好,其中设置了基本身份验证。
我对 DEV 环境的问题:REST 服务不需要任何身份验证。在 DEV 环境中部署复合材料时,如何更改或删除?<wsp:PolicyReference ...>
在网上看,我发现了几个覆盖 PolicyReference 的示例,但针对SOA Suite 11g上的“SOAP 绑定”外部引用。我没有找到任何特定于 REST 服务和 12c 的东西。
我试图改编我在网上找到的样本:
** 覆盖“配置计划”中的策略 **
我写了一个专门针对 DEV 环境的配置计划:
<?xml version="1.0" encoding="UTF-8"?>
<SOAConfigPlan xmlns:jca="http://platform.integration.oracle/blocks/adapter/fw/metadata"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
xmlns:edl="http://schemas.oracle.com/events/edl" xmlns="http://schemas.oracle.com/soa/configplan">
<composite name="MyCompositeBAS">
<import>
<searchReplace>
<search/>
<replace/>
</searchReplace>
</import>
<reference name="CMProxyRS">
<binding type="rest">
<attribute name="location">
<replace>http://myDevServer/cmproxy/resources/v2/</replace>
</attribute>
<wsp:PolicyReference URI="oracle/no_authentication_client_policy" orawsp:category="security" orawsp:status="enabled"/>
</binding>
</reference>
</composite>
</SOAConfigPlan>
或者,我还尝试通过将我的配置计划中的最后一个块替换为以下内容来“禁用”(在配置计划中)定义的策略:wsm-assembly.xml
[....]
<reference name="CMProxyRS">
<binding type="rest">
<attribute name="location">
<replace>http://myDevServer/cmproxy/resources/v2/</replace>
</attribute>
<wsp:PolicyReference orawsp:category="security" orawsp:status="disabled" URI="oracle/wss_username_token_client_policy"/>
<!--wsp:PolicyReference URI="oracle/no_authentication_client_policy" orawsp:category="security" orawsp:status="enabled"/ -->
</binding>
</reference>
[....]
但它不起作用。我知道配置计划已应用,因为我可以看到组合尝试访问 REST 服务器myDevServer
,但未删除“原始”策略。这在企业管理器上得到了确认:在CMProxyRS
策略选项卡上,oracle/wss_http_token_client_policy
仍然可见,Effective
并且Enabled
已被选中。
覆盖“composite.xml”中的策略
我还尝试直接在 中重新定义策略,composite.xml
以查看是否可以覆盖文件中定义的wsm-assembly.xml
内容。我尝试了几种方法,不同的是:
复合.xml:
[....]
<binding.rest config="Adapters/CMProxyRS.wadl" location="http://myDevServer/cmproxy/resources/v2/" >
<wsp:PolicyReference URI="oracle/wss_http_token_client_policy" orawsp:category="security" orawsp:status="disabled"/>
</binding.rest>
[....]
11g 和 12c 的区别
我在网上找到的样本是为 11g 设计的,而不是为 12c 设计的。当您通过 jDeveloper GUI 设置策略时,唯一可能不同的行为是:
- 在 12c 中,
<wsp:PolicyReference >
标签被添加到wsm-assembly.xml
文件中,用<sca11:policySet >
;包裹。 - 在11g中,好像
<wsp:PolicyReference >
是直接在composite.xml
文件中添加了标签。(这就是为什么我在之前的测试中尝试直接在复合材料中设置策略......)
所以我也尝试<sca11:policySet >
在我的配置计划中添加,但它失败了......
命名空间的差异
如果你照顾好wsp:
,你会看到:
- 在
wsm-assembly.xml
,它在这里定义:xmlns:wsp="http://www.w3.org/ns/ws-policy"
- 在
composite.xml
和 中configuration plan
,它在这里定义:xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
所以我也尝试http://www.w3.org/ns/ws-policy
在我的配置计划中强制命名空间,但部署失败(即未应用配置计划)。
我不知道我怎么能走得更远……
有人可以分享一个想法吗?是否有人在不同环境中使用不同策略成功查询 REST 服务?
非常感谢。