Retry mechanism for HTTP Transport in OSB

Hi
I am using OSB 11gR1. I have a business service which is HTTP protocol based.
The BS is configured with the RetryCount as 0 and Retry Application Errors is enabled.
I have to store the message in a persistent store or some store in case the endpoint URI is temporarily unreachable.
Once the URI is reachable, the service should pick the data from the data store and send it across to the HTTP URI.
Has anyone implemented this or knows how this can be configured?
Please suggest and help.
Regards
Kshama

Business Service by default does not have any persistence available(well apart from persistence used for throttling which is not useful for this use case).
You will need to add an explicit persistence layer between the Proxy Service which receives the message from Client and the HTTP Business Service which calls the back end service provider.
You will need a JMS queue and additional JMS Business Service and a JMS Proxy Service in the flow.
The flow should now look like following:
Client-->HTTP PS-->JMS BS-->JMS Queue-->JMS PS-->HTTP BS-->service provider
You can set retry conditions on the XA enabled JMS queue so that it will keep retrying the messages which failed because destination was unreachable until they are delivered. You will be able to set a retry delay and maximum number of retries etc. Keep in mind that this would be an asynchronous flow.

Similar Messages

  • Custom Authentication Tokens for HTTP transport in OSB

    Hi,
    I have a http type proxy service.
    I want to secure the proxy service with an Username and Password that will be passed as HTTP user defined headers and I dont want to use "HTTP Basic Authentication".
    Can you guide me how this can be done.
    Thanks.

    Getting it to the front ...

  • Retry Mechanism for BPM in PI 7.1

    Hi Experts,
    Is it possible to have a retry mechanism in implementing BPM on a solution? Here's my scenario:
    With BPM initial scenario:
    Sending system sends a message to PI and will be routed to another system (let's say a Master Data System) via BPM to get a specific data that will be included on the initial data that was sent to from a sending system. The BPM then handles the mapping of that specific data and then sent to a Receiving System.
    Additional Scenario (if it is possible):
    What if the Master Data System is down?!
    - an additional BPM will be added to the initial BPM and the purpose is solely for retry mechanism. The BPM will then be in retry mechanism mode let say 5 attempts or 5 hours..and if it successful then the initial scenario will push..but if the system is still down, and retry mechanism reached its limit then it will send will throw an error or an alert.
    If this is possible, how can this be handled?
    Appreciate your response with this. Thanks!
    Cheers,
    R-jay

    The BPM will then be in retry mechanism mode let say 5 attempts or 5 hours
    Your scenario is: SYS1 > BPM <> SYS2 ....and rest of processing
    Your question is if BPM <--> SYS2 communication fails in first attempt
    So the above step will be SYNC.....include a BLOCK with an Exception Branch in your BPM....if the SYNC steps fails then the Exception Branch will be triggered....now in the exception branch include a WAIT step (set the time accordingly...avoid setting it for a big time interval),
    After the WAIT step include a SYNC-Send step which will again send the same message (BPM <--> SYS2) .....check if you get the response or still in error....if in error then implement a proper error handling.
    Just ensure that the wait step does not make the BPM wait for too long
    Regards,
    Abhishek.

  • Retry on certain HTTP error code ( OSB 10g)

    Hi All,
    I want to retry on service call out when i get Http error code 401 for OSB 10g. But don't want to retry on other type of application error or soap fault.  What is the best way to implement this?  Is there any out of box option to set?
    Regards

    This is not supported as a out of box option but you can easily set this up in OSB. This is what I did in a similar situation.
    PS1( with service callout, in the service callout check for the custom response which is received from PS2, if the custom response has an error code , it means you received an error from service provider else success )----> BS1(intermediate Business service with retry settings )----> PS2(Proxy service which checks the error code from BS2 in the error handler, if the error is 401 then do a raise error or reply with error else do a reply with success. When we do a reply with error in case of 401 error code the BS1 will retry this operation. In case of reply with success send the error code wrapped in a custom response back to PS1 else send back the response from BS2 ,This PS1 cannot be a local proxy service. )----> BS2--> call the service provider.

  • Retry mechanism in Fault handling framework SOA 11g

    hi
    i have used Fault management framework in my project. I have added fault-policies and fault-bindings file. in fault-policies file i am using retry mechanism for any remote or binding fault. but i am not able to see the retry working in flow trace. however human intervention and terminate actions are working fine.
    can any one assist me why retry mechanism is not working.
    thanks in advance.

    hi
    thanks for the response. i added that property in my bpel tag but unfortunately it didn't work. plus the instance remains in running state. plz help me out with this.
    this is my fault-policies.xml and fault-binding.xml
    fault-policies.xml*
    <?xml version="1.0"?>
    <faultPolicies xmlns="http://xmlns.oracle.com/CreateTaskPOC_jws/Project9/BPELProcess1">
    <faultPolicy version="2.0.1" id="MyCompositeFaultPolicy">
    <Conditions>
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    name="bpelx:bindingFault">
    <condition>
    <action ref="ora-retry"/>
    </condition>
    </faultName><faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    name="bpelx:remoteFault">
    <condition>
    <action ref="ora-retry"/>
    </condition>
    </faultName>
    </Conditions>
    <Actions>
    <Action id="ora-rethrow-fault"><rethrowFault/></Action>
    <Action id="ora-retry">
    <Retry>
    <retryCount>3</retryCount>
    <retryInterval>2</retryInterval>
    <retryFailureAction ref="ora-rethrow-fault"/>
    </Retry>
    </Action>
    </Actions>
    </faultPolicy>
    </faultPolicies>
    fault-bindings.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <faultPolicyBindings version="2.0.1" xmlns="http://xmlns.oracle.com/CreateTaskPOC_jws/Project9/BPELProcess1">
    <composite faultPolicy="MyCompositeFaultPolicy"/>
    <component faultPolicy="MyCompositeFaultPolicy">
    <name>BPELProcess1</name>
    </component>
    <reference faultPolicy="MyCompositeFaultPolicy">
    <name>InsertEmp_BPELProcess</name>
    </reference>
    </faultPolicyBindings>

  • Best way for HTTP load balancing in OSB

    Hi everybody,
    We have setup an OSB cluster and we need to load balance HTTP requests across managed servers. Looking for info about load balancing in OSB I found that there are mainly two options: using a hardware load balancer or a software solution like Weblogic HttpClusterServlet. At the moment we have no hardware balancer available so we will have to take the software option. I found some articles about configuring HttpClusterServlet like http://redstack.wordpress.com/2010/12/20/using-weblogic-as-a-load-balancer.
    But I have a question about this configuration. If we use a managed server as an HTTP proxy that balances requests between OSB managed servers, what would happen if this server goes down? I think one of the main goals of a clustered deployment is avoiding a single point of failure but with that setup all requests would depend on the availability of the proxy managed server.
    Could you recommend us a setup for implementing load balancing in OSB?
    Thank you in advance,
    Daniel.

    Load balancing in a cluster for http requests can be achieved using atleast 4 different ways:
    (1)- use a hardware load balancer like F5 BigIP LTM
    (2)- use a web server with weblogic plugin to frontend the cluster
    (3)- use weblogic with HTTPClusterServlet
    (4)- use DNS round robin - this works if you have managed servers running on 2 machines (say mach1, mach2) but on the same port. HTTP clients use hostname 'mach' to access the URL's and the dns does a round robin name resolution of mach to mach 1 and mach2 IP addresses..
    All the options except (1) achieve only load balancing and not auto failover on all instances.. Hardware load balancers has the extra feature of probing [ sending periodic pings to the targets] , by which it can detect whether the target resource is alive and if not send the traffic to other nodes which are alive.. this is why hardware load balancers are worth their investment..
    other options may work if client is coded to do retrying on failure.. so on 2nd or subsequent attempt, the routing is done to the machine which is alive..
    For options (1),(2) and (3), you also need some redundancy of load balancing device ( web server, weblogic or hardware load balancer) to prevent single point of failure.. Hardware load balancers are usually deployed in redundant pairs to achieve this..
    Edited by: atheek1 on 22/11/2011 15:31

  • OSB proxy for HTTP GET servlet

    Hello,
    I need to create a proxy in OSB that will accept HTTP/GET requests (with ?param1=value1&param2=value2.... parameters).
    My goal is simply to forward this request to another servlet in J2EE instance that will actually serve the request and send back to OSB the text/xml response.
    Can you please point me to the correct proxy and business service configuration for this?
    Our SOA version is 10.3.6 and we have OSB and J2EE servers in our domain.
    Thanks
    Edited by: 995036 on May 31, 2013 4:19 AM
    Edited by: 995036 on May 31, 2013 4:20 AM

    Hello again,
    I found the solution so I will share it with you in case someones needs it the future.
    I created a business service with Service Type "Messaging service", request message type "none", response message type "text" and Http transport "GET".
    I created a proxy service with Service Type "Messaging service", request message type "text", response message type "text". I created a routing node my flow directed to the business service mentioned above. In the routing pipeline request i put the following actions:
    1) Assign:
    Expression $inbound/ctx:transport/ctx:request/http:query-string/text()
    variable queryString
    to assign the inbound query string in a variable
    2)Insert
    expr: fn-bea:inlinedXML('<http:query-string xmlns:http="http://www.bea.com/wli/sb/transports/http"></http:query-string>')
    location: as first child
    Xpath: ./ctx:transport/ctx:request
    in variable: outbound
    3)insert
    expr: $queryString (created in step 1)
    location: as first child
    Xpath: ./ctx:transport/ctx:request/http:query-string
    in variable: outbound
    Now the query string should be redirected properly to your business service/ GET servlet.
    George

  • Do transport acknowledgement work for HTTP ?

    hi all,
    I'm posting an HTTP in a BPM scenario.I've put mode as transport in send step.
    However in SXMB_moni its showing,ack not possible.
    I've searched and it seems ack is possible for HTTP.
    can anyone tell why i am getting the error?

    When you say you use the Transport ACK functionality of the BPM-Send step what you do is you ask for a ack status from the adapter Engine....but according to the functionality both IDOC and HTTP adapter do not use AE....so when you demand for an ACK for your HTTP send step you wont get it....why? the message does not pass through AE (can you see/ monitor it in RWB?).....So Transport Ack for send step in HTTP communication wont help you..
    I just want to know that HTTP was posted successfully.
    Is there a way to achieve that usign BPM (transport ack)?
    Make the Send step in your BPM synchronous and put it in a block.....define an exception branch and put the logic that you want to implement if the send fails.....if successful then put a COntrol Step (Cancel Process) after the Sync Send.....
    If you say to me implement the Transport Ack...then it will be my last option.....I am implementing the above method of checking success/ failure in my project (the adapter is SOAP)......
    Regards,
    Abhishek.

  • Https transport support for JAX-WS WebServices

    Hi All ,
    I am trying to implement JAX-WS WebServices that support https transport .To do so I added the following annotation *@Policy(uri = "policy:Wssp1.2-2007-Https-BasicAuth.xml)* in my Jws Implementation file for the JAX-WS WebServices but I got parsing error.Can anyone please confirm that JAX-WS supports the policy annotation in Impl file.If it is supported can a link/pointer/example could be given to implement https enabled JAX-WS WebService and the required configuration in wsdl file.
    Thanks and Regards

    It does but you've specified a policy that uses both HTTPS and basic HTTP authentication. If you require just HTTPS use "Wssp1.2-Https.xml". In turn you must enable the SSL port on the WLS server. See this blog post: http://one-size-doesnt-fit-all.blogspot.com/2009/02/enabling-ssl-and-disabling-non-ssl_17.html
    If you use JDev to generate the JAX-WS web services, given the policy annotation JDev willl put the policy in the WSDL file appropriately.
    CM.

  • EJB Transport in OSB 10gR3

    Hi All,
    I need help on EJB transport in OSB 10gR3.
    In our scenario, a proxy will poll a location for any incoming file (xml). Once any file comes, proxy service will pick that file and pass it to the business service which will call an EJB deployed on weblogic 8.15 and pass incoming file to EJB by calling it's one operation.
    My questions are -
    1. Which kind of argument can be passed to EJB in above case (means can we pass the incoming xml as String or we have to pass it as the type of root node in xml)
    2. Is there any documentation which describes the implementation of above scenario in OSB?
    Thanks & Regards,
    Anuj Dwivedi

    Bala,
    the OSB Gives The JNDI Provider "ormi" does not exist.
    Reference to a non-existing instance: ForeignJNDIProvider System/JNDI Providers/ormi Have you configured Foreign JNDI http://e-docs.bea.com/wls/docs103/ConsoleHelp/taskhelp/jndi/ManageForeignJNDI.html
    Are you aware of this note http://download.oracle.com/docs/cd/E13159_01/osb/docs10gr3/ejbTransport/ejbtransport.html#wp1074283
    "Although it is possible to use a WebLogic Server foreign JNDI Provider, Oracle recommends that you do not. "
    Involve your Oracle Sales Representative/Support Representative to suggest this enhancement to OSB for supporting ORMI in OSB jndi provider. If you are licensed customer it becomes your right to make your suggestion known to Oracle and if you are not licensed customer then you got a valuable bargain chip :) . In either case talk to you Oracle representative to know official recommended approach from Oracle and also if enhancement can implemented or not.
    Meanwhile I would suggest using IIOP/IIOPs which is supported by OSB to access EJB on your Oracle Application Server.
    http://download-uk.oracle.com/docs/cd/B31017_01/web.1013/b28958/jndi.htm
    http://download-uk.oracle.com/docs/cd/B31017_01/web.1013/b28958/jndi.htm#i1084614
    Manoj

  • Message retry count for the message has been exhausted

    Hi,
    I am using 'Custom Document Over Internet' with HTTPS as transport protocol. I have set the acknowledgement mode to Sync in order to receive the synchronous response. B2B is able to post the HTTP request successfully and in turn it receives a synchronous response and a MDN message. At the initial stage, after posting the request it shows the state as 'WaitForAck' for request message and for response and MDN messages, the state is completed.
    After some time when we check the state of request it is changed to 'Error' with the error message as 'Message retry count for the message has been exhausted'. We have not set the retry count and retry interval and so after retrying for 3 times with an interval of 120 minutes it is showing error state as it is not able to correlate the incoming response to the corresspoding request. We have tried the option of setting the Message id of the request in 'replyToMsgID' parameter of response header and tested the flow. But still I am facing te same issue. Please help me to resolve this issue.

    Hi Anuj,
    The property mentioned by NandaGopal has already been added in tip.properties file. I sent the B2B logs in debug mode and tip.properties file to your mail id. Please have a look into that. The result of opatch lsinventory command is
    Result:
    Installed Patch List:
    =====================
    1) Patch 9234704 applied on Fri Jan 15 16:41:12 GMT 2010
    [ Bug fixes: 8870866 9143036  ]
    [ This patch overlays patches " 8703410 " ]
    [ This patch needs patches " 8703410 "  as prerequisites ]
    2) Patch 8703410 applied on Thu Jan 07 17:56:08 GMT 2010
    Unique Patch ID: 11901808
    [ Bug fixes: 7652646 7497854 7664370 8708445 7661101 7007789 6352814 6802446 7665607 7641078 6496457 6013963 8330151 7305413 8619657 7460584 7529893 7458954 7020996 8393885 8210401 6329207 6740403 7126458 6511970 8783577 7379065 7230993 8704965 6774631 7198642 8309511 8392729 7661769 7605518 7479148 6733262 8349002 6736026 7322333 7242500 7239355 8746561 8344645 8451004 7645440 6747966 6369424 6737334 8339176 6774134 7046561 6412124 7210461 7506319 8630406 8235175 7258882 7184318 6453359 7456866 7673646 6043277 7457597 6769895 7193710 8239170 7668247 8404955 8612841 7261965 7132740 7485790 6518386 7305363 6852370 6433256 7673431 6764239 8360048 7501748 7379153 8281019 7498031 8216457 7046574 6875312 6754906 6656289 6417367 7658271 7556011 7000190 6979467 8594506 8691820 6852308 8475848 8518443 7600385 7211208 6732051 8524862 7461051 8263026 7609467 7379161 7672714 6353293 7157229 7594997 7211287 7034069 7563311 6822375 6640935 7359202 6769261 6919593 8601869 6029507 6974391 7139013 7518641 8605719 6817264 7501903 7496014 7576785 8666761 7130151 7322581 5523563 7680097 8508905 7241737 7660780 8480395 7660781 7191994 6924921 7672723 8432093 6800745 8703404 8540335 8507242 8608121 8217566 7481317 6639030 6200414 7529795 7354853 8475867 7376270 7303860 7016005 7678901 7368610 8992520 6881977 6016128 7033061 6397084 7672730 8703410 7709562 6449656 7045589 8508054 6491068 7378745 7643811 7435853 7615836 8707416 6447557 7379042 6940476 7670634 6950383 6764273 6962327 7478322 8546454 7157324 8871403 8862082 7184219 7672744 7164618 7672745 7230184 7576730 7590301 8746541 7261863 8327427 6769430 8295683 7526186 8298731 6414280 6139955 6646997 7692853 8233048 6794296 7457066 8552373 8225241 7706387 7204022  ]
    3) Patch 4601861 applied on Fri Nov 14 04:24:08 GMT 2008
    [ Bug fixes: 4601861  ]

  • Does CTS+ work with SLD transport targets for ID transports?

    Hi,
    does CTS+ work with SLD transport targets for ID transports?
    did any of you ever used it ?
    thank you,
    Regards,
    Michal

    Hi Michal
    I would be interested to find out about this..
    Hopefully this new project will use 7.1 and Basis are doing all the SLD and the CTS+ config..
    I have every faith in them!!!!  :-O
    There is a document about transporting repository and directory objects, but every version I have found is corrupt - or I cannot open in Adobe...
    You may have more luck!
    Change and Transport System
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/80bbbd55-5004-2a10-f181-8bb096923cb6
    "This How-to Guide explains step–by-step how to set up the enhanced Change and Transport System (CTS) for use in conjunction with usage type Process Integration (PI) of SAP NetWeaver (formerly known as SAP NetWeaver Exchange Infrastructure or SAP NetWeaver XI). CTS introduces a new transport handling mechanism that offers tighter integration for the transport of ABAP, Java, and Integration Builder objects (Integration Repository and Integration Directory) using the Change and Transport System (BC-CTS) functionality."
    Maybe in six weeks I can actually answer this for you!  I'm sure you'll have the answer by then!

  • Validation error on retry count for session bean

    Hi,
    In our weblogic-ejb-jar.xml we have configured a retry count for a specific method on a local session bean. When I click on 'Browse' to select a specific method, it only shows '*' as a possible value. When we type the method name by hand, it shows a red cross next to the input field with the error 'Cannot find method "exampleMethod()" in the ExampleBean's Local interfaces'.
    We use EJB 3.0 and OEPE 12.1.1.0.1 with Eclipse 3.7.2
    The weblogic-ejb-jar.xml looks like this:
    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-ejb-jar xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.2/weblogic-ejb-jar.xsd">
        <retry-methods-on-rollback>
         <retry-count>3</retry-count>          
            <method>
                <ejb-name>ExampleBean</ejb-name>
                <method-intf>Local</method-intf>
                <method-name>exampleMethod</method-name>
           </method>
        </retry-methods-on-rollback>
    </weblogic-ejb-jar>The bean looks like this:
    @Stateless(mappedName = MappedName.DONNA)
    @TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
    public class ExampleBean implements Example {
    }And the interface:
    @Local
    public interface Example {
    }Does anyone else have this problem?
    Thanks.
    Pieter

    Hi Pieter,
    This is a known issue and I will keep you posted on the development.
    Thanks for your feedback!
    -Ram

  • HTTPS (Transport Level Security)

    Hi SDNers,
    I have a question regarding securing a SOAP Sender scenario using HTTPS. We are on PI 7.11 and have a SOAP-PI-RFC scenario. I have used a HTTP Sender instead of a SOAP channel to configure the option of 'HTTPS without Client Authentication'. I have generated the WSDL for this and tested successfully using SOAP UI.
    But our client needs a SSL certificate for this. As far as I understand SSL certificates are used only for message level security. But here they are OK with just transport level security. Do we need any certificates in this case? Please clarify.
    Another question I have is, is there any way of using HTTPS (transport level security) using SOAP Sender adapter? The option of 'HTTPS without Client Authentication' is not available anymore from PI 7.1 SP1 onwards. That is the reason I used a HTTP sender adapter.
    Any help is much appreciated  <text removed>
    Thanks & regards,
    Sudheer
    Edited by: Matt on Oct 12, 2011 6:49 AM

    Hi Abhishek,
    I am not able to see that option in the SOAP Sender channel configuration. Besides, the help link from SAP also does not show this option.
    Here is the link for EHP1:
    http://help.sap.com/saphelp_nwpi711/helpdata/en/48/3555240bea31c3e10000000a42189d/content.htm
    and here is the link you gave,
    http://help.sap.com/saphelp_nwpi71/helpdata/EN/fc/5ad93f130f9215e10000000a155106/content.htm
    Clearly, both are for configuring the sender SOAP channel, but the options are different if you notice.
    I am not able to understand where I am going wrong.
    Appreciate your quick response.
    Regards,
    Sudheer

  • HTTP transport error: javax.xml.soap.SOAPException: java.security.PrivilegedActionException: javax.xml.soap.SOAPException: Message send failed: String index out of range: -7

    All -
    I'm new to consuming web services in JDeveloper. I'm using Oracle JDEV 10.1.3.3/OC4J.  I'm using this version since it is compatible with Oracle EBS 12.1.3.  My intent is to pull data from our third party recruitment app (Success Factors) and load that data into Oracle HRIS.  I'm already doing this through a .NET application.  I'm converting it to be a Java Concurrent Program in EBS.  The code listed below is a stub call to verify I'm on the right track. I created a JDeveloper Web Services proxy project.  I'm testing it locally on my windows desktop.  When I'm able to consume the service successfully, then I'll think about moving it to the EBS server.
    I'm getting the following error when I invoke the following service:
    HTTP transport error: javax.xml.soap.SOAPException: java.security.PrivilegedActionException: javax.xml.soap.SOAPException: Message send failed: String index out of range: -7
    End point is: https://api4.successfactors.com/sfapi/v1/soap?wsdl
    Any help/assistance would be much appreciated. 
    Below is my code and output of my test:
    package emsc.oracle.apps.emscper.sfapi.proxy;
    import HTTPClient.HTTPConnection;
    import emsc.oracle.apps.emscper.sfapi.proxy.types.sfobject_sfapi_successfactors_com.IsValidSession;
    import emsc.oracle.apps.emscper.sfapi.proxy.types.sfobject_sfapi_successfactors_com.IsValidSessionResponse;
    import emsc.oracle.apps.emscper.sfapi.proxy.types.sfobject_sfapi_successfactors_com.Login;
    import emsc.oracle.apps.emscper.sfapi.proxy.types.sfobject_sfapi_successfactors_com.LoginResponse;
    import emsc.oracle.apps.emscper.sfapi.proxy.types.sfobject_sfapi_successfactors_com.LoginResult;
    import emsc.oracle.apps.emscper.sfapi.proxy.types.sfobject_sfapi_successfactors_com.Logout;
    import emsc.oracle.apps.emscper.sfapi.proxy.types.sfobject_sfapi_successfactors_com.LogoutResponse;
    import emsc.oracle.apps.emscper.sfapi.proxy.types.sfobject_sfapi_successfactors_com.SFCredential;
    import emsc.oracle.apps.emscper.sfapi.proxy.types.sfobject_sfapi_successfactors_com.SFParameter;
    import emsc.oracle.apps.emscper.sfapi.proxy.types.sfobject_sfapi_successfactors_com.Error;
    import java.io.File;
    import javax.xml.rpc.ServiceFactory;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Date;
    import javax.xml.ws.BindingProvider;
    import javax.xml.soap.SOAPException;
    import java.util.Map;
    import oracle.security.ssl.OracleSSLCredential;
    public class SFAPITest {
        // Declare members:      
        private String companyId;
        private String userName;
        private String password;
        private String developerKey;
        private Date   effDt;
        private String greaterThanEffDt;
        private String lessThanEffDt;
        // Declare constants:      
        final static private String breakLine = "+---------------------------------------------------------------------------+";
        final static private String format    = "yyyy-mm-dd";      
        private enum ReqId {
            PrimaryReq(25),
            PrimaryReqCEO(26),
            EmCarePrimary(27),
            RTI(28),
            EmCareClinical(29);
            private int reqId; 
            private ReqId() {
            private ReqId(int value) {
                reqId = value;
            public int getReqId() {
                return reqId;
        // Getters and Setters:  
        protected String getCompanyId() {
           return this.companyId;
        protected void setCompanyId(String value) {
           this.companyId = value;                 
        protected String getUserName() {
           return this.userName;
        protected void setUserName(String value) {
           this.userName = value;                 
        protected String getPassword() {
           return this.password;
        protected void setPassword(String value) {
           this.password = value;                 
        protected String getDeveloperKey() {
           return this.developerKey;
        protected void setDeveloperKey(String value) {
           this.developerKey = value;                 
        protected Date getEffDt() {
            return this.effDt;
        protected void setEffDt(Date value) {
            this.effDt = value;                 
        protected String getGreaterThanEffDt() {
           return this.greaterThanEffDt;
        protected void setGreaterThanEffDt(String value) {
           this.greaterThanEffDt = value;                 
        protected String getLessThanEffDt() {
           return this.lessThanEffDt;
        protected void setLessThanEffDt(String value) {
           this.lessThanEffDt = value;                 
        public void runProgram()
            SFAPIService mySFAPIService;
            String CompletionText = "";
            String effDtStr2 = null;
        /* Code your program logic here.
        * Use getJDBCConnection method to get the connection object for any
        * JDBC operations.
        * Use CpContext provided commit,rollback methods to commit/rollback
        * data base transactions.
        * Don't forget to release the connection before returning from this
        * method.
        /* Call setCompletion method to set the request completion status and
        * completion text.
        * Status values are ReqCompletion.NORMAL,ReqCompletion.WARNING,
        * ReqCompletion.ERROR.
        * Use Completion text message of length 240 characters. If it is more
        * than 240 then full string will appear in log file and truncated 240
        * characters will be used as request completion text.
        try
            ServiceFactory factory = ServiceFactory.newInstance();
            mySFAPIService = (emsc.oracle.apps.emscper.sfapi.proxy.SFAPIService)factory.loadService(emsc.oracle.apps.emscper.sfapi.proxy.SFAPIService.class);      
            SFAPI api = mySFAPIService.getSFAPI();
           /// SFAPI api = new SFAPI();
            //Map<String, Object> requestContext = ((BindingProvider) api).getRequestContext();
            //requestContext.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
            System.out.println("ServiceName => " + mySFAPIService.getServiceName().toString());
            System.out.println("End Point   => " + mySFAPIService.getServiceName().toString());
            System.out.println(breakLine);
            // Authentication: Login to SFAPI:
            SFCredential credential = new SFCredential();
            // Fake credentials being passed in for this post:   
            credential.setCompanyId("XXX");
            credential.setUsername("XXX");
            credential.setPassword("XXX");
            credential.setDeveloperKey("XXX");
            HTTPConnection httpsConnection = null;       
            OracleSSLCredential _credential = new OracleSSLCredential();      
            _credential.setWallet("\\\\\\C:\\Program Files\\Java\\jdk1.6.0_33\\jre\\lib\\security", "ParkEstes3");
            /*System.setProperty("javax.net.ssl.trustStore","C:\\\\\OraHome_1\\jdev\\jdevbin\\jdk\\jre\\lib\\security\\keystore");
            System.setProperty("javax.net.ssl.trustStorePassword","changeit");  
            System.out.println(System.getProperty("javax.net.ssl.trustStore"));*/
            // SFParameter: Define a generic SFParameter List.  This is a necessary parameter
            // to invoking calls in SFAPI:      
             /*System.setProperty("javax.net.ssl.keyStore",
             "file:\\\C:\\jdk1.4.1\\jre\\lib\\security\\client.keystore");
             System.setProperty("javax.net.ssl.keyStorePassword","welcome");         */
            /*  System.setProperty("oracle.net.wallet_location",
                          "(SOURCE=(METHOD=file)(METHOD_DATA=(DIRECTORY=\\\C:\Users\dparrish\Oracle\WALLETS)))");  // (2)                     */
            File kstore = new File("C:\\OraHome_1\\jdev\\jdevbin\\jdk\\jre\\lib\\security\\jssecacerts");
            boolean exists = kstore.exists();
            if (!exists) {
                System.out.println("Keystore does not exist");
            else {
                System.out.println("Keystore does exist");
            System.setProperty("javax.net.ssl.trustStore", kstore.getAbsolutePath());
            System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
            //System.setProperty("proxySet", "false");
            //System.setProperty("http.proxyHost", "127.0.0.1");
            //System.setProperty("http.proxyPort", "8080");
            System.out.println(kstore.getAbsolutePath());
            List<SFParameter> lst = new ArrayList<SFParameter>();
            SFParameter param = new SFParameter();
            param.setName("");
            param.setValue("");
            lst.add(param);      
            SFParameter[] sfParam = lst.toArray(new SFParameter[lst.size()]);
            Login login = new Login();
            try {
                login.setCredential(credential);
                System.out.println("1");
                login.setParam(sfParam);
                System.out.println("2");
                LoginResponse loginResponse = new  LoginResponse();
                LoginResult loginResult = new LoginResult();
                try {
                     loginResponse = api.login(login);               
                catch (Exception e ) {
                    System.out.println(e.getMessage());
                System.out.println("3");
                try {               
                     loginResult = loginResponse.getResult();
                catch (Exception e ) {
                    System.out.println(e.getMessage());
                System.out.println("4");
                IsValidSession vs = new IsValidSession();                  
                IsValidSessionResponse isValidSessionResponse = api.isValidSession(vs);
                System.out.println("5");
                if (isValidSessionResponse.isResult()) {
                     System.out.println("Session is valid");
                     System.out.println("Result => " + loginResult.getSessionId());
                     System.out.println(breakLine);              
                    Logout logout = new Logout();
                    LogoutResponse logoutResponse = api.logout(logout);
                    if (logoutResponse.isResult()) {
                         System.out.println("Logout of SFAPI Successful");
                    else {
                        System.out.println("Logout of SFAPI Unsuccessful");
                else {
                     System.out.println("Session is invalid");
                    List<Error> errors = new ArrayList<Error>();
                    for (int i = 0; i < loginResult.getError().length;  i++) {
                        errors.add(loginResult.getError()[i]);
                    for (int i = 0; i < errors.size(); i++) {
                         System.out.println("Error Indice   => " + i);
                         System.out.println("Error Code:    => " + errors.get(i).getErrorCode());
                         System.out.println("Error Message: => " + errors.get(i).getErrorMessage());
                         System.out.println(breakLine);                                                          
                    } // end for loop of SFObject errors
                } // end InvalidSession
            catch (Exception e)
                 System.out.println("Session Credential Exception");
                 System.out.println("Exception => " + e.getMessage());
                 System.out.println(breakLine);                   
        catch (Exception e)
            System.out.println("Parameter List Exception");
            System.out.println("Exception => " + e.getMessage());
            System.out.println(breakLine);
        }   // end runProgram
        // Constructor:
        public SFAPITest()  {
        } // end constructor
        public static void main (String args[]) {
            try
                SFAPITest test = new SFAPITest();        
                test.runProgram();
            catch (Exception e) {
                System.out.println("main exception => " + e.getMessage());
    } // SFAPITest
    Here is the output with trace:
    WARNING: Unable to connect to URL: https://api4.successfactors.com:443/sfapi/v1/soap due to java.security.PrivilegedActionException: javax.xml.soap.SOAPException: Message send failed: String index out of range: -7
    Session Credential Exception
    Exception => ; nested exception is:
        HTTP transport error: javax.xml.soap.SOAPException: java.security.PrivilegedActionException: javax.xml.soap.SOAPException: Message send failed: String index out of range: -7
    +---------------------------------------------------------------------------+
    Process exited with exit code 0.

    The other end is throwing back a programming error.
    That might be because you are sending incorrect data and the other end fails to validate it.
    You might be able to guess based on your C# code.  But, since you are using soap one generic solution is available to you.
    - Get an http proxy interceptor like wireshark.
    - Run it while your C# app runs, collect the http requests from that.
    - Run it while running your java code, collect the http requests from that.
    Compare the two.

Maybe you are looking for