2016-07-18 5 views
1

私はPrimevera P6 Webサービス用にSAAJを使用してJavaクライアントコードを書いています。私は以下の認証エラーを取得しています。コードにhttpのユーザー名+パスワードを提供していますが、エラーが発生します。重大:SAAJ0008:応答が不良です。無許可。何人かがこの問題で私を助けてくれますか?私は長い間この問題に悩まされています。 Webサービスのwsdlはhttps://sunpower-p6.oracleindustry.com/p6ws-token/services/ProjectService?wsdlです。SAAJエラーを使用しているJavaクライアント:SEVERE:SAAJ0008:応答が不良です。無許可

ERROR: リクエストSOAPメッセージ= 2016年7月18日午前1時03分19秒PMのcom.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnectionポスト SEVERE:SAAJ0008:バート・レスポンス。無断 com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl:悪い応答:(401Unauthorized

マイコード:

パブリッククラス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()); 
    } 

} 

}

答えて

0

私が実現これは古い質問ですが、将来(私のように)ここで終わる誰かに援助をしておきたいと思います。これに関して私が最近経験した状況がいくつかあります。

  1. 詳細が正しいこと、または接続が可能であることを確認してください。移動する前に100%確認してください。
  2. 一部の設定(JBossなど)でデータベースが正しく設定されていないと、不正なエラーが発生します。私の状況では、データソースファイルは、クライアント側でUnauthorizedエラーを引き起こして接続しようとしたときに正しく読み込まれませんでした。
関連する問題