Calling two Business service using split join in osb

Hi,
While trying to call two business service using Split Join in osb i am getting selection failure message in Bpel em console. i am using invoke activity to invoke the BS and assign to assign the input. in the assign i am assigning *$request.payload/input* to input.payload . In the em console i am getting input like this
receiveInput
Jun 19, 2012 5:05:45 PM Received "process" call from partner "bpelprocess1_client"
<payload>
<inputVariable>
<part name="payload">
<client:process>xxxxx</client:process>
</part>
</inputVariable>
Assign (pending)
Jun 19, 2012 5:05:48 PM Error in evaluate <from> expression at line "65". The result is empty for the XPath expression : "/client:process/client:input".
<payload>
<client:process>xxxxxx</client:process>
Jun 19, 2012 5:05:48 PM The following exception occurred while attempting to execute operation copy at line 63
<payload>
<bpelFault>
<faultType>0</faultType>
<selectionFailure/>
</bpelFault>
Jun 19, 2012 5:05:57 PM "BPELFault" has not been caught by a catch block.
Jun 19, 2012 5:06:00 PM The transaction was rolled back. The work performed for bpel instance "650002" was rolled back, but the audit trail has been saved for this instance.If this is a sync request, please resubmit the request from the client. If it is an async request, please recover from the recovery console by resubmitting the invoke message.
Can anyone help on this?
Thanks in Advance...

maybe this one helps a bit, it's the same pattern
http://www.xenta.nl/blog/2011/07/03/oracle-service-bus-implementing-aggregator-pattern-by-use-of-split-join/
if you're using a dynamic split join easiest way is to do something like
assing <yourresponse/> to $response
at this moment your assign an empty placeholder to the response variable
now you go into the for-each looping and for each iteration you need to insert the response of your bpel call in the $response variable
so in the looping as last step you add something like
insert $mybpelresponse/rootelement into $response/yourresponse
with the insert it will insert the reponse 1..x times into the $response variable (so actually aggregating all the responses for you)

Similar Messages

  • OSB example calling multiple business services using a single proxy service???

    Hi,
    I have three business services created using http urls i.e.
    1. LoginBS
    2. GetListBS
    3. LogoutBS
    My requirement is to get a list of names from GetListBS using a single proxy service and to call GetListBS I have to first call LoginBS then GetListBS i.e. after authentication and then finally logout.
    Kindly help with a detailed example for this and I am new to OSB.
    Thanks,
    Vik

    Hi Eric,
    Thanks for the response. We figured that it is possible to call multiple services with Split Join. However, we ran into the issue you described. We had a blocking call and had to wait until each of the services returned a response.
    However, we needed a Async model for our design and felt that this might not be a right fit.
    We are now looking at implementing the publish option with QoS configured as this fits our usecase better. Thanks for the help again.
    Rudraksh

  • Combine output of two business services

    Hi,
    I need a solution for the following problem.
    I have two dataservices(DS1 and DS2) whose return type is C.
    Now I want to combine these data services output at service bus level.
    The return type for final output should also be C, basically a kind of union transformation.
    For dataservice (DS1 and DS2), I have craeted two buisness services (BS1 and BS2)
    I wnat to do the union at proxy service.
    But I donot know how to call two business services at same time and how to combine their output.
    Should I use service callout???
    Please help me, I am pretty new to service bus

    You can use Service callout to invoke DS1 and DS2 and assign the responses to different variables. After the two callouts are made define an xquery transformation that takes these two variables as input and returns desired output. In ALSB pipeline use output of this transformation to replace body.

  • Split joins in OSB

    Hi,
    Actually i do have a requirement where i need to call 2 business services simultaneously(in parallel) in OSB(Like using Flow activity in SOA) using split joins. Is it possible to call 2 business services parallely in OSB?
    Can any one please help me out with any blogs or steps that i can follow to achieve this.
    Your help is appreciated.
    Thanks,
    Naveen

    That is not entirely true. Split Join itself is based on single operation, i.e. the input to split join will be a single message, but within the split join you can invoke multiple services in parallel. You can either dynamically decide the number of parallel flows at runtime (similar to FlowN) or you can have static number of parallel calls (like Flow activity of BPEL) within split join.
    In case you want to call two business services in parallel, create a WSDL(if needed, in most cases you can reuse the WSDL of the Proxy Service itself for SplitJoin as well unless you are doing enrichment within Proxy before calling business services) for split join which has request message which contains data for both business services. Within the split join you can configure calls to both business services in parallel and you can also add transformations for each business services in respective branches.
    You can than aggregate the response from both services if needed and return that as a response of split join.
    Here is an example of Static Split Join:
    http://www.xenta.nl/blog/2011/07/03/oracle-service-bus-implementing-aggregator-pattern-by-use-of-split-join/

  • How to set SOAP Header When Calling Business Service (OSB) Using Split-Join

    Hi,
    We need to call WSDL based webservice which requires heading static content for successful call. As we need to call the same service parallely, hence we want to use Split-Join.
    Looked at couple of forum links, noted that we can't play with headers while working with Split-Join.
    For curiosity, just want to check any option other than using proxy as mediator in setting header information.
    Regards
    Venkata Madhu

    Venkata,
    You still have the option, if you hv n't tried this one.
    To enable this capability, you must declare the header parts along with the body parts in a single request/response message in the Split-Join WSDL and in the WSDL of the proxy or business services invoked by the Split-Join. With the message parts declared in the WSDLs, SOAP header content is available to Split-Joins in the request/response message variables.
    Following is an example of the message and binding definitions in the WSDL.
    Message
    <wsdl:message name="retrieveCustomerOverviewByIdRequestMessage">
    <wsdl:part name="retrieveCustomerOverviewByIdRequest"
    element="co:retrieveCustomerOverviewByIdRequest"/>
    *<wsdl:part name="serviceContext" element="sc:serviceContext"/>*
    </wsdl:message>
    Binding
    <wsdl:input>
    <soap:body use="literal" parts="retrieveCustomerOverviewByIdRequest"/>
    *<soap:header message="tns:retrieveCustomerOverviewByIdRequestMessage"part="serviceContext" use="literal"/>*
    </wsdl:input>
    hope it helps !!
    Regards,
    Abhinav

  • Best practices for Calling Multiple Business Services in OSB

    Hi All,
    I have a requirement where I need to call multiple business services in OSB. We are presently calling them sequentially in a proxy pipeline. I was wondering if we could accomplish the same task in a better way. Each of the business services are mutually exclusive.
    Thanks in Advance,
    Rudraksh

    Hi Eric,
    Thanks for the response. We figured that it is possible to call multiple services with Split Join. However, we ran into the issue you described. We had a blocking call and had to wait until each of the services returned a response.
    However, we needed a Async model for our design and felt that this might not be a right fit.
    We are now looking at implementing the publish option with QoS configured as this fits our usecase better. Thanks for the help again.
    Rudraksh

  • Combine response of two business services in OSB

    Scenario:
    I have a proxy service which ahs two business service call outs depending on the system name passed to it(e.g. 'ABC', 'XYZ')
    1. If the request contains 'SysName' = 'ABC', service related to 'ABC' gets called. The response is generated. (This is working.)
    2. If the request contains 'SysName' = 'XYZ', service related to 'XYZ' gets called. The response is generated. (This is working.)
    3. If the request contains 'SysName' = 'ALL', both the services related to 'ABC' and 'XYZ' systems should get call. The generated reponse should contains response of both the services.
    Please note that, the XSDs for reqeust/response of both 'ABC' and 'XYZ' services are same.
    Could you guide on steps to combine response of two business services?
    Thanks-
    Sachin

    Hi Sachin ,
    Yes u can can combine any number of service responses by using service callouts in separate/indivisual stages as it would be better to debug and trace the message flow.
    U can give explicitly user defined response variable names for the service callouts action and used them in ur pipeline (eg.response pipeline)where ever u want.
    U can create an xml structure like this where u r variables $responsebody_1.responsebody_2 are those which u hv defined while configuring the service callout action against the SOAP Response Body/Response Document Variable what ever u r using for calling BS
    <body>
    <response_1>{$responsebody_1}<response_1>
    <response_2>{$responsebody_2}<response_2>
    </body>
    and in the end use replace actionin the last stage of response pipeline to replace the entire body/node contents with the above mentioned xml structure to combiine both responses from BS
    Regards ,
    Abhinav

  • Calling a business service based on operation-soap action in Proxy service

    Hi,
    I have a requirement in which I have to call a business service based on operation-soap action defined in Proxy service wsdl.
    Like in below mentioned wsdl GetPartCostDelta and GetCurrencyList operations are there.But which ever operation I select,It just goes to one business service.
    Is there any way,I can route to some another business service based on the soap action
    proxy service WSDL
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:ewopcd="urn:com:gm:gpd:schema:ewopartcostdelta" xmlns:gen="urn:com:gm:gpd:schema:genericfault" xmlns:tns="urn:com:gm:gpd:services:ewopartcostdeltaservice" targetNamespace="urn:com:gm:gpd:services:ewopartcostdeltaservice">
         <wsdl:types>
              <xs:schema>
                   <xs:import namespace="urn:com:gm:gpd:schema:ewopartcostdelta" schemaLocation="ewocostdelta.xsd"/>
                   <xs:import namespace="urn:com:gm:gpd:schema:genericfault" schemaLocation="servicefault.xsd"/>
              </xs:schema>
         </wsdl:types>
         <wsdl:message name="EWOCurrencyListRequest">
              <wsdl:part name="CurrencyListRequest" element="ewopcd:EWOCostDeltaInput"/>
         </wsdl:message>     
         <wsdl:message name="EWOCurrencyListResponse">
              <wsdl:part name="CurrencyListResponse" element="ewopcd:EWOCurrencyList"/>
         </wsdl:message>     
         <wsdl:message name="EWOPartCostDeltaRequest">
              <wsdl:part name="PartCostDeltaRequest" element="ewopcd:EWOCostDeltaInput"/>
         </wsdl:message>
         <wsdl:message name="EWOPartCostDeltaResponse">
              <wsdl:part name="PartCostDeltaResponse" element="ewopcd:EWOCostDeltaResult"/>
         </wsdl:message>
         <wsdl:message name="EWOPartCostDeltaServiceFault">
              <wsdl:part name="PartCostDeltaServiceFault" element="gen:ServiceFault"/>
         </wsdl:message>
         <wsdl:portType name="EWOPartCostDeltaPortType">
              <wsdl:operation name="GetCurrencyList">
                   <wsdl:input name="EWOCurrencyListRequest" message="tns:EWOCurrencyListRequest"/>
                   <wsdl:output name="EWOCurrencyListResponse" message="tns:EWOCurrencyListResponse"/>
                   <wsdl:fault name="EWOPartCostDeltaServiceFault" message="tns:EWOPartCostDeltaServiceFault"/>
              </wsdl:operation>
              <wsdl:operation name="GetPartCostDelta">
                   <wsdl:input name="EWOPartCostDeltaRequest" message="tns:EWOPartCostDeltaRequest"/>
                   <wsdl:output name="EWOPartCostDeltaResponse" message="tns:EWOPartCostDeltaResponse"/>
                   <wsdl:fault name="EWOPartCostDeltaServiceFault" message="tns:EWOPartCostDeltaServiceFault"/>
              </wsdl:operation>          
         </wsdl:portType>
         <wsdl:binding name="EWOPartCostDeltaBinding" type="tns:EWOPartCostDeltaPortType">
              <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
              <wsdl:operation name="GetCurrencyList">
                   <soap:operation soapAction="GetCurrencyList" style="document"/>
                   <wsdl:input>
                        <soap:body use="literal"/>
                   </wsdl:input>
                   <wsdl:output>
                        <soap:body use="literal"/>
                   </wsdl:output>
                   <wsdl:fault name="EWOPartCostDeltaServiceFault">
                        <soap:fault name="EWOCostDeltaServiceFault" use="literal"/>
                   </wsdl:fault>
              </wsdl:operation>
                        <wsdl:operation name="GetPartCostDelta">
                   <soap:operation soapAction="GetPartCostDelta" style="document"/>
                   <wsdl:input>
                        <soap:body use="literal"/>
                   </wsdl:input>
                   <wsdl:output>
                        <soap:body use="literal"/>
                   </wsdl:output>
                   <wsdl:fault name="EWOPartCostDeltaServiceFault">
                        <soap:fault name="EWOCostDeltaServiceFault" use="literal"/>
                   </wsdl:fault>
              </wsdl:operation>
         </wsdl:binding>
         <wsdl:service name="EWOPartCostDeltaService">
              <wsdl:port name="EWOPartCostDeltaPort" binding="tns:EWOPartCostDeltaBinding">
                   <soap:address location="https://localhost/EWOPartCostDelta"/>
              </wsdl:port>
         </wsdl:service>
    </wsdl:definitions>

    Did you try using the Operational branching node of OSB?
    You have copy the operation name from the inbound variable and populate the SOAP Header with that value into the SOAPAction tag.I think this will work.
    Thanks,
    Prabu

  • Calling a Business Service from a Web Template File

    I'm attempting to call a Business Service from my .swt
    I've tried everything I can think of and can not get this to work for the life of me.
    I've looked endlessly for information on this topic to no avail.
    the swt call looks something like this:
    <swe:case condition="My Business Service Name, My Business Service Method">
    </swe:case>
    I assume it is something to do with the set-up of my Business Service. Could someone please help me out here or point me to some information on this topic that is actually helpful? (The bookshelf, from what I could find, did not go into setting up the business service for this use at all)

    Hi Diz,
    I tried doing the same thing by following the steps as mentioned by you. Just to re iterate,
    1. Created a DC "Portal Application Standalone" project by the name myservice.
    2. Created a portal service inside myservice by the ame AmitsService.
    3. Exposed IAmitsService.class in the public part.
    4 Build and deployed the DC on server and tested it through an abstract portal component and it worked FINE !!
    Now..
    5. Created anoter DC of type WebDynPro
    6. Added SAP_JTECHS -> epbc.prtapi._api as a "Used DC" with dependency build time and runtime
    7. Specified the sharing reference in the properties as PORTAL:sap.com/myservice
    8. Tried to reference the service using the following code..
    IAmitsService portalservice=(IAmitsService)WDPortalUtils.getServiceReference(IAmitsService.KEY);
    9.Build and deployed the DC.
    10. When I run the application I am getting the following error
    Processing HTTP request to servlet [dispatcher] finished with error.
    The error is: com.sap.engine.frame.core.load.SAPNoClassDefFoundError: com/sapportals/portal/prt/service/IService
    Exception id: [000D6008418B005C0000002C00000D200004163CE6719E1D]
    PLEASE ADVISE

  • How to keep data integrity with the two business service in OSB 10.3.1.0

    How to keep data integrity with the two business service in OSB 10.3.1.0
    In our customer system, customer want to keep data integerity between two businness service. I thinks this is XA transaction issue.
    Basing customer requirment, I created a testcase but I can't keep data integerity, For detail information, please refer the attached docs.

    Can you please explain what you meant my data integrity in your use case?
    Manoj

  • OSB: Calling MTOM business service from non-MTOM proxy

    Hi,
    it is very easy to call non-MTOM business service from MTOM enabled proxy service, but I don't know how to do it in an opposite way. I have web service proxy (http) with binary data in Base64 in a soap body element and I'd like to call a business service (web service over http again) using MTOM format to send binary data in binary format (and not in Base64 as it is in proxy). Is it possible to somehow decode binary data from Base64 in a proxy service and send them from this proxy to a business service using MTOM?

    I understand the flow you propose, but I don't know how to pass decoded data from Java callout back to message flow. As far as I know I can only return primitives, String and XmlObject, because anything else can't be processed in message flow.Yes you are correct.But you can also return DataSource in java callout. Please http://download.oracle.com/docs/cd/E13159_01/osb/docs10gr3/userguide/pojo.html
    Now the working solution/POC --Tested on my local linux box
    package manoj.javacallout.binary;
    import java.io.BufferedReader;
    import java.io.ByteArrayOutputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import javax.activation.DataSource;
    import javax.mail.util.ByteArrayDataSource;
    import com.sun.org.apache.xml.internal.security.utils.Base64;
    * TODO: I have use sun internal API for decoding for simplicity. You should modify this code with any base64 decoding library
    * Ideally should be using using http://commons.apache.org/downloads/download_codec.cgi
    * @author mneelapu
    public class Util {
         public static DataSource decodeBase64(DataSource ds) throws Exception {
         InputStream in=ds.getInputStream();
         BufferedReader bin = new BufferedReader(new InputStreamReader(in));
         byte[] decodedB64=Base64.decode(bin);
         ByteArrayDataSource decodedDS= new ByteArrayDataSource(decodedB64,"binary/octet-stream");
         return(decodedDS);
    Java Callout to decodeBase64
    Parameters
    javax.activation.DataSource=[ $body/* ]
    Result
    javax.activation.DataSource=response
    Now replace the $body with the decoded base64 response from java callout
    Replace [ node contents ] of [  undefined XPath  ]
    in [ body ] with [ $response ]
    Use $BEA_HOME/modules/javax.mail_1.4.jar for compiling.
    Let me know if this solves your problem.
    Thanks
    Manoj
    Edited by: mneelapu on Apr 20, 2009 3:23 PM

  • Setting JMSPriority on call to Business Service on AquaLogic 2.6 ?

    I have a one-way web service receiving requests on the service bus in a Proxy Service as SOAP/HTTP and sending this further on to as Business Service as SOAP/JMS.
    As part of calling the Business Service, how do I set the JMS priority?
    I am using AquaLogic 2.6. Under the common "Transport Headers" it very much appears to me as if the existing and pre-defined "JMSPriority" does not work - trying to use it leads to a runtime error. I found someone else noting this problem too as an older post - JMS priority transport header This post has some kind of solution too but appears to be aimed at the Proxy Service and not the Business Service.
    So far, all my attempts to set the JMSPriority has failed. Information on the subject appears scarce.
    How do I make my Business Service use a specific JMS priority in its SOAP/JMS call to the actual service?

    Yes, I understand you fully - this selecting the "JMSPriority" from the dropdown is what I meant with the existing and pre-defined setting not working.
    In AquaLogic 2.6. this leads to the same as noted by the other fellow in the older post from 2008 (JMS priority transport header it at runtime results in a transport exception like -
    com.bea.wli.sb.transports.TransportException: java.lang.String
    at com.bea.wli.sb.transports.TransportException.newInstance(TransportException.java:146)
    at com.bea.wli.sb.transports.jms.JmsOutboundMessageContext.setRequestMetaData(JmsOutboundMessageContext.java:220)
    at com.bea.wli.sb.transports.jms.JmsOutboundMessageContext.send(JmsOutboundMessageContext.java:456)
    - and this is where the problem begins. I have tried all sorts of things with little result.
    I have done exactly as you describe.
    The value you assign to the expression in your 11g - does this expression happen to be special in any way?

  • How to call business service from xquery transformation in OSB ??

    Hi All,
    How to call business service from xquery transformation in OSB ??
    I need to assign the response variable of Business Service to a target element in XQuery Transformation Mapper file.
    It's urgent.
    Regards,
    Jyoti Nayak

    Transformation is to mapping the source and target of 2 different schemas.
    In your case you should have a XQuery transformation between, your Business Service output schema and the target schema.
    Thanks,
    Vijay

  • [SOLVED] Call an esb service using PL/SQL utl_http

    I would like to call an esb service using the UTL_HTTP package but I'm always getting the following exception: ORA-29266: end-of-body reached.
    My ESB uses an xml document as input-parameter and I'm not defining this in my procedure, how can I use a document-style parameter when calling the webservice.
    Could someboy point me out how to accomplish this functionality?
    If tried the examples about bpel procedures and utl_dbws and these work for bpel processes but not for esb services.

    Hi aprt of my article:
    http://orasoa.blogspot.com/2006/10/calling-bpel-process-from-raw-plsql.html
    Can you call the ESB service with the SOAPUi.org tool? If this works, than you must create the same request from PLSQL.
    Marc

  • Custom hostname verifier not used when business services use a http proxy

    On OSB 10.3, we have a business services with an https end point. To access this end point, the business service used an http proxy.
    The certificate of the business endpoint is a wildcard certificate *.certificate.be . So we have a custom hostname verifier defined in the ssl configuration on the weblogic Server
    As we can see with the verbose mode at the jvm, the custom hostname verifier is not used when we use a http proxy in the business service. Osb use a ALSBHostnameVerifier and this one the defaulthostName
    <Mar 2, 2011 7:31:11 AM CET> <Debug> <AlsbTransports> <BEA-000000> <*** Connecting via proxy *** HTTP @ my.proxy.be/XXX.XXX.XXX.XXX:8080>
    [Loaded com.bea.wli.sb.transports.http.ALSBHostnameVerifier from file:/bea/osb_10.3/lib/sb-transports-main.jar]
    [Loaded weblogic.security.utils.SSLWLSHostnameVerifier$DefaultHostnameVerifier from file:/bea/wlserver_10.3/server/lib/weblogic.jar]
    Is there any way to force business service to used hostname verfifier defined in weblogic ssl server config?
    Thanks

    This is a known issue. Raise a case with support and ask a patch for bug#9182604
    Regards,
    Anuj

Maybe you are looking for