我正在使用 POST 方法發(fā)出 SOAP 請求,該方法在請求標(biāo)頭中添加了身份驗(yàn)證,并且請求有效負(fù)載作為 XML 字符串傳遞。下面是參考代碼:package org.ecommerce.integration;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintStream;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import javax.net.ssl.HttpsURLConnection;import org.apache.commons.io.IOUtils;public class SoapRequestTest2 { public static void main(String args[]) throws MalformedURLException, IOException { //Code to make a webservice HTTP request String responseString = ""; String outputString = ""; String wsURL = "https://example.com:443/fscmService/ItemServiceV2"; URL url = new URL(wsURL); URLConnection connection = url.openConnection(); HttpsURLConnection httpConn = (HttpsURLConnection)connection; ByteArrayOutputStream bout = new ByteArrayOutputStream(); String xmlInput = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +"<soap:Body>" +"<ns1:findItem xmlns:ns1=\"http://xmlns.oracle.com/apps/scm/productModel/items/itemServiceV2/types/\">" + "<ns1:findCriteria xmlns:ns2=\"http://xmlns.oracle.com/adf/svc/types/\">" +"<ns2:fetchStart>0</ns2:fetchStart>" +"<ns2:fetchSize>100</ns2:fetchSize>" +"<ns2:filter>" +"<ns2:conjunction></ns2:conjunction>" +"<ns2:group>" +"<ns2:conjunction></ns2:conjunction>" +"<ns2:upperCaseCompare>false</ns2:upperCaseCompare>" +"<ns2:item>" +"<ns2:conjunction></ns2:conjunction>" +"<ns2:upperCaseCompare>false</ns2:upperCaseCompare>" +"<ns2:attribute>ItemNumber</ns2:attribute>"當(dāng)我嘗試在控制臺中打印出結(jié)果時(shí),它會打印出垃圾字符。請找到以下屏幕截圖:任何對錯(cuò)誤的正確指出都會有所幫助。
1 回答

慕無忌1623718
TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
我建議改用 SOAP 庫,但我想我不知道它們是否支持所需的身份驗(yàn)證方案。
因此,如果 SOAP 庫不現(xiàn)實(shí),我建議使用 HTTP 客戶端,例如 Apache HttpClient。設(shè)置請求要容易得多,它知道解壓縮最常見的壓縮方案,而無需自己做任何事情。
如果您仍然不想這樣做,那么您遇到的問題是發(fā)送的響應(yīng)被壓縮了。
因此,您首先需要讀取 Content-Encoding 響應(yīng)標(biāo)頭
String compression = httpConn.getHeaderField("Content-Encoding");
然后根據(jù)壓縮方法解壓你正在閱讀的響應(yīng):
InflaterInputStream 如果壓縮是“放氣”
GZIPInputStream 如果它是“gzip”
添加回答
舉報(bào)
0/150
提交
取消