2014-03-03 117 views
5

我试图使用Mozilla /犀牛JS引擎,以测试在命令行中一些SOAP请求。但是,没有任何用于发出请求的正常对象(XMLHttpRequest,HttpRequest)似乎可用。为什么是这样?我可以导入库吗?使用RHINO JS引擎发出HTTP请求

+0

'没有作出请求(XMLHttpRequest的,HttpRequest的)'正常,其中正常的对象?你认为犀牛是什么? JAVASCRIPT不是DOM! XMLHttpRequest是一个DOM API,它与javascript无关,它不是JavaScript规范的一部分,JavaScript引擎不必实现DOM,Rhino不会。 – mpm

+7

为了公平地使用原始的海报,我们可以说几十亿安装的javascript实现,包括每个现代网络浏览器,其中大多数开发者将安装四到五个,大多数计算机至少有一个,90%或更多他们有一个DOM。所以,可以说,当你使用Javascript时,OP提到的对象通常是可用的。这不是一个不寻常的混乱点,可以轻轻纠正。 –

回答

1

你有可能会找到一个库导入,你也可以写自己在Java中,让他们提供给你的犀牛实例,这取决于你如何使用它。请记住Rhino只是一个Javascript语言引擎。它没有DOM,可以这么说,并不具有“网络意识”。

但是,因为听起来你是在做这个测试/实验的目的,而且你可能会更有效率而不必重新发明轮子,所以我强烈建议你只下载Node.js并且看到request module(用于发出HTTP请求)或any of the various SOAP modules

你可以做一吨多用Node.js的,但你也可以使用它作为一个非常简单的转轮Javascript文件也是如此。不管你应该离开犀牛。它已经很老了,并且不再受到真正的支持,特别是现在即使使用JDK8,javax.script支持也会切换到Nashorn引擎。

UPDATE:如果你真的想给它一个去(如果你正在准备猴子与Java左右),你可能看this SO question及其答案。但是除非你是一个受虐狂的人,否则我认为你会走上一条不同的道路更开心。

+1

我实际上是在寻找这个,因为我试图从VMWARE的vCenter Orchestrator进行SOAP调用,并且源使用其SOAP插件不支持的WSDL格式。 VCO提供了Rhino JS引擎,因为它是脚本引擎,所以我认为我可以用这种方式绕过它,但似乎没有。 – etsauer

+0

我第一次没有完全阅读你的评论。嗯。从看他们的插件,不幸的是只提供'更高级别'。你应该联系他们的支持,看看他们是否会提供一个HTTP,而不是只提供专用的SOAP和REST插件。 –

+0

顺便说一句,也许除了传统的支持,你可以看看他们的实验室家伙是否会回应任何事情。这似乎是他们抛出不受支持的小部件的地方 - 也许有人可以帮你一个忙。 [VMWare实验室](https://labs.vmware.com/tag/rest?cat=1) –

0

实际上,我是能够做到这一点使用Orchestrator的5.1与“编脚本任务”对象和的zabbix API接口:

var urlObject = new URL(url); 
var jsonString = JSON.stringify({ jsonrpc: '2.0', method: 'user.login', params: { user: 'username', password: 'password' }, id: 1 }); 

urlObject.contentType = "application/json"; 
result = urlObject.postContent(jsonString); 

System.log(result); 

var authenticationToken = JSON.parse(result).result; 
4

我能得到它仅使用犀牛用下面的代码工作。

var post = new org.apache.commons.httpclient.methods.PostMethod("https://someurl/and/path/"); 
var client = new org.apache.commons.httpclient.HttpClient(); 

// ---- Authentication ---- // 
var creds = new org.apache.commons.httpclient.UsernamePasswordCredentials("username", "password"); 
client.getParams().setAuthenticationPreemptive(true); 
client.getState().setCredentials(org.apache.commons.httpclient.auth.AuthScope.ANY, creds); 
// -------------------------- // 

post.setRequestHeader("Content-type", "application/xml"); 
post.setRequestEntity(new org.apache.commons.httpclient.methods.StringRequestEntity(buildXML(), "text/plain", "ASCII")); 

var status = client.executeMethod(post); 
var br = new java.io.BufferedReader(new java.io.InputStreamReader(post.getResponseBodyAsStream())); 
var response = ""; 
var line = br.readLine(); 
while(line != null){ 
    response = response + line; 
    line = br.readLine(); 
} 

post.releaseConnection();