OSB: JMSCorrelationID pattern

Hello,
I am trying to switch from JMSMessageID correlation pattern to JMSCorrelationID pattern and have some questions regarding the latter:
1. For JMSMessageID I have defined one queue per managed server. For the JMSCorrelationID pattern I just define one single queue (reply URL) - how do the managed servers pick their own messages? How is that different from the JMSMessageID pattern where each managed server requires its own queue? Using a message selector does not seem viable as you will need to include the IDs of all the requests for which you are still waiting for responses and they can be pretty much...
2. Can I use the same response queue for multiple business services using the JMSCorrelationID pattern? As I think about it, can I use the same response queue for multiple business services using the JMSMessageID pattern? I have silently assumed that and it would be pretty bad if not...
Thanks in advance
Dimo

Query 1+:
I think OSB takes care of this for different managed servers. Under the hood it would create a MDB with a message selector.
Eg. of ejb-jar for MessageID correlation :_ [ Note no message selectors. MDB receives all messages on the queue ie why you need separate queue per managed server
<jav:ejb-jar xmlns:jav="http://java.sun.com/xml/ns/javaee">
<jav:display-name>BEA ALSB JMS Outbound Sync-Async Endpoint</jav:display-name>
<jav:enterprise-beans>
<jav:message-driven>
<jav:ejb-name>ResponseEJB-4075062717979715508-384e89e5.1288d13ed75.-3633</jav:ejb-name>
<jav:ejb-class>com.bea.wli.sb.transports.jms.JmsAsyncResponseMDB</jav:ejb-class>
<jav:transaction-type>Container</jav:transaction-type>
<jav:message-destination-type>javax.jms.Queue</jav:message-destination-type>
<jav:env-entry>
<jav:env-entry-name>service-ref</jav:env-entry-name>
<jav:env-entry-type>java.lang.String</jav:env-entry-type>
<jav:env-entry-value>BusinessService$Test$RequestQ</jav:env-entry-value>
</jav:env-entry>
<jav:env-entry>
<jav:env-entry-name>XA-supported</jav:env-entry-name>
<jav:env-entry-type>java.lang.Boolean</jav:env-entry-type>
<jav:env-entry-value>true</jav:env-entry-value>
</jav:env-entry>
</jav:message-driven>
</jav:enterprise-beans>
<jav:assembly-descriptor>
<jav:container-transaction>
<jav:method>
<jav:ejb-name>ResponseEJB-4075062717979715508-384e89e5.1288d13ed75.-3633</jav:ejb-name>
<jav:method-name>*</jav:method-name>
</jav:method>
<jav:trans-attribute>Required</jav:trans-attribute>
</jav:container-transaction>
</jav:assembly-descriptor>
</jav:ejb-jar>
Eg. of ejb-jar for CorrelationID correlation :_ Note the wild card message selector marked in bold. The start prefix for the different servers would change i suppose.
<?xml version='1.0' encoding='UTF-8'?>
<jav:ejb-jar xmlns:jav="http://java.sun.com/xml/ns/javaee">
<jav:display-name>BEA ALSB JMS Outbound Sync-Async Endpoint</jav:display-name>
<jav:enterprise-beans>
<jav:message-driven>
<jav:ejb-name>ResponseEJB-6577847719916437493-3893eeb7.1287d30ba4f.-7fe1</jav:ejb-name>
<jav:ejb-class>com.bea.wli.sb.transports.jms.JmsAsyncResponseMDB</jav:ejb-class>
<jav:transaction-type>Container</jav:transaction-type>
<jav:message-destination-type>javax.jms.Queue</jav:message-destination-type>
<jav:activation-config>
<jav:activation-config-property>
<jav:activation-config-property-name>messageSelector</jav:activation-config-property-name>
*<jav:activation-config-property-value>JMSCorrelationID LIKE 'ID:424541534594cf52%'</jav:activation-config-property-value>*
</jav:activation-config-property>
</jav:activation-config>
<jav:env-entry>
<jav:env-entry-name>service-ref</jav:env-entry-name>
<jav:env-entry-type>java.lang.String</jav:env-entry-type>
<jav:env-entry-value>BusinessService$Test$RequestQ</jav:env-entry-value>
</jav:env-entry>
<jav:env-entry>
<jav:env-entry-name>XA-supported</jav:env-entry-name>
<jav:env-entry-type>java.lang.Boolean</jav:env-entry-type>
<jav:env-entry-value>true</jav:env-entry-value>
</jav:env-entry>
</jav:message-driven>
</jav:enterprise-beans>
<jav:assembly-descriptor>
<jav:container-transaction>
<jav:method>
<jav:ejb-name>ResponseEJB-6577847719916437493-3893eeb7.1287d30ba4f.-7fe1</jav:ejb-name>
<jav:method-name>*</jav:method-name>
</jav:method>
<jav:trans-attribute>Required</jav:trans-attribute>
</jav:container-transaction>
</jav:assembly-descriptor>
</jav:ejb-jar>
In case of MessgeID correlation , message with unknown correlation ID is discarded and removed from the response queue. In case of CorrelationID this is not happening. So you may have to setup some redlivery limit to prevent any queue build ups.
Query 2
Have not tested, but think would work for correlationID pattern but not for MessageID pattern!
Regards,
Atheek
Edited by: atheek1 on May 12, 2010 8:54 AM

Similar Messages

  • [OSB]JMS Business Service sending message with a given JMSCorrelationID

    Hi,
    Is it possible to send jms message with a given JMSCorrelationID in OSB? Just like use javax.jms.Message.setJMSCorrelationID() before sending.
    If yes, how to change the payload accordingly?
    Any help? Thanks in advance.

    Try Transport Headers action in request action route node (Add Action >> Communication >> Transport Headers).
    Then click on add headers and in name drop down select the JMSCorrelationID. In set Headers to expression select the value you want to put for JMSCorrelationID.

  • OSB 10.3 JMS queue problem: JMSCorrelationID is null

    Hi everybody,
    I am new to OSB/ALSB, and need some help regarding JMS message handling. I am trying to put some input data into a JMS queue( say, reqQueue) and to get the response from another JMS queue(say resQueue). My architecture is:
    OSB proxy service->OSB business service->JMS queue(reqQueue)->BPEL process(through JMS adapter) ->JMS queue(resQueue)->OSB business service->OSB proxy service.
    I have used JMSCorrelationID for response correlation. but my problem is that when I am trying to test the service from proxy service, I am getting the JMSCorrelationId as null in BPEL process as well as in the weblogic server JMS log, and as I am getting the CorrelationId as null, I am unable to correlate the response, so I am not getting any response.
    This is urgent, please help me as soon as possible as possible.
    Thanks in advance.
    Joy

    Sovled it..
    OSB 10.3 JMS queue problem: JMSCorrelationID is null

  • Wire Tap pattern in OSB

    Wire Tap allows you to route messages to a separate location while they are being forwarded to the ultimate destination. My question is quite straightforward, how can use OSb to implement Wire Tap pattern.
    Thanks
    Edited by: user5108636 on 5/12/2012 11:06

    Wire tap consumes messages off the input channel and publishes the unmodified message to both output channels.
    OSB provides Location Transparency i.e it is a strategy to hide the physical locations of service endpoints from the service clients & provides a layer of abstraction between the service client and the service provider, and improves the operational aspect of adding or removing service providers without impact to the service clients.
    how can use OSb to implement Wire Tap pattern.Yo can make use of Service Callouts [ for Synchronous call], Route Actions or Publish Action [ Asynchronous call ] to pass on the message to target system.
    You can have proxy service receiving you request and in message flow and then use OSB Communication Actions to handle your wire trap pattern.
    http://docs.oracle.com/cd/E21764_01/doc.1111/e15867/proxy_actions.htm#i1315295
    Proxy Service1----------------->Business Service1
    +
    +
    Business Service2
    Hope it helps !!
    Regards,
    Abhinav
    Edited by: Abhinav on Dec 5, 2012 8:38 AM

  • Immediate Response required for Fire-and-forget OSB pattern.

    Hi,
    I have a BPEL process (fire-and-forget pattern) which runs for few minutes, but want to send an immediate response back to the caller. The important condition is to have a Proxy implemented as a WSDL-based service type.
    For this, I am calling BS (of BPEL process) in request pipeline and sending a changed $body in response pipeline; but the OSB response document us null, though in response pipeline, I do see $body getting replaced.
    Any pointers will be really helpful.
    Thnx,
    Nikhil

    like AbhishekJ said
    if you defined your operation in the wsdl for the proxy service oneway and in the testconsole you do see the body is getting replaced after the routing is executed it's mostly like because of the oneway operation on your proxyservice itself, make it synchronous and do a test again?
    or put a replace with some static xml in the response pipeline, remove the route and see if if still returns null
    then you're pretty sure it's the oneway operation in the proxy wsdl itself

  • OSB (ALSB) to implement a Resequencer? (EIP Pattern)

    Hello *,
    has somebody ever tried to implement using OSB (BEA ALSB) the Resequencer EIP Pattern (Hohpe, Woolf)?
    http://www.enterpriseintegrationpatterns.com/Resequencer.html
    Generally I wonder how the OSB product concept maps to the EIP Patterns. Are there some guidelines for scenarios like Splitter/Aggregator , Enricher/Filter, etc.?
    my customer want's to implement at least the Resequence and Splitter. Any tips are very welcome here!!
    grtx,
    \thomas

    Hi Thomas,
    Depending on your exact requirement for your Resequencer you may be able to use the underlying WebLogic JMS Unit of Order to get this. Read more here:
    http://download-llnw.oracle.com/docs/cd/E11035_01/wls100/jms/uoo.html
    With regards the other patterns, OSB supports all the ones you mention:
    Splitter/Aggregator - use the split/join functionality described here:
    http://download.oracle.com/docs/cd/E13159_01/osb/docs10gr3/userguide/splitjoin.html
    Enricher - this can be achieved in a number of ways depending on where you are getting your enrichment data from. Service callouts allow you to invoke a service from within the proxy message flow, Java callouts allows you to implement Java code, and there is an XQuery function to allow you to read content from a database (note in the next release of OSB we will have support for the Oracle database adapter and so will have richer functionality here)
    Filter - again this depends on the exact requirement but there are a number of options here including routing tables, if/then capability, operational branching, etc.
    Hope that is useful.
    Chris

  • How to create fan-out pattern solution in alsb (osb)

    Hello guys,
    I'm trying to create a fan-out pattern solution in ALSB in which I have one proxy service for incoming messages and two outbound business services. All messages are to be forwarded to both business services simultaneous but independent from each other, so whenever business service 1 fails messages are still delivered to business service 2. Like in the following situation:
    messages ---> proxy service ---> routing table:
                                       all messages  ---->  business service 1
                                       all messages  ---->  business service 2However, when I am trying to use the routing table to define the routing, I am not able to route messages to both business services. In the ALSB console I am obliged to define an IF..THEN..ELSE routing rules. IF condition THEN call BS1 ELSE call BS2.
    Can anyone give me a hint how to solve this problem, pls?
    Thanks in advance,
    Harm

    Thanks for the swift reply.
    Can you please elaborate on the expression to use in solution 1? My first solution was similar except I used a routing table without a pipe line instead of a publish table. The cases in the publish table look similar to the cases in a routing table. The difficulty I'm having is that I don't have/want(?) to switch between cases in order to choose the end-point as all end-points must be invoked in each case.
    This is the expression I'm using in the routing/publish table:
    Publish Table ( boolean($body/mynamespace:myrootnode) )
       Case = true()
       Publish to BS1 invoking operation bladibla
       Case = true()
       Publish to BS2 invoking operation tralalaIn words, if the incoming message has a body then route to BS1 and BS2. But this "solution" only invokes BS1, never BS2.
    For the second solution, suppose the first service callout hits an error (time-out, remote server down, network failure, etc), is the second service callout still being invoked succesfully or does the whole pipe line stack fail?
    Thanks in advance.
    Regards,
    Harm

  • Ensuring At Least Once pattern in OSB MQ transport

    I've constructed a flow where proxy service is built in MQ transport and business services is built in MQ/JMS/HTTP transport. I'm routing the message to different Business Service depending on the content of the Request Message. In this scenario how can I ensure At Least Once delivery in OSB.
    Do I need to set any specific properties in Proxy Service Configuration.
    If I set QualityOfService action in message flow will it help me ensure At Least Once delivery. What value should be chosen to ensure this.
    Need expert opinion urgently. Please help.
    Thanks & Regards
    Sagnik Sarkar

    At Least Once QoS is no longer supported. It looks like you need guaranteed delivery. Guaranteed delivery also depends on both inbound and outbound transport protocols and whether they are transactional or not. For supported scenarios guaranteed delivery can be achieved by using QoS=Exactly Once as routing option in your Publish/Route actions.
    In your specific use case inbound transport is MQ which supports transactions as long as you use XA connections.
    You have three outbound transports, MQ, JMS and HTTP. Out of these, MQ and JMS supports transactions as long as you use XA connections.
    HTTP is not a transactional transport so there may be issues but if only guaranteed delivery is concerned, you can easily overcome it by ensuring that if HTTP business service returns an error than you roll back the original inbound MQ transaction so message can be retried from MQ.
    What you can not achieve with HTTP is ensuring a global transaction, i.e. for ex. within the HTTP external service you were writing to a DB, you can not make this DB call a part of OSB original transaction. Similarly, because of the same reason it might happen that the HTTP external service had an error in any logic after the said DB call and the error is returned to OSB. In this case OSB will roll back the original MQ transaction depending on how you have implemented error handling even though the transaction in that external DB will be committed(or not depending on error handling in this target HTTP service)

  • Issue in Synchronous OSB using Jms Queues in OSB11g

    Hi,
    I am working on building a synchronous OSB using the following steps.
    1)     Creating the Synchronous OSB Proxy Service which routes the message to the business service which in turn places a message in the Queue(inqueue) by populating the JMSCorrelationId and waits for the response message to consume from another queue.
    2)     A Composite(SOA) will consume the message from this Queue
    3)     It will do necessary transformation and Places it in another Queue (Say Response Queue).
    4)     OSB Business service waiting in Step 1 will receive the response from this response Queue.
    I used a sample Wsdl which has both request and response message types.
    I observed that the correlation ID is maintained properly from inqueue to response queue. But the message is not getting picked up by OSB from the response Queue
    Twist: It is working absolutely fine in OSB 10g but it is not working in OSB 11g.
    I tried using Messaging service as well as using the sample WSDL i.e keepiing the soap message in the queue. Both the cases are working absolutely fine OSB 10g but not in OSB 11g.
    Can anyone faced a similar issue or any pointers will be great help in this regard.
    Regards,
    Ashok

    To debug this further can you check if the response Q has any active consumers. ? When you use response by correlation ID business service, OSB actually creates MDB's with message selectors under the hood.
    This is a sample of the ejb-jar.xml of the MDB created for a business service with response by Correlation ID pattern.
    <?xml version='1.0' encoding='UTF-8'?>
    <jav:ejb-jar xmlns:jav="http://java.sun.com/xml/ns/javaee">
    <jav:display-name>BEA ALSB JMS Outbound Sync-Async Endpoint</jav:display-name>
    <jav:enterprise-beans>
    <jav:message-driven>
    <jav:ejb-name>ResponseEJB-6577847719916437493-3893eeb7.1287d30ba4f.-7fe1</jav:ejb-name>
    <jav:ejb-class>com.bea.wli.sb.transports.jms.JmsAsyncResponseMDB</jav:ejb-class>
    <jav:transaction-type>Container</jav:transaction-type>
    <jav:message-destination-type>javax.jms.Queue</jav:message-destination-type>
    <jav:activation-config>
    *<jav:activation-config-property>*
    *<jav:activation-config-property-name>messageSelector</jav:activation-config-property-name>*
    *<jav:activation-config-property-value>JMSCorrelationID LIKE 'ID:424541534594cf52%'</jav:activation-config-property-value>*
    *</jav:activation-config-property>*
    </jav:activation-config>
    <jav:env-entry>
    <jav:env-entry-name>service-ref</jav:env-entry-name>
    <jav:env-entry-type>java.lang.String</jav:env-entry-type>
    <jav:env-entry-value>BusinessService$Test$RequestQ</jav:env-entry-value>
    </jav:env-entry>
    As you can see the message selector is based on JMSCorrelationID LIKE 'ID:424541534594cf52%'. This means the business service will pick only those messages which has its correlation ID starting with ID:424541534594cf52.
    You can see the message selector for your MDB from admin console --> deployments.
    Check and confirm if the correlation ID created in the request also starts with this value and the same is send back from the server. Also try deleting and recreating the business service or rename the business service which will create a new MDB under the hood and check the above.

  • OSB JMS Transport configuration

    I have a need to pass a reply-to destination from one external process (the producer) to a second external process (the consumer), with the design supporting flexibility for changing destinations within the OSB pipeline at a future time. To enable this functionality, the following jms transport was designed on the OSB 10gR3:
    external producer--->|---q1--->jmsTransProxy---->q2---|--->external consumer
    The jmsTransProxy is configured with request/response text message types, jms protocol, Get All Headers yes, Is Response Required enabled, and Response Correlation Pattern CorrelationID.
    In the Request pipeline of jmsTransProxy, a single stage is configured to Pass All Headers through Pipeline.
    In the Response pipeline of jmsTransProxy, a single stage is configured to Pass All Headers through Pipeline.
    When the external producer sets the JMSReplyTo header, I expected that this header would be passed from q1 to q2 so that the external consumer would receive it. The message payload is correctly received by the external consumer along with the JMSCorrelationID, but not the JMSReplyTo header information. By examining the logs, I can see the header information is received correctly in the request pipeline, but is not available from q2.
    What is the correct solution to have the JMSReplyTo information pass through to the external consumer?

    Thank-you for your tips.
    I have revised the pipeline as you indicated and more of the headers pass through, but not the JMSReplyTo header. Because the user headers are passed through, I can use get/setObjectProperty on the message to realize the functionality required (though this is a workaround).
    current configuration:
    external producer--->q1--->jmsProxy--->jmsBusiness--->q2---> external consumer
    jmsProxy parameters:
    service type: messaging service
    request message type: text
    response message type: none
    protocol: jms
    endpoint uri: q1
    get all headers: yes
    destination type: queue
    is reposnse required: disabled
    etc.
    jmsProxy request pipeline:
    publish to [ jmsBusiness ]
    request actions: set transport headers for [ outbound request ] (pass all headers)
    jmsBusiness parameters:
    service type: messaging service
    request message type: text
    response message type: none
    protocol: jms
    endpoint uri: q2
    destination type: queue
    is reposnse required: disabled
    etc.

  • Dynamic routing in OSB

    Environment: OSB 10.3.1
    To avoid manual configuring all published services one-by-one (eg. alter logging), I'd like to implement a generic proxy pattern in OSB. Assume that I have business services at /bs1, /bs2, etc, proxy services at /ps1, /ps2, etc.
    What I'd like to achieve is to publish proxy services which routes to the generic proxy first and then reroute to the original proxy service. For this I published eg. /pps1, /pps2, etc all with an Insert action which saves $inbound/ctx:transport/ctx:uri to . in $header and then route to the genericproxy proxy service.
    Generic proxy starts by executing common logic in the pipeline (log, etc), then should fetch the original routing information from the header and use dynamic routing to direct the message to the right proxy service (/ps1, /ps2, etc).
    Now the questions:
    1. is this the right approach to solve the problem of generic configuration of multiple published services in OSB?
    2. appearently the uri itself is not enough for dynamic routing - what else do I need to save from the original message?
    3. can I construct a <ctx:route><ctx:service..><ctx:operation..> construct with only Insert actions? I'd need a concrete example here accomplishing this.
    Thanks.

    Well you have to add Route Node to your proxy pipeline and inside it add a Dynamic Routing action.
    If you select the Dynamic Routing action you'll see in the Properties view something like:
    Service: <Expression>
    Here is where you have to define the <ctx:route> element. You can basically paste the text here.
    You could also create an XQuery transformation (so you can reuse it later) and invoke it here (with the XQuery Resources tab). But if you're not very familiar with XQuery I'd advise to start with the first option just to see it working.
    At first you could also omit the {$proxy} variable and statically specify the service you want to route to. Or you could use an Assign action to define the $proxy (or any name you want to give it) variable. And then once that's working see if you can get the service path from the headers.
    Hope that helps

  • Using Log4j2 in weblogic for logging in OSB

    Hi All,
    I was trying to use log4j2 logging in OSB. I did below mentioned steps:
    Copied external jars "log4j-api-2.0-beta7" and "log4j-core-2.0-beta7" into %Domain_Home%\lib directory.
    Placed wllog4j.jar into same location.
    Created log4j2.xml and placed it into %Domain_Home% directory.
    Modified setDomainEnv.cmd in %Domain_Home%\bin directory to include log4j2.xml location(set LOG4J_CONFIG_FILE=%DOMAIN_HOME%\log4j2.xml) and enable log4j logging by setting java option(-Dwlw.log.Log4jLoggingEnabled=true)
    Content of log4j2.xml looks like this:
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="debug" name="MyApp" packages="">
       <appenders>
          <RollingFile name="RollingFile" fileName="C:/Oracle/MiddlewareNew/user_projects/domains/base_domain/servers/AdminServer/logs/services.log" filePattern="logs/$${date:yyyy-MM}/app-%d{yyyy-MM-dd-HH}-%i.log.gz">
             <PatternLayout>
                <pattern>%d %p %m%n</pattern>
             </PatternLayout>
             <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="10 MB"/>
             </Policies>
             <DefaultRolloverStrategy max="10"/>
          </RollingFile>
          <Async name="Async">
             <appender-ref ref="RollingFile"/>
          </Async>
       </appenders>
       <loggers>
          <root level="debug">
             <appender-ref ref="Async"/>
          </root>
       </loggers>
    </configuration>
    After setting all the above things, when i am starting weblogic server then i am getting parsing exception in console with error like below:
    log4j:ERROR Parsing error on line 3 and column 44
    log4j:ERROR Document root element "configuration", must match DOCTYPE root "null
    log4j:ERROR Parsing error on line 3 and column 44
    log4j:ERROR Document is invalid: no grammar found.
    log4j:WARN The <configuration> element has been deprecated.
    log4j:WARN Use the <log4j:configuration> element instead.
    I am not able to figure out what is going wrong here. In my information log4j2 has done away with namespaces, schema/dtd references and looks like still weblogic is using log4j 1.2 reference. I would really appreciate of one can tell me what is going wrong here.
    There was reference to log4j-1.2.8 in my setDomainEnv.cmd as
    set POST_CLASSPATH=%POST_CLASSPATH%;%ALSB_HOME%\lib\version.jar;%ALSB_HOME%\lib\alsb.jar;%ALSB_HOME%\3rdparty\classes;%ALSB_HOME%\lib\external\log4j_1.2.8.jar;%DOMAIN_HOME%\config\osb
    could this be causing issue? If yes then how can we remove old references of log4j 1.2(if i am removing this entry from here then log4j is giving error for classes not found).
    Any input will be helpful.

    The log4j:ERROR messages are not coming from Log4j 2 and are most likely from Log4j 1.x. Somehow Log4j 1.x must be getting the log4j2 configuration.

  • OSB is staless and how it achieves Asychnorous call back

    Hi All,
    I got to know OSB is statless and BPEL is stateful and hence it supports Asynchronous Call back reliably with Correletaion ID which is also
    supported in Oracle Enterprise Service bus and it is now knows as Mediator in 11g.
    The question I have is
    A) Since OSB is stateless which means we can't implement Asynchronous call back kind of integration pattern.
    B) If my proxy service has to call WebService Asynchronopusly and don't wait for the response continue with the rest of the
    execution once the response get's received from the web service it has to send the details to the source.
    I am indeed aware of one particular indirect approach is this kind of stuffs could be achieved in JMS queues by means of correlation IDs by
    means of using two queues one for request and another for response.
    If anyone had a better suggestion/thoughts please do provide the same at the earliest.
    Many Thanks,
    Dini

    You may also consider the approach discussed here -
    http://blogs.oracle.com/knutvatsendvik/entry/oracle_service_bus_asynchronous_message_processing
    http://biemond.blogspot.in/2011/02/building-asynchronous-web-service-with_27.html
    Regards,
    Anuj
    Edited by: Anuj Dwivedi on Feb 10, 2012 6:01 PM

  • Replacing default namespace in OSB message flow

    I'm in the process of setting up a simple OSB proxy and could use some help figuring out how to change a default namespace in the response from the business service.
    The proxy and business service use different namespaces which we'll call "http://foo.com/namespace/proxy" and "http://foo.com/namespace/business". In my routing request message flow, the contents of $body look like this and I'm able to use a Rename action with XQuery expression "./sof:*" to change "http://foo.com/namespace/proxy" to "http://foo.com/namespace/business":
    <sof:Execute xmlns:sof="http://foo.com/namespace/proxy">
    <sof:adminName>MyAdaptor</sof:adminName>
    <sof:request>
    [escaped payload omitted]
    </sof:request>
    </sof:Execute>
    This works fine, but in the response message flow, I need to revert the namespace and am having difficulty because the response uses a default namespace instead of using a prefix:
    <ExecuteResponse xmlns="http://foo.com/namespace/business">
    <ExecuteResult>
    [escaped payload omitted]
    </ExecuteResult>
    </ExecuteResponse>
    If I define a prefix P2L in the expression editor to correspond to "http://foo.com/namespace/business", I'm able to reference the ExecuteResponse element as "./P2L:ExecuteResponse", but then I get stuck.
    If I try use a Rename action to change the namespace for "./P2L:*", only the ExecuteResponse element is renamed to <sof:ExecutResponse xmlns:sof="http://foo.com/namespace/proxy">. Upstream in the calling application, there's an XML stream reader exception because (I assume) ExecuteResult is not found and parsed.
    I also tried using a Replace action against "./P2L:ExecuteResponse/@xmlns" to replace its contents with "http://foo.com/namespace/proxy". I also tried "./P2L:ExecuteResponse/@P2L:xmlns". Neither worked.
    Can anyone tell me what I'm doing wrong, or suggest a different approach? Assume that changing the calling application or business service is not an option.
    Thanks!

    >
    If I define a prefix P2L in the expression editor to correspond to "http://foo.com/namespace/business", I'm able to reference the ExecuteResponse element as "./P2L:ExecuteResponse", but then I get stuck.
    If I try use a Rename action to change the namespace for "./P2L:*", only the ExecuteResponse element is renamed to <sof:ExecutResponse xmlns:sof="http://foo.com/namespace/proxy">. Upstream in the calling application, there's an XML stream reader exception because (I assume) ExecuteResult is not found and parsed.
    >
    You pattern "./P2L:\*" matches just one element so it's ok that the payload's namespace wasn't touched. If you want to rename namespace for all elements try "//P2L:*". However, I'm not sure whether this is what you want. Try do describe what you do, what you want and what you get instead.
    >
    I also tried using a Replace action against "./P2L:ExecuteResponse/@xmlns" to replace its contents with "http://foo.com/namespace/proxy". I also tried "./P2L:ExecuteResponse/@P2L:xmlns". Neither worked.
    >
    I think it's not a good approach to replace content of xmlns as this attribute is not a common xml attribute.

  • Osb 10.3 sync async bridge

    Hello guys,
    For a client I need to bridge a synchronous client call to a asynchronous business server.
    The OSB manual briefly mentions it is possible in 2 lines:
    "In sync-async bridging, a synchronous client issues a request to an asynchronous provider. For this pattern, Oracle Service Bus provides the capability to publish a message on one JMS queue and configure a second JMS queue for the response, with a timeout value for
    listening for the response. This type of service appears as a synchronous service to the service consumer."
    But I have no clue how to do it. And I dont find any additional information.
    I hope someone can set me on the right path.
    Regards,
    Alex

    hi,
    [Re: BPM SA bridge timeout;
    might be some help.
    Siddhesh

Maybe you are looking for