2016-07-18 24 views
1

Ich habe einen Java-Client-Code mit SAAJ für Primevera P6 Webservices geschrieben. Ich erhalte den folgenden Authentifizierungsfehler. Ich gebe den HTTP-Benutzernamen + das Passwort dem Code, aber es gibt Fehler: SEVERE: SAAJ0008: Ungültige Antwort; Nicht autorisiert. Könnte mir bitte jemand mit diesem Problem helfen? Ich stecke seit langem in diesem Problem. Die WSDL des Webdienstes lautet: https://sunpower-p6.oracleindustry.com/p6ws-token/services/ProjectService?wsdl.Java-Client, der SAAJ-Fehler verwendet: SEVERE: SAAJ0008: ungültige Antwort; Nicht autorisiert

ERROR: Anfrage SOAP Message = 18. Juli 2016 13.03.19 com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection Beitrag SCHWERES: SAAJ0008: Bad Antwort; Nicht autorisierte com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad Antwort: (401Unauthorized

Mein Code:

public class Testclient {

/* 
Method used to create the SOAP Request 
*/ 
private static SOAPMessage createSOAPRequest() throws Exception 
{ 

    // Next, create the actual message 
    MessageFactory messageFactory = MessageFactory.newInstance(); 
    SOAPMessage soapMessage = messageFactory.createMessage(); 
    SOAPPart soapPart = soapMessage.getSOAPPart(); 


    String serverURI = "http://xmlns.oracle.com/Primavera/P6/WS/Project/V2"; 

    // SOAP Envelope 
    SOAPEnvelope envelope = soapPart.getEnvelope(); 
    envelope.addNamespaceDeclaration("ProjectService", serverURI); 

    //start: setting HTTP headers - optional, comment out if not needed 
    String authorization = Base64Coder.encodeString("xyz:abc"); 
    MimeHeaders hd = soapMessage.getMimeHeaders(); 
    hd.addHeader("Authorization", "Basic " + authorization); 
    //end: setting HTTP headers 

    // Create and populate the body 
    SOAPBody soapBody = envelope.getBody(); 

    // Create the main element and namespace 
    SOAPElement soapBodyElem = soapBody.addChildElement("ReadProjects", "ProjectService"); 
    SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("Field", "ProjectService"); 
    SOAPElement soapBodyElem2 = soapBodyElem1.addChildElement("Id", "ProjectService"); 
    soapBodyElem2.addTextNode("11106"); 

    hd.addHeader("SOAPAction", serverURI + "ReadProjects"); 

    // Save the message 
    soapMessage.saveChanges(); 

    // Check the input 
    System.out.println("Request SOAP Message = "); 
    soapMessage.writeTo(System.out); 
    System.out.println(); 
    return soapMessage; 
} 

/** 
* Method used to print the SOAP Response 
*/ 
private static void printSOAPResponse(SOAPMessage soapResponse) throws Exception 
{ 
    // Create the transformer 
    TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
    Transformer transformer = transformerFactory.newTransformer(); 

    // Extract the content of the reply 
    Source sourceContent = soapResponse.getSOAPPart().getContent(); 

    // Set the output for the transformation 
    System.out.println("\nResponse SOAP Message = "); 
    StreamResult result = new StreamResult(System.out); 
    transformer.transform(sourceContent, result); 
    System.out.println(); 
} 

public static void main(String[] args) throws Exception { 

    try { 
     // First create the connection 
     SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); 
     SOAPConnection soapConnection = soapConnectionFactory.createConnection(); 
     //System.out.println(soapConnection); 

     //Send SOAP Message to SOAP Server 
     String url = "https://sunpower-p6.oracleindustry.com/p6ws-token/services/ProjectService?wsdl"; 
     // Send the message and get the reply 
     SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url); 

     // Process the SOAP Response 
     printSOAPResponse(soapResponse); 

     soapConnection.close(); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
    } 

} 

}

Antwort

0

Ich weiß, Das ist eine alte Frage, aber ich würde gerne irgendjemanden in der Zukunft unterstützen, der hier landet (wie ich es getan habe). Es gibt ein paar wahrscheinliche Situationen, die ich in letzter Zeit diesbezüglich erfahren habe.

  1. Überprüfen Sie, ob Ihre Angaben korrekt sind oder ob die Verbindung möglich ist. Sei 100% sicher, bevor du weitermachst.
  2. Sie erhalten einen nicht autorisierten Fehler, wenn Ihre Datenbank für einige Setups (z. B. auf JBoss) nicht korrekt konfiguriert ist. In meiner Situation wurde die Datenquellendatei nicht richtig gelesen, als versucht wurde, eine Verbindung herzustellen, die den nicht autorisierten Fehler auf der Clientseite verursacht.