Я работаю над программным обеспечением Oracle Fusion Middleware 12.1.3.Как переопределить политику OWSM ссылки привязки REST в Soa Suite 12c?
В моем композита, я добавил «Rest Binding» Внешнее задание, для которого я добавил оракула/wss_http_token_client_policy и overrid в КСФ-ключ свойство.
В файлах, это выглядит как:
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 не требуется аутентификация. Как я могу изменить или удалить <wsp:PolicyReference ...>
, когда композит развернут в среде DEV?
Глядя в Интернете, я нашел несколько примеров, чтобы переопределить PolicyReference, но "SOAP Bindings" Внешнее задание на SOA Suite 11g. Я не нашел ничего конкретного ни для служб 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
, но «исходная» политика не удаляется. И это подтверждено на Enterprise Manager: на вкладке «Политики» CMProxyRS
отображается oracle/wss_http_token_client_policy
, отмечены Effective
и Enabled
.
переопределение политики в «composite.xml»
Я также попытался пересмотреть политику непосредственно в composite.xml
, чтобы увидеть, если это возможно, чтобы отменить то, что определено в файле wsm-assembly.xml
.Я попробовал несколько способов, различающихся по:
composite.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 и 12с
Образцы, которые я нашел в Интернете были разработаны для 11g, а не для 12с. Единственное поведение, которое может отличаться при установке политики через JDeveloper GUI, как:
- В 12в, то
<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 с разными политиками в разных средах?
Большое спасибо.
Привет, благодарю вас за ответ. Фактически, я использовал ваше первое решение, но было слишком скучно переопределять вручную политику в консоли при каждом развертывании. Поэтому я написал сценарий WLST для автоматического удаления политики. Но я попробую ваше второе предложение, когда у меня будет время. Спасибо. –