Skip to Main Content

Java Development Tools

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Integrating with Oracle Cloud using SOAP web services

Mahmoud MagdyNov 13 2018 — edited Nov 15 2018

I am trying to call a SOAP Web Services for Oracle Financials Cloud from my local application by HTTPS Client using Jdeveloper 11.1.1.9.0

and integeratde weblogic 10.3.6 .

I am getting the this error :

javax.faces.el.EvaluationException: javax.net.ssl.SSLKeyException: FATAL Alert:BAD_CERTIFICATE - A corrupt or unuseable certificate was received.

so i followed these steps:

- i exported the certificate of the domain i am trying to connect to like fa.us2.oraclecloud.com by the browser->Developer tools

- then i created a keystore, imported the certificate inside the keystore

- then went to http://127.0.0.1:7101/console/ -> Configurations -> keystores -> Custom Identity and Custom Trust -> then pointed the new keystore

- then made the same previous steps in Jdeveloper -> Credentials

but still getting the same error

--------------------------------------------------------------------------------------

here is the code i am using :

package beans;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.net.HttpURLConnection;

import java.net.URL;

public class CallWS {

    public CallWS() {

    }

    public static void http_client() throws Exception {

            System.out.println("Invoke service using direct HTTP call with Basic Auth");

            String payload =

                "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +

                "    <soap:Header>\n" +

                "        <fmw-context xmlns=\"http://xmlns.oracle.com/fmw/context/1.0\"/>\n" +

                "    </soap:Header>\n" +

                "    <soap:Body>\n" +

                "        <ns1:findExpense xmlns:ns1=\"http://xmlns.oracle.com/apps/financials/expenses/shared/common/expenseExternalService/types/\">\n" +

                "            <ns1:findCriteria xmlns:ns2=\"http://xmlns.oracle.com/adf/svc/types/\">\n" +

                "                <ns2:fetchStart>0</ns2:fetchStart>\n" +

                "                <ns2:fetchSize>2</ns2:fetchSize>\n" +

                "                <ns2:excludeAttribute>true</ns2:excludeAttribute>\n" +

                "            </ns1:findCriteria>\n" +

                "            <ns1:findControl xmlns:ns2=\"http://xmlns.oracle.com/adf/svc/types/\">\n" +

                "                <ns2:retrieveAllTranslations>true</ns2:retrieveAllTranslations>\n" +

                "            </ns1:findControl>\n" +

                "        </ns1:findExpense>\n" +

                "    </soap:Body>\n" +

                "</soap:Envelope>";

            httpPost("https://" + "edcb-test.fa.us2.oraclecloud.com:443" + "/finExmSharedCommon/ExpenseService" + "?invoke=", payload,

                     "*********:********");                          

        }

    private static String httpPost(String destUrl, String postData,

                                       String authStr) throws Exception {

            URL url = new URL(destUrl);

            HttpURLConnection conn = (HttpURLConnection)url.openConnection();

            if (conn == null) {

                return null;

            }

            conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");

            conn.setDoOutput(true);

            conn.setDoInput(true);

            conn.setUseCaches(false);

            conn.setFollowRedirects(true);

            conn.setAllowUserInteraction(false);

            conn.setRequestMethod("POST");

            byte[] authBytes = authStr.getBytes("UTF-8");

            String auth = com.sun.org.apache.xml.internal.security.utils.Base64.encode(authBytes);

            conn.setRequestProperty("Authorization", "Basic " + auth);

    

            System.out.println("post data size:" + postData.length());

    

            OutputStream out = conn.getOutputStream();

            OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");

            writer.write(postData);

            writer.close();

            out.close();

            System.out.println("connection status: " + conn.getResponseCode() +

                               "; connection response: " +

                               conn.getResponseMessage());

            InputStream in = conn.getInputStream();

            InputStreamReader iReader = new InputStreamReader(in);

            BufferedReader bReader = new BufferedReader(iReader);

            String line;

            String response = "";

            System.out.println("==================Service response: ================ ");

            while ((line = bReader.readLine()) != null) {

                System.out.println(line);

                response += line;

            }

            iReader.close();

            bReader.close();

            in.close();

            conn.disconnect();

    

            return response;

        }

}

--------------------------------------------------------------------------------------

and here is the error message :

Error 500--Internal Server Error

javax.faces.el.EvaluationException: javax.net.ssl.SSLKeyException: FATAL Alert:BAD_CERTIFICATE - A corrupt or unuseable certificate was received.

at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:51)

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:190)

at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:971)

at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:439)

at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:219)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)

at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)

at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)

at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

at oracle.adf.share.http.ServletADFFilter.doFilter(ServletADFFilter.java:79)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:133)

at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:478)

at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)

at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:478)

at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:303)

at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:208)

at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:138)

at java.security.AccessController.doPrivileged(Native Method)

at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:324)

at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:464)

at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:121)

at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:211)

at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:163)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)

at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)

at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)

at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)

at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)

at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)

at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)

at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

Caused by: javax.net.ssl.SSLKeyException: FATAL Alert:BAD_CERTIFICATE - A corrupt or unuseable certificate was received.

at com.certicom.tls.interfaceimpl.TLSConnectionImpl.fireException(Unknown Source)

at com.certicom.tls.interfaceimpl.TLSConnectionImpl.fireAlertSent(Unknown Source)

at com.certicom.tls.record.handshake.HandshakeHandler.fireAlert(Unknown Source)

at com.certicom.tls.record.handshake.HandshakeHandler.handleHandshakeMessages(Unknown Source)

at com.certicom.tls.record.MessageInterpreter.interpretContent(Unknown Source)

at com.certicom.tls.record.MessageInterpreter.decryptMessage(Unknown Source)

at com.certicom.tls.record.ReadHandler.processRecord(Unknown Source)

at com.certicom.tls.record.ReadHandler.readRecord(Unknown Source)

at com.certicom.tls.record.ReadHandler.readUntilHandshakeComplete(Unknown Source)

at com.certicom.tls.interfaceimpl.TLSConnectionImpl.completeHandshake(Unknown Source)

at com.certicom.tls.record.WriteHandler.write(Unknown Source)

at com.certicom.io.OutputSSLIOStreamWrapper.write(Unknown Source)

at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)

at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)

at java.io.FilterOutputStream.flush(FilterOutputStream.java:123)

at weblogic.net.http.HttpURLConnection.writeRequests(HttpURLConnection.java:186)

at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:400)

at weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37)

at weblogic.net.http.HttpURLConnection.getResponseCode(HttpURLConnection.java:1005)

at beans.WebService.httpPost(WebService.java:58)

at beans.WebService.http_client(WebService.java:26)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.sun.el.parser.AstValue.invoke(AstValue.java:187)

at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)

at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:46)

... 44 more

Comments
Post Details
Added on Nov 13 2018
4 comments
225 views