簡體   English   中英

通過Java調用Web服務時,獲取javax.xml.soap.SOAPException:Oracle Weblogic服務器上未指定Content-Type錯誤

[英]Getting javax.xml.soap.SOAPException: Content-Type not specified error on Oracle weblogic server while calling web service through Java

我已經使用Jdeveloper工具編寫了一個Java代碼來調用外部Web服務。 當我從Jdeveloper運行我的代碼時,它運行良好。 但是我將我的代碼部署在Oracle weblogic 10.3.6服務器上,然后嘗試運行此代碼,然后出現以下錯誤-

javax.xml.soap.SOAPException:未指定Content-Type

這是我的代碼-

    public static String callTestService(String soapRequestXml, String url)  {


        try{

        final boolean isHttps = url.toLowerCase().startsWith("https");
        HttpsURLConnection httpsConnection = null;
                // Open HTTPS connection

                // Create a trust manager that does not validate certificate chains
                       TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
                               public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                                   return null;
                               }
                               public void checkClientTrusted(X509Certificate[] certs, String authType) {
                               }
                               public void checkServerTrusted(X509Certificate[] certs, String authType) {
                               }
                           }
                       };

                if (isHttps) {
                    // Create SSL context and trust all certificates
                    SSLContext sslContext = SSLContext.getInstance("SSL");
                    //TrustManager[] trustAll= new TrustManager[] {new TrustAllCertificates()};
                   sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
                    // Set trust all certificates context to HttpsURLConnection
                    HttpsURLConnection
                            .setDefaultSSLSocketFactory(sslContext.getSocketFactory());
                    // Open HTTPS connection
                  //  URL url1 = new URL(url);
                  URL url1 = new URL(null, url, new sun.net.www.protocol.https.Handler());
                    httpsConnection = (HttpsURLConnection) url1.openConnection();
                    // Trust all hosts
             //       httpsConnection.setHostnameVerifier(new TrustAllHosts());
                    // Connect

                    //Use below (2 lines) if Host name verification needs to turned off
                    MyHostnameVerifier HostVerifier = new MyHostnameVerifier();
                    httpsConnection.setHostnameVerifier(HostVerifier);
                    httpsConnection.connect();
                }
        // Create SOAP Connection
        SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
        SOAPConnection soapConnection = soapConnectionFactory.createConnection();
        System.out.println("create connection");
     // SOAPMessage soapRequest = MessageFactory.newInstance().createMessage(new MimeHeaders(),
       //        new ByteArrayInputStream(soapRequestXml.getBytes()));

        SOAPMessage soapRequest = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(new MimeHeaders() ,
                 new ByteArrayInputStream(soapRequestXml.getBytes(Charset.forName("UTF-8"))));
           // SOAPMessage s = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
           // SOAPPart soapPart = soapRequest.getSOAPPart();

                // SOAP Envelope
               // SOAPEnvelope envelope = soapPart.getEnvelope();
               // envelope.addNamespaceDeclaration("Dokumentai", "http://vmi.lt/ais/xsd/daa");

    //  MessageFactory messageFactory = MessageFactory.newInstance();
        //SOAPMessage soapRequest = messageFactory.createMessage(new MimeHeaders(),soapRequestXml);
     // MessageFactory messageFactory = MessageFactory.newInstance();
      //  SOAPMessage soapRequest = messageFactory.createMessage();
    //  SOAPPart soapPart = soapRequest.getSOAPPart();
    //   SOAPEnvelope envelope = soapPart.getEnvelope();
     //   SOAPBody soapBody = envelope.getBody();
      //soapBody.setTextContent(soapRequestXml);
     // soapRequest.setContentDescription(soapRequestXml);

   // SOAPPart soapPart = soapRequest.getSOAPPart();
    //SOAPEnvelope envelope = soapPart.getEnvelope();

     // String serverURI = "myhost";


   //  envelope.addNamespaceDeclaration("xmlns",
     //  "http://vmi.lt/ais/xsd/daa");






     // SOAP Envelope


   //  SOAPEnvelope envelope = soapPart.setContent(soapRequestXml);
       // System.out.println("SOAP "+ soapRequest.writeTo(System.out));

        MimeHeaders headers = soapRequest.getMimeHeaders();
    headers.setHeader("SOAPAction",
          "http://vmi.lt/ais/ws/handleMessage");
           MimeHeaders headers1 = soapRequest.getMimeHeaders();
            headers1.setHeader("Content-Type", "application/soap+xml; charset=utf-8");
        soapRequest.saveChanges();
        soapRequest.writeTo(System.out);
        System.out.println("call request url");








        // Send SOAP Message to SOAP Server
        SOAPMessage soapResponse = soapConnection.call(soapRequest, url);
            soapResponse.setProperty("Content-Type", "application/xml; charset=utf-8");
            soapResponse.setContentDescription("application/xml; charset=utf-8");

        ByteArrayOutputStream soapResponseBaos = new ByteArrayOutputStream();
        soapResponse.writeTo(soapResponseBaos);
        String soapResponseXml = soapResponseBaos.toString();

        return soapResponseXml;

        }catch(Exception e){

            return e.toString();
            }
    }

我已經嘗試了許多不同的方法,但是當我直接從Jdeveloper調用Web服務時,它工作正常,但是當我從Oracle Web邏輯服務器調用時,它卻失敗了。

你能幫我這個忙嗎?

我已解決此問題。請在代碼中進行以下更改。

MimeHeaders headers1 =新的MimeHeaders();

             headers1.setHeader("Content-Type", "text/xml");
             headers1.setHeader("Encoding", "UTF-8");
//    SOAPMessage soapRequest =
  //      MessageFactory.newInstance().createMessage(new MimeHeaders(),
    //                                               new ByteArrayInputStream(soapRequestXml.getBytes(Charset.forName("UTF-8"))));

    SOAPMessage soapRequest = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL).createMessage(headers1 ,
             new ByteArrayInputStream(soapRequestXml.getBytes(Charset.forName("UTF-8"))));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM