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!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

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
183 views