2017-09-13 128 views
0

我們將數據作爲XML使用,並且存在多種格式化XSL樣式。在IE中它一直工作得很好。使用Java在HTML中轉換XML + XSL

然後,我們需要在Chrome中顯示與HTML相同的內容。所以,我們在服務器端(Java)找到一個API來將XML + XSL轉換爲HTML。

public static String convertXMLXSL(String xml, String xsl) throws SQLException { 
     System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl"); 
     TransformerFactory tFactory = TransformerFactory.newInstance(); 

     String html = ""; 

     try { 
      try { 
       StreamResult result = new StreamResult(new StringWriter()); 
       **Transformer trans = tFactory.newTransformer(new StreamSource(new ByteArrayInputStream(xsl.getBytes("utf-8")))); 
       trans.transform(new StreamSource(new ByteArrayInputStream(xml.getBytes("utf-8"))), result);** 
       html = result.getWriter().toString(); 
      } catch (TransformerException te) { 
       te.printStackTrace(); 
      } 
     } catch (Exception e) { 
      AppendExceptionToLog(e); 
     } 
     return html; 
    } 

但是,現在後的某個時間,我們看到被封鎖在trasformjavax.xml.transform.Transformer中的方法

Sep 12, 2017 12:07:49 PM org.apache.catalina.valves.StuckThreadDetectionValve notifyStuckThreadDetected 
WARNING: Thread "http-8080-12" (id=15800) has been active for 6,516 milliseconds (since 9/12/17 12:07 PM) to serve the same request for 
and may be stuck (configured threshold for this StuckThreadDetectionValve is 5 seconds). 
There is/are 3 thread(s) in total that are monitored by this Valve and may be stuck. 
java.lang.Throwable 
    at org.apache.xpath.axes.AxesWalker.getNextNode(AxesWalker.java:333) 
    at org.apache.xpath.axes.AxesWalker.nextNode(AxesWalker.java:361) 
    at org.apache.xpath.axes.WalkingIterator.nextNode(WalkingIterator.java:192) 
    at org.apache.xpath.axes.NodeSequence.nextNode(NodeSequence.java:281) 
    at org.apache.xpath.axes.NodeSequence.runTo(NodeSequence.java:435) 
    at org.apache.xpath.axes.NodeSequence.setRoot(NodeSequence.java:218) 
    at org.apache.xpath.axes.LocPathIterator.execute(LocPathIterator.java:210) 
    at org.apache.xpath.XPath.execute(XPath.java:335) 
    at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:278) 
    at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:246) 
    at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411) 
    at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1374) 
    at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411) 
    at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2281) 
    at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1367) 
    at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:709) 
    at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1284) 
    at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1262) 
    at Util.processXMLXSL(Util.java:3364) 

這裏是一些線程轉儲,我想知道。

1)我們有沒有其他已知的實現在服務器端做同樣的事情?

2)我應該考慮使用客戶端方法使用Mozilla的XSLTProcessor

+0

時是否與輸入XML獨立運行XSL提供正確的HTML輸出,說在Eclipse IDE? –

+0

問題不在於輸出。它與代碼所花費的時間。 –

回答