我试图通过java代码调用soap api。它是通过soapui工作的,但不是通过java代码。
public class SoapExecutor {
public static void main(String args[]) throws Exception{
File file = new File("soap_request.xml");
BufferedReader br = new BufferedReader(new FileReader(file));
String soapXmlLine;
StringBuilder soapXml = new StringBuilder();
while ((soapXmlLine = br.readLine()) != null) {
soapXml.append(soapXmlLine);
soapXml.append("\n");
}
String url = "https://ucf3-zpri-fa-ext.oracledemos.com:443/xmlpserver/services/ExternalReportWSSService";
String encodedCredential = encodeStringToBase64("user:password");
String response = executeSoapRequest(soapXml,url,"Basic "+encodedCredential);
System.out.println(response);
}
public static String encodeStringToBase64(String s) throws UnsupportedEncodingException {
byte[] message = s.getBytes("UTF-8");
String encoded = DatatypeConverter.printBase64Binary(message);
return encoded;
}
public static String executeSoapRequest(StringBuilder payload, String url, String authorization)
throws Exception {
String apiResponse;
SOAPConnectionFactory sfc = SOAPConnectionFactory.newInstance();
SOAPConnection connection = sfc.createConnection();
InputStream is = new ByteArrayInputStream(payload.toString().getBytes());
SOAPMessage request = MessageFactory.newInstance().createMessage(null, is);
request.getMimeHeaders().addHeader("Authorization", authorization);
request.saveChanges();
SOAPMessage soapResponse = connection.call(request, url);
//System.out.println(soapResponse.toString());
ByteArrayOutputStream stream2 = new ByteArrayOutputStream();
soapResponse.writeTo(stream2);
String contractTermResponse = new String(stream2.toByteArray(),"utf-8");
System.out.println("Test SOAP Response :" + contractTermResponse);
return contractTermResponse;
}
}
sopa\u request.xml是:
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Header></soapenv:Header><soapenv:Body><pub:runReport xmlns:pub="http://xmlns.oracle.com/oxp/service/PublicReportService">
<pub:reportRequest>
<pub:parameterNameValues>
<pub:item>
<pub:name>PR_NUM</pub:name>
<pub:values>
<pub:item>52326</pub:item>
</pub:values>
</pub:item>
</pub:parameterNameValues>
<pub:reportAbsolutePath>/Custom/Globality/Globality Agreement Details Report.xdo</pub:reportAbsolutePath>
<pub:sizeOfDataChunkDownload>-1</pub:sizeOfDataChunkDownload>
</pub:reportRequest>
</pub:runReport></soapenv:Body></soapenv:Envelope>
输出:
问题:soap请求通过soapui工作,我得到了正确的响应:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header/>
<env:Body>
<ns2:runReportResponse xmlns:ns2="http://xmlns.oracle.com/oxp/service/PublicReportService">
<ns2:runReportReturn>
<ns2:reportBytes>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLUdlbmVyYXRlZCBieSBP
cmFjbGUgQkkgUHVibGlzaGVyIC1EYXRhZW5naW5lLCBkYXRhbW9kZWw6X0N1c3RvbV9HbG9iYWxp
dHlfRGF0YV9Nb2RlbF9HQkxfQ1BBX1NUQVRfeGRtIC0tPgo8QUdSX1NUQVQ+PFBSX05VTT41MjMy
NjwvUFJfTlVNPgo8SEVBREVSPgo8QUdSRUVNRU5UX05VTT41MjMyNjwvQUdSRUVNRU5UX05VTT48
QUdSRUVNRU5UX0hFQURFUl9JRD4yNTA3ODI8L0FHUkVFTUVOVF9IRUFERVJfSUQ+PEFHUkVFTUVO
VF9TVEFUVVM+UEVORElORyBBUFBST1ZBTDwvQUdSRUVNRU5UX1NUQVRVUz48QlVfSUQ+MzAwMDAw
MDQ2OTg3MDEyPC9CVV9JRD48Q1VSUkVOQ1lfQ09ERT5DQUQ8L0NVUlJFTkNZX0NPREU+PFNUQVJU
X0RBVEU+MjAyMC0xMS0yNVQwMDowMDowMC4wMDArMDA6MDA8L1NUQVJUX0RBVEU+PEVORF9EQVRF
PjIwMjEtMDItMjFUMDA6MDA6MDAuMDAwKzAwOjAwPC9FTkRfREFURT48QU1PVU5UX0xJTUlUPjEw
MDA8L0FNT1VOVF9MSU1JVD48TUlOX1JFTEVBU0VfQU1PVU5UPjEwMDwvTUlOX1JFTEVBU0VfQU1P
VU5UPgo8L0hFQURFUj4KPC9BR1JfU1RBVD4=</ns2:reportBytes>
<ns2:reportContentType>text/xml</ns2:reportContentType>
<ns2:reportFileID xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<ns2:reportLocale xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<ns2:metaDataList xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</ns2:runReportReturn>
</ns2:runReportResponse>
</env:Body>
</env:Envelope>
但通过java代码,我在控制台上获得了高于垃圾的价值。更奇怪的是,如果我在头中注解了授权的设置值,那么代码就不会记录缺少的凭证。输出仍然是垃圾值。
暂无答案!
目前还没有任何答案,快来回答吧!