2012-11-02 95 views
0

使用POST請求後嘗試從Web服務讀取響應時出現問題。我期望能夠獲得一些有用的XML,但是我得到的只是HTML。返回HTML而不是XML的Java Web服務調用

URL url = new URL("https://abc.co.uk/someWS"); 
    String pKeyPassword = "xxxxxx"; 
    String xmlOutput = "someXML..."; 

    HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); 

    //Load authentication certificate. 
    KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509"); 
    KeyStore keyStore = KeyStore.getInstance("PKCS12"); 

    InputStream keyInput = new FileInputStream("/home/keystore.p12"); 
    keyStore.load(keyInput, pKeyPassword.toCharArray()); 
    keyInput.close(); 

    keyManagerFactory.init(keyStore, pKeyPassword.toCharArray()); 

    SSLContext context = SSLContext.getInstance("TLS"); 
    context.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom()); 

    con.setSSLSocketFactory(context.getSocketFactory()); 

    // Tell the connection that we will be sending information 
    con.setDoInput(true); 
    con.setDoOutput(true); 
    con.setRequestProperty("Content-Length", "" + xmlOutput.length()); 
    con.setRequestProperty("Content-Type", "text/xml; UTF-8"); 
    con.setRequestMethod("POST"); 

    con.connect(); 

    // Send the POST stream data 
    DataOutputStream outputStream = new DataOutputStream(con.getOutputStream()); 
    outputStream.writeBytes(xmlOutput); 

    // Read the response 
    InputStream inputstream = con.getInputStream(); 
    InputStreamReader inputstreamreader = new InputStreamReader(inputstream); 
    BufferedReader bufferedreader = new BufferedReader(inputstreamreader); 

    // format response to a string 
    String string = null; 
    String response = ""; 
    while ((string = bufferedreader.readLine()) != null) { 
     response += string; 
    } 
    con.disconnect(); 
    System.out.println(response); 

我一直相信,有什麼錯我連接到Web服務,顯然它看起來像從他們的最終我試圖做一個GET請求(這將返回HTML),而比POST請求。任何想法這裏錯了什麼?

+0

請添加一些信息關於HTML你有 –

+0

它只是一個表的所有網頁可以從這個服務器,其中有一個指向我連接過於相同頁面的URL服務的列表。它返回200 OK響應。 – user1795416

+0

看看我的迴應。安裝soapUI並加載所有Web服務(只需放入WSDL路徑)。之後,你可以玩每個WS,並驗證*清除*網絡服務之前工作定義。 –

回答

0

假設你有HTML,它可能是一些服務器錯誤。請閱讀服務器日誌以檢測該問題。無論如何,您可以使用soapUI應用程序來驗證您的Web服務已定義並正常工作。

這裏的代碼片段,對我的工作(只加密碼):

import org.apache.axis.AxisFault; 
import org.apache.axis.SOAPPart; 
import org.apache.axis.client.Call; 
import org.apache.axis.client.Service; 
import org.apache.axis.message.SOAPEnvelope; 
import org.apache.axis.soap.MessageFactoryImpl; 
.... 
String mHostAddr = "yourURL"; 
try { 

     String envelope = getXML(); //redFromXmlFile(); 
     //String envelope = ""; 
     byte[] reqBytes = envelope.getBytes(); 
     ByteArrayInputStream bis = new ByteArrayInputStream(reqBytes); 
     StreamSource ss = new StreamSource(bis); 

     //Create a SOAP Message Object 
     MessageFactoryImpl messageFactory = new MessageFactoryImpl(); 
     SOAPMessage msg = messageFactory.createMessage(); 
     SOAPPart soapPart = (SOAPPart) msg.getSOAPPart(); 

     //Set the soapPart Content with the stream source 
     soapPart.setContent(ss); 

     //Create a WebService Call 
     Service service = new Service(); 
     Call call = (Call)service.createCall(); 
     call.setTargetEndpointAddress(mHostAddr); 

     //Invoke the WebService. 
     SOAPEnvelope resp = call.invoke(((org.apache.axis.SOAPPart)soapPart).getAsSOAPEnvelope()); 






    } catch (AxisFault ex) { 
     System.out.println(ex.getMessage()); 
    } catch (ServiceException ex) { 
     System.out.println(ex.getMessage()); 
    } catch (SOAPException ex) { 
     System.out.println(ex.getMessage()); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 


.... 

它可以幫助你或找到正確的方向

+0

這很好,非常感謝您的幫助! – user1795416

0

你似乎在呼喚你的web服務「辛苦」 (TM值)。

有很多框架(地鐵,CXF等),可以產生存根類你,你可以很容易地調用和你是不太可能有應對當前的問題。 wsimport是你的朋友,並會告訴你,如果有問題的WSDL是不正確的。

有關相關鏈接,請參閱this answer

相關問題