2016-10-13 9 views
0

Rhino内からSOAP WebサービスレスポンスとファイルベースのXSLTの入力を使用してServerSideトランスフォームを実行しようとしています。私はJAVA/JSの経験はほとんどありませんが、成長しています。私が見つけたサンプルをXMLベースの入力を使ってw/sのSOAPストリームに変換する方法のいくつかのポインタを探しています。Rhino内からSOAP Webサービスの応答を使用してServerSide XSLTを処理する方法は?

マイ制約:

  1. 形質転換は、サーバサイドを実行する必要があり、着信XMLは、私が正常だということを、Webサービス(SOAP)、応答の中に含まれている
  2. Rhinoの
  3. 内のクライアントで
  4. が行われなければなりません私のJS
  5. XSLTに入ることは、私が追跡することができた

ローカルファイル内にあります次のソース/ポインタを使用していますが、この例のようにファイルと比較して私のサーバーからxml石けん入力を取得する方法を判断することはできません。

http://simonkissane.blogspot.ca/2013/06/xml-pretty-printing-and-xslt-processing.html

私のJSが非常に簡単です、ワット/ sの応答を得る部分は、単にサイ

あるJaggeryjs.orgを、使用していることに注意してください私のSOAP応答が動作

、印刷(getBeerList())私が期待するXMLを返します。

私は失敗します:var dsDoc = new javax.xml.transform.dom.DOMSource(doc);関数applyXSLT内で次のエラーが発生しました。

ERROR {org.jaggeryjs.scriptengine.engine.RhinoEngine} - org.mozilla.javascript.JavaScriptException:InternalError: "javax.xml.transform.dom.DOMSource"のJavaコンストラクタ引数 "string"が見つからない(/TestJaggery_1//index.jag#90)(/TestJaggery_1//index.jag#108)

JSコード:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    //stuff removed 
</head> 

<body> 
     <!-- Le javascript 
     ================================================== --> 
     <!-- Placed at the end of the document so the pages load faster --> 
     <script src="js/jquery.min.js"></script> 
     <script src="js/bootstrap.js"></script> 
     <script src="js/util.js"></script> 
</body> 

<% 

function getBeerList() { 
     var log = new Log(); 
     var ws = require('ws'); 

     var mylist = new ws.WSRequest(); 
     var options = new Array(); 
     options.useSOAP = 1.2; 
     options.useWSA = 1.0; 
     options.action = "getAll"; 
     var payload = null; 
     var result; 

     try { 
      mylist.open(options, "http://192.168.1.204:9764/services/TestSheet/", false); 
      mylist.send(payload); 
      result = mylist.responseText; 
     } catch (e) 
     { 
      log.error(e.toString()); 
      print(mylist.error) 
      return e.toString(); 
     } 
     return result; 
    } 

    print(getBeerList()); 

xmlToString = function(doc) { 
    var domreg = org.w3c.dom.bootstrap.DOMImplementationRegistry.newInstance(); 
    var ls = domreg.getDOMImplementation("LS"); 
    var w = ls.createLSSerializer(); 
    w.getDomConfig().setParameter("format-pretty-print", true); 
    var lsout = ls.createLSOutput(); 
    var out = new java.io.StringWriter(); 
    lsout.setCharacterStream(out); 
    w.write(doc, lsout); 
    out.close(); 
    return "" + out.toString(); 
}; 

getDocBuilder = function() { 
    var dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance(); 
    dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); 
    dbf.setNamespaceAware(true); 
    return dbf.newDocumentBuilder(); 
}; 

loadXMLFile = function(file) { 
    var inp = new java.io.File(file); 
    return getDocBuilder().parse(inp); 
}; 

applyXSLT = function(doc, xslt) { 
    //the following line is failing 
    var dsDoc = new javax.xml.transform.dom.DOMSource(doc); 
    var dsXSLT = new javax.xml.transform.dom .DOMSource(xslt); 
    var tf = javax.xml.transform.TransformerFactory.newInstance(); 
    var xf = tf.newTransformer(dsXSLT); 
    var out = getDocBuilder().newDocument(); 
    var drOut = new javax.xml.transform.dom.DOMResult(out); 
    xf.transform(dsDoc, drOut); 
    return out; 
}; 

try { 
    //doc is where I am unsure of how to insert my SOAP response 'getBeerList()' 
    var doc = getBeerList(); 
    var xslt = loadXMLFile(PathtoMyLocalFile); 
    var out = applyXSLT(doc, xslt); 
    println(xmlToString(out)); 
} catch (e) { 
    if (e.javaException) 
     e.javaException.printStackTrace(); 
    throw e; 
} 

%> 

</html> 

答えて

関連する問題