无法读取服务器响应JavaException:javax.xml.xpath.XPathExpressionException:null
我正在尝试执行以下代码:无法读取服务器响应JavaException:javax.xml.xpath.XPathExpressionException:null,java,Java,我正在尝试执行以下代码: function post(url, options) { if(options.query) { url += "?"; var delimiter = ""; for(var propName in (options.query||{})) { url += (delemiter + (propName + "=" + escape(options.query[propName]))); delimiter =
function post(url, options) {
if(options.query) {
url += "?";
var delimiter = "";
for(var propName in (options.query||{})) {
url += (delemiter + (propName + "=" + escape(options.query[propName])));
delimiter = "&";
}
}
document.write("Fetching " + url);
var code;
var body = options.body;
if(body == null) {
throw {message:"Body is required"};
}
try {
// Open Connection
connection = new java.net.URL(url).openConnection();
// Set timeout
var timeout = options.timeout != null ? options.timeout : 10000;
connection.setReadTimeout(timeout);
connection.setConnectTimeout(timeout);
// Method == POST
connection.setRequestMethod("POST");
// Set Content Type
var contentType = "text/xml;charset=utf-8";
connection.setRequestProperty("Content-Type", contentType);
connection.setRequestProperty("SOAPAction", "login");
connection.setRequestProperty("User-Agent", "webastra");
// Set Content Length
connection.setRequestProperty("Content-Length", body.length);
// Silly Java Stuff
connection.setUseCaches (false);
connection.setDoInput(true);
connection.setDoOutput(true);
//Send Post Data
bodyWriter = new java.io.DataOutputStream(connection.getOutputStream());
bodyWriter.writeBytes(body);
bodyWriter.flush ();
bodyWriter.close ();
code = connection.getResponseCode();
}
catch(e) {
throw {message:("Socket Exception or Server Timeout: " + e), code:0};
}
if(code < 200 || code > 299) {
throw {message:("Received non-2XX response: " + code), code:code};
}
var is = null;
try {
importPackage(java.io, java.net, javax.xml.xpath, org.xml.sax);
is = connection.getInputStream();
var str = new String(org.apache.commons.io.IOUtils.toString(is));
var paths = "//serverUrl";
var ips = new InputSource(is);
var xPath = XPathFactory.newInstance().newXPath();
ret = xPath.evaluate(paths, ips);
document.write(" succ:" + ret);
return str;
}
catch(e) {
document.write("Failed to read server response" + e);
}
finally {
try {if(is != null)is.close();} catch (err){}
}
}
post("https://abc.com/services/Soap/c/28.0", {body : "<?xml version=\"1.0\" encoding=\"utf-8\"?> <soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:tns=\"urn:enterprise.soap.sforce.com\"> <soap:Header> <tns:LoginScopeHeader> <tns:organizationId/> </tns:LoginScopeHeader> </soap:Header> <soap:Body> <tns:login> <tns:username>abc@3clogic.com</tns:username> <tns:password>Thursday12gtz</tns:password> </tns:login> </soap:Body> </soap:Envelope>"});
函数帖子(url、选项){
if(options.query){
url+=“?”;
var分隔符=”;
for(在(options.query | |{})中使用var propName){
url+=(delemiter+(propName+“=”+escape(options.query[propName]));
分隔符=“&”;
}
}
document.write(“抓取”+url);
var代码;
var body=options.body;
if(body==null){
抛出{message:“Body是必需的”};
}
试一试{
//开放连接
connection=newjava.net.URL(URL.openConnection();
//设置超时
var timeout=options.timeout!=null?options.timeout:10000;
connection.setReadTimeout(超时);
connection.setConnectTimeout(超时);
//方法==POST
connection.setRequestMethod(“POST”);
//设置内容类型
var contentType=“text/xml;charset=utf-8”;
setRequestProperty(“内容类型”,contentType);
setRequestProperty(“SOAPAction”、“login”);
setRequestProperty(“用户代理”、“webastra”);
//设置内容长度
connection.setRequestProperty(“内容长度”,body.Length);
//愚蠢的Java东西
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(真);
//发送Post数据
bodyWriter=new java.io.DataOutputStream(connection.getOutputStream());
bodyWriter.writeBytes(body);
bodyWriter.flush();
bodyWriter.close();
代码=连接。getResponseCode();
}
捕获(e){
抛出{消息:(“套接字异常或服务器超时:”+e),代码:0};
}
如果(代码<200 | |代码>299){
抛出{message:(“收到的非2XX响应:“+code”),code:code};
}
var=null;
试一试{
importPackage(java.io、java.net、javax.xml.xpath、org.xml.sax);
is=connection.getInputStream();
var str=新字符串(org.apache.commons.io.IOUtils.toString(is));
var path=“//服务器URL”;
var ips=新输入源(is);
var xPath=XPathFactory.newInstance().newXPath();
ret=xPath.evaluate(路径,IP);
文件。写入(“成功:”+ret);
返回str;
}
捕获(e){
document.write(“读取服务器响应失败”+e);
}
最后{
尝试{if(is!=null)is.close();}catch(err){
}
}
职位(”https://abc.com/services/Soap/c/28.0“,{正文:”abc@3clogic.com周四12GTZ“});
post部分是成功的。但是,当我试图在变量ret中检索xml标记“serverUrl”的值时,出现以下错误:
无法读取服务器响应JavaException:javax.xml.xpath.XPathExpressionException:null
我从post检索到的xml是:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="urn:enterprise.soap.sforce.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<loginResponse>
<result>
<metadataServerUrl>
https://na3.salesforce.com/services/Soap/m/28.0/00D50000000IdrE
</metadataServerUrl>
<passwordExpired>false</passwordExpired>
<sandbox>false</sandbox>
<serverUrl>
https://na3.salesforce.com/services/Soap/c/28.0/00D50000000IdrE
</serverUrl>
<sessionId>
00D50000000IdrE!AREAQK4VYXRaHoL_uRvOi.QXXw3ahAt2Cge254wygiW7cr_f6DVa2pDC6g57w5IE
fidAu3ZRsJFBN5Bwb6DVhF18zKFiVVyT
</sessionId>
<userId>00550000001Dd4uAAC</userId>
<userInfo>
<accessibilityMode>false</accessibilityMode>
<currencySymbol>$</currencySymbol>
<orgAttachmentFileSizeLimit>5242880
</orgAttachmentFileSizeLimit>
<orgDefaultCurrencyIsoCode>USD</orgDefaultCurrencyIsoCode>
<orgDisallowHtmlAttachments>false
</orgDisallowHtmlAttachments>
<orgHasPersonAccounts>false</orgHasPersonAccounts>
<organizationId>00D50000000IdrEEAS</organizationId>
<organizationMultiCurrency>false</organizationMultiCurrency>
<organizationName>3CLogic</organizationName>
<profileId>00e500000017al5AAA</profileId>
<roleId xsi:nil="true"/>
<sessionSecondsValid>7200</sessionSecondsValid>
<userDefaultCurrencyIsoCode xsi:nil="true"/>
<userEmail>ramana@3clogic.com</userEmail>
<userFullName>Ramana</userFullName>
<userId>00550Dd4uAAC</userId>
<userLanguage>en_US</userLanguage>
<userLocale>en_US</userLocale>
<userName>raman@gmail.com.com</userName>
<userTimeZone>America/New_York</userTimeZone>
<userType>Standard</userType>
<userUiSkin>Theme3</userUiSkin>
</userInfo>
</result>
</loginResponse>
</soapenv:Body>
</soapenv:Envelope>
https://na3.salesforce.com/services/Soap/m/28.0/00D50000000IdrE
假的
假的
https://na3.salesforce.com/services/Soap/c/28.0/00D50000000IdrE
00D50000000印尼盾!区域QK4Vyxrahol_uRvOi.QXXW3AHAT2CE254WYGIW7CR_f6DVa2pDC6g57w5IE
fidAu3ZRsJFBN5Bwb6DVhF18zKFiVVyT
00550000001Dd4uAAC
假的
$
5242880
美元
假的
假的
00D50000000IdrEEAS
假的
3CLogic
00E5000017AL5AAA
7200
ramana@3clogic.com
拉马纳
00550Dd4uAAC
恩努斯
恩努斯
raman@gmail.com.com
美国/纽约
标准
主题3
当您尝试解析时,输入流
已为“空”(即读取):
is=connection.getInputStream();
var str=新字符串(org.apache.commons.io.IOUtils.toString(is));//var
来自哪里?那不是Java,对吗?