2014-06-17 7 views
0

모두에게 오류가 발생했습니다.Batik 및 Itext를 사용하여 pdf로 vaadin 차트를 내보내는 중 오류가 발생했습니다.

차트를 pdf 파일로 내보낼 때이 오류가 발생합니다. 예제를 Itext 사이트에서 가져 와서 코드에 구현했습니다. 이는 아래의 수출을

else if (isGrafico(componente)) {  
       System.out.println("============= Encontrou um Grafico"); 
       Configuration conf = ((GraficoComp) componente) 
         .getGraficoGerado().getConfiguration(); 
       String svgStr = SVGGenerator.getInstance().generate(conf); 
       System.out.println(svgStr); 

       /** The SVG document factory. */ 
       SAXSVGDocumentFactory factory; 
       /** The SVG bridge context. */ 
       BridgeContext ctx; 
       /** The GVT builder */ 
       GVTBuilder builder; 

       String parser = XMLResourceDescriptor.getXMLParserClassName(); 
       factory = new SAXSVGDocumentFactory(parser); 

       UserAgent userAgent = new UserAgentAdapter(); 
       DocumentLoader loader = new DocumentLoader(userAgent); 
       // Ok ========================================================= 
       // \/ Error happens in this line 
       ctx = new BridgeContext(userAgent, loader); 
       ctx.setDynamicState(BridgeContext.DYNAMIC); 

       builder = new GVTBuilder(); 

       // ============================================= 
       PdfContentByte cb = writer.getDirectContent(); 
       PdfTemplate chart = cb.createTemplate(900, 900); 
       drawSvg(factory,builder,ctx,chart, svgStr); 
       cb.addTemplate(chart, 0, 0); 

을 수행하고 코드의 조각 인 오류입니다 :

2014-06-17T13:46:08.623+0000|WARNING: ApplicationDispatcher[/AmbienteRelatorio] PWC1231: Servlet.service() for servlet Ambienterelatorio Application threw exception 
java.lang.NoSuchMethodError: org.json.JSONObject.put(Ljava/lang/String;Ljava/util/Collection;)Lorg/json/JSONObject; 
at com.vaadin.server.VaadinService.createCriticalNotificationJSON(VaadinService.java:1574) 
at com.vaadin.server.VaadinService.handleExceptionDuringRequest(VaadinService.java:1424) 
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1402) 
at com.vaadin.server.VaadinPortlet.handleRequest(VaadinPortlet.java:435) 
at com.vaadin.server.VaadinPortlet.serveResource(VaadinPortlet.java:538) 
at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:118) 
at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:71) 
at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:93) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) 
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72) 
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:70) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) 
at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:785) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:649) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:483) 
at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:454) 
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300) 
at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:634) 
at com.liferay.portlet.InvokerPortletImpl.invokeResource(InvokerPortletImpl.java:746) 
at com.liferay.portlet.InvokerPortletImpl.serveResource(InvokerPortletImpl.java:503) 
at com.liferay.portal.action.LayoutAction.processPortletRequest(LayoutAction.java:941) 
at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:664) 
at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:244) 
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) 
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) 
at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:174) 
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) 
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) 
at com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:533) 
at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:510) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 

답변

0

이는 iText를 질문하지 않습니다. 귀하의 stacktrace는 어디서나 iText를 참조하지 않습니다. 그것은 Liferay, Struts 및 Vaadin을 가리키며 문제에 대해 알려줍니다. http://www.json.org/

내가 작성한 예제를 참조하고 있지만 AFAIK는 어디에서나 해당 예제에서 JSON을 사용하지 않습니다. NoSuchMethodError은 다음과 같은 여러 가지 원인으로 인해 발생할 수 있습니다.

  1. 존재하지 않는 방법에 대한 참조가 있습니다. 이는 프로그래밍 오류입니다. 존재하지 않는 메소드를 사용하면 일반적으로 코드를 컴파일 할 수 없습니다.
  2. 동일한 제품의 두 가지 다른 병에있는 방법에 대한 참조가 있습니다. 모호성 때문에 JVM은 원하는 메소드를 알지 못합니다. 이 경우 CLASSPATH를 정리해야합니다.
  3. 존재했던 메소드에 대한 참조가 있지만 변경되었습니다. 이 경우 모든 코드를 다시 컴파일해야합니다.

사례 3과 관련있다. 예를 들어 메소드 막대()를 사용하여 Foo 클래스를 가져온다.

public class Foo { 
    public void bar() {} 
} 

응용 프로그램에서이 클래스를 사용하고 있습니다.

Foo foo = new Foo(); 
foo.bar(); 

지금 갑자기이 같은 bar() 방법 변경 : 당신이 Foo 클래스가 들어있는 항아리를 교체 할 경우

public class Foo { 
    public int bar() { return 0; } 
} 

, 응용 프로그램은 메소드의 서명이 변경 NoSuchMethodError 때문에 발생합니다. 이 방법이 있기 때문에 혼란 스러울 수 있습니다. 응용 프로그램이 대신 void bar()을 찾고 있기 때문에 응용 프로그램에서 찾을 수없는 것입니다.