Proxy/Business Service SOAPFault Handling

When a SOAP Fault is thrown from a service endpoint, the OSB appears to swallow that SOAP Fault and send the client invoking the service through the OSB an OSB specific SOAP Fault instead of the one from the service endpoint.
Is it pretty much standard practice to have to create a Pipeline and Error Handler where you always have to do an If/Else to test the business service response to determine if a SOAP Fault exists and if so then to reply with an error.
Is this true?
Is there a better Error Handler location for passing the original Fault to the service client?
Thanks,
Jay

The control will enter into route error handler if the business service is returning a fault. Note, if the business serivce is not returning a fault, instead returning the error as a message payload ( in this case http response code will be 200 , in case of fault it will be 500) then the flow will enter into the response actions part of the route node and not the error handler.
So if the flow is entering into route error handler, you can safely assume that either the service has returned a fault or there was a transport exception in which osb was not able to communicate to the remote service due to some fault. Depening upon your case it may not be desired to separate these , so the best thing you can do is put a reply with action in the route error handler.

Similar Messages

  • Need some clarification in WSDL based Proxy & Business Services

    Hi,
    Whenever we configure a Proxy service or Business service based on a WSDL, we use to select Port option instead of Binding when selecting our WSDL for the proxy/business service. Now my ques is why we go for a port instead of binding? what is the difference between them?
    My ques may seem very basic but i have this doubt for long time so i am postin this.
    Thanks,
    Arun

    Hi Arun,
    In my opinion that is not such a big deal, and in most of the cases you can choose any of the options...
    I usually prefer port because it keeps the service name... If you are proxying someone else's service it is better to keep it in a way that the service consumer doesn't notice the difference...
    I'm guessing there are cases out there where the service consumer client requires that the binding operations be unchanged... But I've never came across with one of them...
    Hope that clarifies...
    Cheers,
    Vlad

  • Proxy business services in osb

    In osb if i want to get data from a client then what is the procedure
    I am using a business service whose endpointuri is a proxy service (protocol http)
    And this business service is inturn called by my local proxy service
    Is this procedure correct ?
    if not then what is the correct procedure how many proxy and business services do i need to get data from my client
    Thanks,
    Rahul

    How many Proxy Services and Business Services to use depends on the use case.
    For example, if your client will initiate a transaction when it has some data to send to another system then you will have to configure following flow:
    First system (wants to send some data)--> Proxy Service(to receive data from Client) --> Business Service (to call the second system) --> second system web service API
    Another scenario in which you need to get some data from the second system when requested by the first system (query scenario) the above flow would still remain the same.
    Addition of another Proxy service depends on specific use case and scope of re-usability etc. For example if you want to fetch data from a system and that query can be reused in various processes or can also be called from various client applications then you can create a wrapper Proxy above the Business service and call this Proxy Service instead of calling the business service from your Proxy.
    Domain structure also is a deciding factor, for example if you want to call a Proxy in one domain from another domain you can use a Business Service in the requesting domain.

  • Proxy & business Services creation using XML

    Hi,
    can we create a proxy service & business service in OSB using an xml? usually we use to create using a WSDL defined by a webservice. can we create it using XML ? If so can anyone provide the doc or link for that.
    thanks

    You may create XSD from XML and then create WSDL from XSD using JDev. Using that WSDL you may create proxy or business service in OSB.
    Regards,
    Anuj

  • Proxy Business service http request to webapp

    I have a webapp deployed to my appserver and have coupled that up to a Business service in my OSB
    In the Business service Test panel I can verify that my http request to my webapp operates correctly
    I need to configure several Proxy services which will translate into HTTP requests being issued by my Business service
    Can someone point me to an example of how this might be setup
    Thanks

    Hi
    No matter what I try I can't seem to get my outbound variable modified so that the right info is sent to my busiiness service
    my Proxy service is an inbound HTTP request, so I read/process the
    $inbound/ctx:transport/ctx:request/http:query-string
    to suit my business service
    my Business service is another HTTP interface
    I can't seem to modify the $outbound variable so that it includes a ctx:transport/ctx:request/http:query-string
    any help greatly appreciated

  • In OSB, Single business service to handle multiple Stored procedures

    Hi,
    In OSB we have a package and within that there are 8 overloaded stored procedures. DO we have to create 8 business services or is it possible to create single business service and pass differrent messages to it.
    Thanks,
    Vinoth

    Hi Vinoth,
    You have to create 8 dbadapters and hence 8 business services. Better you create one stored procedure which internally calls these 8 stored procedures on the basis of conditions you have and create only one DB adapter and hence one business service to invoke this sinlge stored procedure.
    Regards,
    Anuj

  • Version Control for OSB Proxy/Business Services ?

    Dear all
    I've used the browser-based osb console to expose a legacy web-service as follows :
    1. Create a Session
    2. Create a BusinessService based on the legacy web-service WSDL
    3. Create a ProxyService based on the BusinessService WSDL
    4. Activate the Session
    I now have two further questions :
    1. How do we version control the OSB "code" ? (we use Subversion for other code)
    2. How do we implement it in other environments (TEST, PROD, etc.)
    Thanks,
    Peter.

    >
    Are there other reasons why you say it's not the most ideal way of development ?
    >
    Versioning binary files is always a pain. You can't compare them, you can't merge them ... Another point, if you put your jar archive with OSB artifacts under version control, you will most probably face issue related to end of line styles (mac, unix, windows).
    However, the most important point is usability. I want to version .proxy and .biz services to see right in IDE that I changed something and I should check that in for the others. I don't want to risk that I forget something. And I also want to see what other users committed, what sources they work on ... You loose all of that by versioning jar file. I would never go this way.

  • Correlation Exception - BPEL - Proxy Service and Business Service

    Hi All ,
    Correlation exception
    Flow - BPEL - Proxy - Business service
    We are invoking a proxy service from a bpel process with a correlation set(property set as Yes)) and it works absolutely fine when the service is available But the problem occurs when the service is down or a remote fault occurs.
    In the fault policy we had an action saying that retry three times but when it retries three times with the same correlation set
    <Action id="ora-retry">
    <retry>
    <retryCount>3</retryCount>
    <retryInterval>2</retryInterval>
    <exponentialBackoff/>
    <retryFailureAction ref="ora-human-intervention"/>
    <retrySuccessAction ref="ora-terminate"/>
    </retry>
    </Action>
    It was throwing an correleation exception.
    since it was hitting the service wth same correletion set it was throwing an error. Is there any way i can retry for the same service with out exception
    Thanks,
    Raja
    Edited by: user12893766 on Oct 1, 2010 3:30 AM

    1. No it can be any kind of request: binary, text, xml...
    2. ALSB support a lot of different transport/protocols:
    EMAIL, FTP, FILE, HTTP, JMS, EJB, TUXEDO. In ALSB 3.0 we will add support for ERPs: SAP, SIEBL ..., MQ native and SFTP
    3. It depends on the transport. For example for file, the client drops a file in the file system, for http it opens a http connection to the URL http://host:port/address etc...
    4. TCP/Socket transport is provided as a sample transport in ALSB 2.5 and 2.6. You can look in the weblogic92/samples/servicebus folder. You can also write your own transport if you like. There is a public SDK.

  • Features to isolate OSB services from just one slow business service.

    Hi,
    Here is a OSB question around a quick business service that suddenly turn to be a slow one and the impact on the overall OSB performance.
    Suppose you have a critical OSB cluster in production with many proxy and business services.
    Because of requirements, you have a specific sync http business service (web service) that has an acceptable response time around 1 secs. But suddenly the response time goes to 30 secs or even more due to some problem, generating a great impact on thread and resource consumption on OSB side.
    Suppose a http time out configuration of 2 secs on the business service is just not enough. OSB continues to crash.
    You can use OSB throttling feature but doing that you have to fix a maximum concurrency.
    If the service implementation is down, OSB can handle that using "Offline Endpoint URIs" in the operational settings of sbconsole. But in this situation the service is online accepting requests. It's just slow to respond.
    This is a hypothetical situation just to stress the problem.
    Besides business service time-out configuration and throttling and dispatch-policies on proxy/business services are there any other features that can be used ?

    Wesley,
    Ok, once the business service request is sent, the thread is freed. When the response comes, a new thread is picked up to handle the business service response. So in the mean time there's no blocking thread. Yes. It is correct.
    Just to make sure, what about the waiting synchronous http client calling the proxy service ?
    I mean, this fire-and-forget feature works only on the business service side or entirely for the proxy/business service (That separation would not make sense I suppose) ? The same case with http proxy. The request thread will be used till the BS is invoked in the route node or end-of the request pipeline. After this thread is released. Once the response comes from the http bs on a different thread, that thread will be used till the end of the responsepipeline
    eg
    Client---->Http Proxy---->Thread1{Request Pipeline--->Routenode---->End of Request actions in the Routenode--->Call BS Request} ----->Thread2{BS gets response--->Response Pipeline --->send response back to the client}
    For example, a http client is waiting for the proxy service response, but while the business service does not respond, there is no blocking thread at all in the proxy service side too ?Yes. That is true
    So, there could be many waiting http clients calling this proxy service, all http business service requests sent, and no blocking threads ?Yes.
    What would be the drawbacks of this feature ?Nothing I can think off. Therotically we will be forced to do extra over head when BS latencies are low which might of little practical impact. In that case you can change QOS=Exactly once. BS request and response will be on the same thread , but proxy response thread will be always different from that of proxy request thread no matter what the QOS is set
    Cheers
    Manoj

  • Caching in OSB with Business Service

    Hi All,
    I am done with business service development, but I need to configure caching to fetch the data from cache if TTL (Time to Live) <24 if is more then my request to interact with the database can please help how I can I do it, as I am new to caching concept.
    Thank You,
    Vinay Kumar

    Hi Vinay, Select the Business Service - Message Handling Configuration - in Advanced Settings section, you can configure caching for the business service; select Result caching as Supported, and specify cache token (unique key) and expiration time (TTL). Note- once the TTL exceeds for a particular data, the business service will fetch the result from the target system/database and cache it, and the cycle repeats (no specific configuration to be done for this).  Also, before configuring the above, first enable the caching globally in OSB; go to Operations - Global settings - select Enable Result caching, and activate the changes.

  • Editing proxy and business service security with WLST

    My customer wants to manage the OSB with WLST as much as possible. I'm wondering if it is possible to handle the security and policies on proxy and business service with WLST.
    Any ideas or links to documenation are welcome.
    Thanks!

    I think you can do this. Please refer - http://docs.oracle.com/cd/E14571_01/core.1111/e10043/wlstcmds.htm#CHDGHDFJ
    But not sure of how much flexibility you will get with WLST. I will recommend using OWSM that is specifically used for similar activities for the soa suite.
    Please refer - http://docs.oracle.com/cd/E21764_01/web.1111/e13713/owsm_appendix.htm & http://docs.oracle.com/cd/E21764_01/doc.1111/e15866/owsm.htm for more details.
    Thanks,
    Patrick

  • Mapping error code from Business service to Proxy

    I am trying to get hands on with 11g and following the book Getting started with Oralce 11G soa suite. The example I have described is based on chapter 11 and chapter 14. I have a proxy service and business service. The business service calls a "ValidateCC" composite which validates the credit card information passed and is proxied by the proxy service. The validation of CC is done by a stored procedure, which returns an error ora-20001 if the credit card info is not found in the database.
    Testing PROXY service from OSB console:
    Here is the REQUEST message sent to proxy service:
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    </soap:Header>
    <soapenv:Body>
    <cca:creditcardStatusRequest xmlns:cca="http://www.globalcompany.com/ns/CCAuthorizationService">
    <cca:CCNumber>2234-1234-1234-1234</cca:CCNumber>
    </cca:creditcardStatusRequest>
    </soapenv:Body>
    </soapenv:Envelope>
    Here is the response message received:
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
    <soapenv:Fault>
    <faultcode>soapenv:Server</faultcode>
    <faultstring>BEA-380001: Internal Server Error</faultstring>
    <detail>
    <con:fault xmlns:con="http://www.bea.com/wli/sb/context">
    <con:errorCode>BEA-380001</con:errorCode>
    <con:reason>Internal Server Error</con:reason>
    <con:location>
    <con:node>RouteTo_validationForCC</con:node>
    <con:path>response-pipeline</con:path>
    </con:location>
    </con:fault>
    </detail>
    </soapenv:Fault>
    </soapenv:Body>
    </soapenv:Envelope>
    Testing Business service from OSB console
    Response received for the same message:
    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Header/>
    <env:Body>
    <env:Fault>
    <faultcode>env:Server</faultcode>
    <faultstring>
    Exception occured when binding was invoked.
    Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'validateCC' failed due to: Stored procedure invocation error.
    Error while trying to prepare and execute the VALIDATECC API.
    An error occurred while preparing and executing the VALIDATECC API. Cause: java.sql.SQLException: ORA-20001: UNKNOWN CREDIT CARD
    ORA-06512: at "SOADEMO.VALIDATECC", line 12
    ORA-06512: at line 1
    The invoked JCA adapter raised a resource exception.
    Please examine the above error message carefully to determine a resolution.
    </faultstring>
    <faultactor/>
    <detail>
    <exception>
    ORA-20001: UNKNOWN CREDIT CARD
    ORA-06512: at "SOADEMO.VALIDATECC", line 12
    ORA-06512: at line 1
    </exception>
    </detail>
    </env:Fault>
    </env:Body>
    </env:Envelope>
    What i need:
    I would like to have the exception 20001 populated in faultcode of the response from proxy message. A down stream BPEL process checks the faultcode and processes the message as needed.
    My OSB message flow contains :
    ValidateCredit +> envelope
    PipelinePairNode1
    Request Pipeline
    Report and Validate
    Response Pipeline
    RouteTo_validationForCC
    Service Error Handler
    stage1 with Alert action.
    My question is how to map the actual error occured in the cally be business service handler to the Service error handler in stead of throwing a generic BEA error. Please let me know

    Thank You Swgt for your reply.
    This is what I did:
    When I'm in Edit mode, in the OSB Web Console, I go to my proxy service, click on the Edit Message Flow icon, in the Map of Message Flow window I left-click on my Route icon (which as you already mentioned routes to my Business Service), select Add Route Error Handler (this option only appears if you're in Edit Mode already), click on the Error Handler icon, Add Stage, click on the Stage icon, Edit Stage, click on Add an Action, Flow Control -> Reply. Here I select the Radio Button "With Failure" and then Save All and Activate the change for the session.
    Is this correct?
    I tried this. I no longer get the BEA-380001 error code. However, the fault returned is not a bindingFault as I would have expected, but rather a remoteFault. hence my fault policy never detects it, doesn't rethrow it, and my BPEL error handling never kicks in.
    Is there a way to change this to work more or less in the sense of the tutorial?
    Does using OSB to connect to the service automatically make it a remote fault, instead of a bindingFault?
    Here's the SOAP message handled by my BPEL Component.
    <messages>
    <input>
    <invokeCCStatusService_execute_InputVariable>
    <part name="part1">
    <creditcardStatusRequest>
    <CCNumber>2234-1234-1234-1234</CCNumber>
    </creditcardStatusRequest>
    </part>
    </invokeCCStatusService_execute_InputVariable>
    </input>
    <fault>
    <bpelFault>
    <faultType>0</faultType>
    <remoteFault>
    <part name="summary">
    <summary>Beim Aufrufen des Bindings ist eine Exception aufgetreten.
    Beim Aufrufen des JCA-Bindings ist eine Exception
    aufgetreten: "JCA Binding execute of Reference operation
    'validateCC' failed due to: Fehler beim Aufrufen von
    gespeicherter Prozedur. Beim Versuch, die VALIDATECC-API
    vorzubereiten und auszuführen, ist ein Fehler aufgetreten.
    Beim Vorbereiten und Ausführen der VALIDATECC-API ist ein
    Fehler aufgetreten. Ursache: java.sql.SQLException:
    ORA-20001: UNKNOWN CREDIT CARD ORA-06512: in
    "SOADEMO.VALIDATECC", Zeile 12 ORA-06512: in Zeile 1 Prüfen
    Sie, ob die API in der Datenbank definiert ist und die
    Parameter der API-Signatur entsprechen. Diese Exception wird
    als nicht wiederholbar betrachtet. Sie ist wahrscheinlich auf
    einen Modellierungsfehler zurückzuführen. Um den Fehler
    stattdessen als wiederholbar zu klassifizieren, fügen Sie die
    Eigenschaft nonRetriableErrorCodes mit dem Wert "-20001" zum
    Deployment-Deskriptor hinzu (d.h. weblogic-ra.xml). Um einen
    wiederholbaren Fault automatisch zu wiederholen, legen Sie
    folgende Eigenschaften von composite.xml für diesen Aufruf
    fest: jca.retry.interval, jca.retry.count und
    jca.retry.backoff. Alle Eigenschaften sind Ganzzahlen. ". Der
    aufgerufene JCA-Adapter hat eine Ressourcen-Exception
    ausgelöst. Prüfen Sie die obige Fehlermeldung sorgfältig, um
    eine Lösung zu finden.</summary>
    </part>
    <part name="detail">
    <detail>
    <exception>ORA-20001: UNKNOWN CREDIT CARD ORA-06512: in
    "SOADEMO.VALIDATECC", Zeile 12 ORA-06512: in Zeile 1</exception>
    </detail>
    </part>
    <part name="code">
    <code>{http://schemas.xmlsoap.org/soap/envelope/}Server</code>
    </part>
    </remoteFault>
    </bpelFault>
    </fault>
    <faultType>
    <message>0</message>
    </faultType>
    </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

  • Regarding JMS-Queue/Topic in Proxy and Business service in OSB

    Hi
    I have one query regarding to the JMS-Queue/Topic.
    I am published the message to the JMS-Queue/Topic.
    ----My Business-service configuration is---
    General----Any xml
    Tranport--jms://localhost:7001/MyConnectionFactory/RequestQueue
    Response--None
    I call this Business-service in proxy-service of Routing message was published successfully to thee Queue.
    I try to dequeue the message from that queue for this
    --- I take another proxy with---
    General----Any xml
    Tranport--jms://localhost:7001/MyConnectionFactory/RequestQueue
    In meassage flow
    Routing--second busines-service)
    --- Second business-service configuration is---
    General----Any xml
    Tranport-File (C://temp)
    Issue is when I publish the message to Queue,the message is also found in the file  i.e C:temp. I don't now why  this come to the file.*
    Any suggestions
    Thanks
    Mani

    Either I did not get an idea, but in your JMS proxy you are routing to File :)
    If you don't want file, why route to 2nd BS ?

  • Can OSB proxy and business service act as a stub ?

    Hi all,
    would like to enquire whether I can achieve the following. I have a web service consumer. Can the consumer call a OSB proxy service and within the proxy service, I use XQuery and extract the body and perform some transformation. And the proxy service return variables to the consumer? Without calling any business proxy in the process
    Can the proxy service act as a stub? Would I need a dummy business service for it?
    Or my objective cannot be achieved in OSB?
    Appreciate any thoughts.

    Hi,
    Assuming the incoming body contains "name: Peter, age: 13". Can the return information contain "name:Peter, age:13, Status: N"Yes, it's possible too, in your Response XQuery Transformation u can add n number of additional fields, and send back to requester.
    You can do both Translations and Transformations.
    Can I also configure the proxy service not to call any business service?Have you made/generated your proxy service from existing Business Service?
    If yes,: then your message flow would have only Route Node ( routing to Business Service).
    1. To do transformations on request add a Pipeline Pair in message flow and inside it add stage for doing XQuery transformations.
    2. Use Reply Action in stage as last Actions and do reply with Success.( The message flow won't go to Route actions after this ).
    IF No : Then either remove the OSB Action which is being used to call Business Service.
    It is considered good etiquette to reward answerers with points (as "helpful" - 5 pts - or "correct" - 10pts).
    Regards,
    Abhinav Gupta
    Edited by: Abhinav on Mar 8, 2013 3:27 PM

Maybe you are looking for