Ich arbeite an der Oracle Fusion Middleware 12.1.3.Wie kann die OWSM-Richtlinie einer REST-Bindungsreferenz in Soa Suite 12c überschrieben werden?
In meinem Composite, fügte ich eine "Rest Binding" Externe Referenz, für die ich ein oracle/wss_http_token_client_policy und overrid die csf-Schlüssel Eigenschaft hinzugefügt.
In den Dateien, es sieht aus wie:
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>
Und das funktioniert gut in meinen UAT und PROD-Umgebungen, wo eine Standard-Authentifizierung eingestellt ist.
Mein Problem für die DEV-Umgebung: Der REST-Dienst benötigt keine Authentifizierung. Wie kann ich die <wsp:PolicyReference ...>
ändern oder entfernen, wenn das Composite in der DEV-Umgebung bereitgestellt wird?
auf dem Netz der Suche, fand ich mehrere Beispiele PolicyReference- außer Kraft zu setzen, aber für „SOAP Bindings“ Externe Referenz auf SOA Suite 11g. Ich habe weder für REST-Dienste noch für 12c etwas Bestimmtes gefunden.
Ich versuchte, die Proben, die ich im Internet gefunden anzupassen:
** Überschreiben Sie die Politik in der „Konfigurationsplan“ **
ich einen Konfigurationsplan schrieb an die DEV-Umgebung gewidmet:
<?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>
Oder habe ich versucht, auch auf "disable" (im Konfigurationsplan) die Richtlinie festgelegt in den wsm-assembly.xml
durch den letzten Block von meinem Config Plan ersetzt durch:
[....]
<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>
[....]
Aber es funktioniert nicht. Ich weiß, dass der Konfigurationsplan angewendet wird, weil ich sehen kann, dass der Verbund versucht, auf den REST-Server unter myDevServer
zuzugreifen, aber die "ursprüngliche" Richtlinie wird nicht entfernt. Und dies bestätigt auf der Enterprise Manager: auf der Registerkarte CMProxyRS
Richtlinien, die oracle/wss_http_token_client_policy
ist immer noch sichtbar, Effective
und Enabled
sind überprüft.
überschreiben Sie die Politik in dem „composite.xml“
Ich habe auch versucht, die Politik direkt im composite.xml
neu zu definieren, um zu sehen, ob es möglich ist, außer Kraft zu setzen, was in der wsm-assembly.xml
Datei definiert ist.Ich habe versucht, mehrere Möglichkeiten, variierend auf:
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>
[....]
Unterschiede zwischen 11g und 12c
Die Proben, die ich im Internet gefunden wurden 11g entworfen, nicht für 12c. Das einzige Verhalten, das abweichen kann, wenn Sie die Politik durch den JDeveloper GUI gesetzt, wie:
- In 12c, der
<wsp:PolicyReference >
-Tag wird in derwsm-assembly.xml
Datei hinzugefügt, umwickelt mit in einem<sca11:policySet >
; - In 11g scheint es, dass das
<wsp:PolicyReference >
Tag direkt in dercomposite.xml
Datei hinzugefügt wird. (Und deshalb habe ich versucht, die Politik direkt in dem Verbund in meinem vorherigen Test zu setzen ...)
So auch ich versucht, die <sca11:policySet >
in meiner Konfiguration Plan hinzuzufügen, aber es funktioniert nicht ...
Unterschiede in den Namespaces
Wenn Sie kümmern sich um die wsp:
nehmen, werden Sie sehen, dass:
- in
wsm-assembly.xml
, es ist definiert sich hier:xmlns:wsp="http://www.w3.org/ns/ws-policy"
- in
composite.xml
und dieconfiguration plan
wird hier definiert:xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
So auch, habe ich versucht, den Namespace an die http://www.w3.org/ns/ws-policy
in meine Config-Plan zu erzwingen, aber die Bereitstellung fehlschlägt (dh die Konfiguration Plan wird nicht angewendet).
Ich weiß nicht, wie ich weiter ...
gehenjemand eine Idee teilen können? Ist es jemandem möglich, REST-Dienste mit unterschiedlichen Richtlinien in verschiedenen Umgebungen abzufragen?
Vielen Dank.
Hallo, danke für die Antwort. Tatsächlich habe ich Ihre erste Lösung verwendet, aber es war zu langweilig, die Richtlinie in der Konsole bei jeder Bereitstellung manuell zu überschreiben. Also schrieb ich ein WLST-Skript, um die Richtlinie automatisch zu entfernen. Aber ich werde deinen zweiten Vorschlag versuchen, wenn ich Zeit habe. Vielen Dank. –