2016-07-26 35 views
0

Nach einiger Zeit, um alle Teile für eine Java 8 Simulation des SAP SOAMANAGER Web Service Ping zusammen zu stellen (siehe SAP Knowledge Database # 1947516), musste ich feststellen, dass die Oracle Service Bus v11.1.1.7 (läuft auf WebLogic Server v10.3.6.0) scheint nur die verwendete HEAD-Methode, aber nur GET zu unterstützen.SAP SOAMANAGER Ping zu Oracle Service Bus Webservice Endpunkt schlägt fehl

HINWEIS: Ich hatte auszutauschen httpS mit httpX aufgrund Neuling Einschränkungen;)

Das Ergebnis des folgenden Codes von "Ping.java" ist

Der Versuch, einen HTTP 'ausführen GET 'auf 'httpX: //pelican.xxx.de: 42/aua_xxx wsdl'

Antwort: Code '? 200'/ message 'OK'

Der Versuch, einen HTTP auszuführen 'HEAD' auf' http X: //pelican.xxx.de: 42/aua_xxx wsdl‘

Antwort: Code '? 500'/message 'Internal Server Error'

import java.lang.System; 

import java.io.IOException; 

import java.net.URL; 
import java.net.HttpURLConnection; 

/** 
* to be able to use SSL you have to add the root certificate to the java keystore: 
* keytool.exe -import -noprompt -trustcacerts -alias rootca2015 -file rootca2015.cer -keystore D:\jdk\jre\lib\security\cacerts -storepass changeit 
* 
* ...and then use THIS java instance when calling the class: 
* D:\jdk\jre\bin\java Ping https://host.de:4242/test user123 pass123 
*/ 

public final class Ping { 

    private static void request(final String url, final String user, final String pass, final String protocol) 
    { 

     System.out.println("\nTrying to perform a HTTP '" + protocol + "' on '" + url + "'"); 


     HttpURLConnection httpUrlConnection = null; 


     try 
     { 
      httpUrlConnection = (HttpURLConnection) new URL(url).openConnection(); 
     } 
     catch (java.net.MalformedURLException mue) 
     { 
      System.out.println("\nMalformedURLException: " + mue); 
      System.exit(42); 
     } 
     catch (IOException ioe) 
     { 
      System.out.println("\nIOException: " + ioe); 
      System.exit(42); 
     } 



     if (user != null) 
     { 
      httpUrlConnection.setRequestProperty ("Authorization", "Basic " + java.util.Base64.getEncoder().encodeToString(((new String(user + ":" + pass)).getBytes()))); 
     } 


     try 
     { 
      httpUrlConnection.setRequestMethod(protocol); 
     } 
     catch (java.net.ProtocolException pe) 
     { 
      System.out.println("\nProtocolException: " + pe); 
      System.exit(42); 
     } 


     int responseCode = 0; 
     String responseMessage = null; 


     try 
     { 
      responseCode = httpUrlConnection.getResponseCode(); 
      responseMessage = httpUrlConnection.getResponseMessage(); 
     } 
     catch (java.net.UnknownHostException uhe) 
     { 
      System.out.println("\nUnknownHostException: " + uhe); 
     } 
     catch (IOException ioe) 
     { 
      System.out.println("\nIOException: " + ioe); 
      System.exit(42); 
     } 


     System.out.println("\nresponse: code '" + responseCode + "'/message '" + responseMessage + "'"); 

    } 

    public static void main(final String[] args) 
    { 

     if (args.length < 1 || args.length == 2 || args.length > 3) 
     { 
      System.out.println("\nUSUAGE: java HeadPing URL [username password], for example java Ping https://host.de:4242/test user123 pass123\n"); 
     } 

     String url=args[0]; 

     String user=null; 
     String pass=null; 

     if (args.length == 3) 
     { 
      user=args[1]; 
      pass=args[2]; 
     } 

     System.out.println("\nINFO: response code for HTTP_OK is '" + HttpURLConnection.HTTP_OK + "'!\n"); 

     request(url, user, pass, "GET"); 
     request(url, user, pass, "HEAD"); 

     System.exit(42); 
    } 

} 

Hat jemand eine Lösung dafür hat Problem? Kann der SAP SOAMANAGER GET verwenden? Kann die HEAD-Fähigkeit zum OSB hinzugefügt werden?

Antwort

0

OSB 11G hat REST-Unterstützung. Es ist primitiv im Vergleich zu 12C, aber Sie können basierend auf $inbound/ctx:transport/ctx:request/http:http-method/text() usw. wechseln. Der OSB-Dienst muss geschrieben werden, um die bestimmte REST-Operation als sinnvoll zu akzeptieren.

Sie sind jedoch nicht einmal der OSB-Endpunkt aufrufen. Sie rufen die URL auto generates a WSDL des Service an.

Entfernen Sie die ?wsdl und Sie erhalten die Antwort, die Sie tatsächlich wollen.

+0

Nun, Entschuldigung für den (jetzt) ​​offensichtlichen Fehler mit der '? Wsdl' :( –

+0

BTW: Es geht um ping gute alte einfache Web-Dienste, keine REST. –

+0

Aber das beste ist ... _IT WORKS! _: D –