Giter Site home page Giter Site logo

anychart / export-server Goto Github PK

View Code? Open in Web Editor NEW
20.0 21.0 6.0 17.51 MB

Export Server is a Java based server intended for exporting charts in .pdf, .jpg, .png, .svg, .csv, .xslx, .json and .xml formats

Home Page: http://export.anychart.com/status

License: Apache License 2.0

Clojure 98.91% CSS 0.64% HTML 0.45%

export-server's Introduction

AnyChart - Robust JavaScript/HTML5 Chart library for any project

AnyChart Export Server

AnyChart Export Server is a tool that is helps to export charts to PNG, JPG, PDF, SVG, CSV, Excel, JSON, and XML. You can read the full description in AnyChart Export Server Documentation.

Setup

Export server can use PhantomJS, headless Firefox or headless Chrome/Chromium.

# use -e or --engine flag to specify browser engine
java -jar anychart-export.jar cmd -e firefox --script "var chart = anychart.line([1,2,5]); chart.container('container'); chart.draw();"

Default browser engine is PhantomJS.

If you need to take a screenshot of a page on the Internet or of a local HTML file, you can just use Chrome or Firefox in headless mode without AnyChart Export Server. You can read about that headless Chrome documentation, for Chrome and in headless Firefox documentation, for Firefox. Don't forget to use file:/// prefix for rendering local HTML files.

PhantomJS install

Download and install PhantomJS to you PC from the PhantomJS official site.

Add PhantomJS binary to the PATH.

Check if it works properly:

$ phantomjs -v
2.1.1

Firefox install

Install Firefox browser (version 56.0 and above).

For Debian-based Linux distros:

$ sudo apt-get update && sudo apt-get install firefox -y

To check Firefox version:

$ firefox -v
Mozilla Firefox 60.0.1

To check if the browser works properly:

$ firefox -headless -screenshot https://developer.mozilla.com

A screenshot of Mozilla site must appear in your working directory.

Install geckodriver. For Mac, use:

$ brew install geckodriver

If you use Linux or Windows, you can download it from the geckodriver official site

Add it to the PATH.

To check if it is installed properly, use the next command:

$ geckodriver --version
geckodriver 0.19.1

Now you are ready to lauch the AnyChart Export Server.

Chrome/Chromium install

Install Chrome or Chromium browser (version 60.0 and above).

For Debian-based Linux distros we suggest to install Chromium:

$ sudo apt-get update && sudo apt-get install chromium-browser -y

To check Chromium version, type:

$ chromium-browser --version
Chromium 66.0.3359.181 Built on Ubuntu , running on Ubuntu 16.04

To check the browser works properly, use:

$ chromium-browser --headless --no-sandbox --disable-gpu http://google.com   

A screenshot of the Google site must appear in your working directory.

Install chromedriver. For Mac, use:

$ brew install chromedriver

If you use Linux or Windows, download it from the chromedriver official site.

Add the binary to the PATH.

To check if it is installed properly, use:

$ chromedriver -v
ChromeDriver 2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb)

Now you are ready to launch the AnyChart Export Server.

Requests

AnyChart Export Server supports the following requests:

URL Type Description
/status GET or POST Server status
/png POST Export to PNG
/jpg POST Export to JPG
/svg POST Export to SVG
/pdf POST Export to PDF
/xml POST Export to XML
/json POST Export to JSON
/csv POST Export to CSV
/xlsx POST Export to XLSX
/sharing/twitter POST Twitter Sharing request
/sharing/twitter_oauth GET Twitter Sharing OAuth callback
/sharing/twitter_confirm POST Twitter Sharing posting confirmation

Typical Export and Twitter Sharing request contains the parameters listed below:

Parameter Type Default Description
data required - script or SVG that should be transformed into a picture
data-type required - a field that contains the information about the data, it might be "script" or "svg"
response-type required - a field that tells how to export the result (file or as base64)
file-name optional anychart file name
save optional - if it presents, request returns URL of a saved image
container-id optional container div container id
container-width optional 100% div container width
container-height optional 100% div container height
width optional 1024 image width
height optional 800 image height
quality optional 1 picture quality
force-transparent-white optional false make the background white or leave it transparent
pdf-size optional - the *.pdf-document sheet size
pdf-x optional 0 x of the chart in the *.pdf document
pdf-y optional 0 y of the chart in the *.pdf document
pdf-width optional 595 pdf width
pdf-height optional 842 pdf height
landscape optional false the document orientation

Config file format

AnyChart Export Server provides an ability to pass all parameters in a config file using TOML format:

# can be "server" or "cmd"
mode = "server"
engine = "firefox"

[server]
port = 80
host = "0.0.0.0"
allow-scripts-executing = false
log = "/path/to/log/file"

[server.images]
# folder to save images
folder = "/export-server/shared"
# prefix which will be returned when saving image
prefix = "http://static.example.com/shared/"

[server.sharing]
# MySQL settings
port = 3306
db = "shared_db"
user = "export_server_user"
password = "export_server_password"

[server.sharing.twitter]
# settings from twitter app settings for sharing in Twitter
key = "key"
secret = "secret"
callback = "http://example.com/sharing/twitter_oauth"

[cmd] 
# here you can pass cmd options for mode = "cmd"
script = "var chart = anychart.line([1,2,5]); chart.container('container'); chart.draw();" 
output-file = "anychart"
output-path = ""
container-width = "1024px"
container-height = "800px"
container-id = "container"
input-file = "file.name"
type = "png"
image-width = 1024
image-height = 800
force-transparent-white = false
pdf-size = "a4"
pdf-x = 0
pdf-y = 0
pdf-width  = 500
pdf-height = 500
jpg-quality = 1

You can pass a config file with -C option, like this:

java -jar export-server.jar -C settings.toml

Sharing

The AnyChart Export Server provides an ability to share chart images in social networks, such as Facebook, LinkedIn, Pinterest and Twitter. When you use the Export Server on your own server and you want the sharing to work properly, you should set up --saving-folder and --saving-prefix. The first parameter is the path to the folder where images will be stored. The second parameter is the URL prefix which will be concatenated with a shared image name and returned to a user. You should provide the access to shared image through that URL by setting up Nginx, for example.

Sharing on Facebook, LinkedIn, and Pinterest

Sharing on Facebook, LinkedIn, and Pinterest is implemented with the help of the commands for saving images. These social networks get the prepared picture via the link and just allow the user to post it on the page.

Sharing on Twitter

Sharing images on Twitter is implemented with the AnyChart Twitter app. It requires MySQL database to be set up and uses three types of requests.

/sharing/twitter

First of all, the user sends a request to /sharing/twitter that contains SVG or script from which the image will be generated and posted on the page - the request should contain the same parameters as a request to /png URL does.

There are two options here: the user is authorized in the AnyChart Twitter application or not.

If the user isn't authorized, the Twitter Authorization dialog will be displayed. The user should confirm that he gives the app the rights to post the image. After that, the user will be redirected to the /sharing/twitter_oauth callback.

/sharing/twitter_oauth

This request accepts oauth_token and oauth_verifier parameters, you can read about OAuth here. In the handler of /sharing/twitter_oauth request, the Export Server gets such params as oauth_token, oauth_token_secret, user_id, screen_name, image_url (user picture) and user_name and saves them to the MySQL database. After that, the dialog window of posting images will be displayed.

If the user is already authorized in the app, the posting dialog will be displayed immediately. When the user confirms to post the image and clicks the TWEET button, there will be a request to /sharing/twitter_confirm .

/sharing/twitter_confirm

This request should contain Twitter message parameter only - a string of no more than 140 characters. In the handler of /sharing/twitter_confirm request, the Export Server uploads the shared image with Twitter API and posts a new tweet with that image.

Note: the /sharing/twitter_oauth and /sharing/twitter_confirm requests are used inside Export server, which means you don't need to send anything by yourself there.

If you want Twitter sharing to work through your server, you should:

  1. create your own Twitter App and provide twitter_key, twitter_secret and twitter_callback (last path of which is always /sharing/twitter_oauth) to the Export Server.
  2. setup a MySQL database for Twitter sharing using SQL scheme.
  3. setup a Twitter sharing URL separately when setting the anychart.export.server() URL:
anychart.exports.twitter(
    "http://your.export.server.url/sharing/twitter", 
    "1000",    
    "500"
);

For more details check out AnyChart Sharing API.

License

© AnyChart.com - JavaScript charts. Export Server released under the Apache 2.0 License.

export-server's People

Contributors

chidori avatar ilevd avatar imaximova avatar loki20beta avatar romanlubushkin avatar undead-voron avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

export-server's Issues

timeline not in export bundle?

Hi,
I'm using anychart export server, and most things work great. However, the timeline chart does not.
I'm getting "undefined is not a function (evaluating 'anychart.timeline()')" (see full log below)

I'm using data-type=script, to run the javascript on the export server and return SVGs to my app.
This example is using the Timeline example script from

https://playground.anychart.com/docs/v8/samples/BCT_Timeline_Chart_01

Is there way to configure the export server where to find the anychart JS files and which ones to use?

java_1_d7580c54eaa5 | [INFO  - 2022-10-02T23:12:45.107Z] Session [f578c350-42a6-11ed-8a2b-bf610ea5d015] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1","webSecurityEnabled":true}
java_1_d7580c54eaa5 | [INFO  - 2022-10-02T23:12:45.108Z] Session [f578c350-42a6-11ed-8a2b-bf610ea5d015] - page.customHeaders:  - {}
java_1_d7580c54eaa5 | 22-10-02 23:12:48 23152635c85e INFO [export-server.utils.logging:8] - Error occurred during processing /svg
java_1_d7580c54eaa5 |   Error message:
java_1_d7580c54eaa5 |  Failed to execute Script
java_1_d7580c54eaa5 | {"errorMessage":"undefined is not a function (evaluating 'anychart.timeline()')","request":{"headers"...
java_1_d7580c54eaa5 | Command duration or timeout: 109 milliseconds
java_1_d7580c54eaa5 | Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
java_1_d7580c54eaa5 | System info: host: '23152635c85e', ip: '172.19.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '5.10.16.3-microsoft-standard-WSL2', java.version: '1.8.0_302'
java_1_d7580c54eaa5 | Driver info: org.openqa.selenium.phantomjs.PhantomJSDriver
java_1_d7580c54eaa5 | Capabilities [{applicationCacheEnabled=false, rotatable=false, handlesAlerts=false, databaseEnabled=false, version=2.1.1, platform=LINUX, browserConnectionEnabled=false, proxy={proxyType=direct}, nativeEvents=true, acceptSslCerts=false, driverVersion=1.2.0, locationContextEnabled=false, webStorageEnabled=false, browserName=phantomjs, takesScreenshot=true, driverName=ghostdriver, javascriptEnabled=true, cssSelectorsEnabled=true}]
java_1_d7580c54eaa5 | Session ID: f578c350-42a6-11ed-8a2b-bf610ea5d015
java_1_d7580c54eaa5 |   Request's parameters:
java_1_d7580c54eaa5 | container-height: 400
java_1_d7580c54eaa5 | container-width: 800
java_1_d7580c54eaa5 | data-type: script
java_1_d7580c54eaa5 | data: var any_container = "container_51ec4e";
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     // create data
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     var rangeData1 = [
java_1_d7580c54eaa5 |       ["Task 1", Date.UTC(2004,0,4), Date.UTC(2004,7,1)],
java_1_d7580c54eaa5 |       ["Task 2", Date.UTC(2004,7,1), Date.UTC(2005,8,10)]
java_1_d7580c54eaa5 |     ];
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     var rangeData2 = [
java_1_d7580c54eaa5 |       ["New Task 1", Date.UTC(2005,10,1), Date.UTC(2006,5,1)],
java_1_d7580c54eaa5 |       ["New Task 2", Date.UTC(2006,5,15), Date.UTC(2006,11,1)]
java_1_d7580c54eaa5 |     ];
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     var momentData1 = [
java_1_d7580c54eaa5 |       [Date.UTC(2004,2,21), "Meeting 1"],
java_1_d7580c54eaa5 |       [Date.UTC(2005,3,19), "Meeting 2"],
java_1_d7580c54eaa5 |       [Date.UTC(2006,1,1),  "Meeting 3"]
java_1_d7580c54eaa5 |     ];
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     var momentData2 = [
java_1_d7580c54eaa5 |       [Date.UTC(2004,5,12), "Training 1"],
java_1_d7580c54eaa5 |       [Date.UTC(2005,5,1),  "Training 2"],
java_1_d7580c54eaa5 |       [Date.UTC(2006,1,26), "Training 3"]
java_1_d7580c54eaa5 |     ];
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     // create a chart
java_1_d7580c54eaa5 |     var chart = anychart.timeline();
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     // prevent zooming the chart with the mouse wheel
java_1_d7580c54eaa5 |     chart.interactivity().zoomOnMouseWheel(false);
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     // create the first range series, set the data and name
java_1_d7580c54eaa5 |     var rangeSeries1 = chart.range(rangeData1);
java_1_d7580c54eaa5 |     rangeSeries1.name("Tasks");
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     // create the second range series, set the data and name
java_1_d7580c54eaa5 |     var rangeSeries2 = chart.range(rangeData2);
java_1_d7580c54eaa5 |     rangeSeries2.name("New Tasks");
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     // create the first moment series, set the data and name
java_1_d7580c54eaa5 |     var momentSeries1 = chart.moment(momentData1);
java_1_d7580c54eaa5 |     momentSeries1.name("Meetings");
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     // create the second moment series, set the data and name
java_1_d7580c54eaa5 |     var momentSeries2 = chart.moment(momentData2);
java_1_d7580c54eaa5 |     momentSeries2.name("Trainings");
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     // set the chart title
java_1_d7580c54eaa5 |     chart.title("Timeline Chart: Basic Sample");
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     // set the container id
java_1_d7580c54eaa5 |     chart.container("container");
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |     // initiate drawing the chart
java_1_d7580c54eaa5 |     chart.draw();
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |
java_1_d7580c54eaa5 |

problems with default image size

Hi!
i have a problem with image size,
i set the witdth an heigth in the container but allways get an image with 1024x800 size.

chart = anychart.pie3d([['Horas Normales',3468893.744400],['Horas Extras',1220272.28],['Horas Contratadas',254691.069600],['Otros Costos',315363.49],]);
chart.background().stroke("1 black");
chart.radius('55%25').innerRadius('10%25');
var legend = chart.legend();
var legendTitle = chart.legend().title();
legendTitle.useHtml(true);
legendTitle.enabled(true);
legendTitle.text("Costos (Historico)");
legendTitle.fontSize(12);
legendTitle.vAlign("top");
legend.itemsLayout("vertical");
legend.position("left");
legend.align("top");
legend.fontSize(12);
legend.width(180);
legend.positionMode("outside");
chart.labels().fontSize(15);
chart.container('container').width(450);
chart.container('container').height(290);
chart.draw();

costo_historico

Failed to execute Startup Script Read timed out errors

Hi,

We are occasionally getting a read timed out error under load. Is there a way we can increase the timeout or prevent this from happening? The error in the logs look like the following


[export-server.web.logging:8] - Error occurred during processing /png
java: Error message:
Failed to execute Startup Script
Read timed out
Request's parameters:
java: container-width: 1024
java: width: 1024
java: container-height: 800
java: height: 800
responseType: file
dataType: script

data-type must be one of the values: svg, script from php

I receive the following error when executing the following code in php

{
"error": "data-type must be one of the values: svg, script"
}

This is my code using the sample in (https://docs.anychart.com/Common_Settings/Server-side_Rendering)

when i run in console, with curl, its Ok. but from php give an error.

<?php
$params=[
	'responseType'=>'file', 
	'dataType'=>'script',
	'data'=>'var chart = anychart.line([1,2,5]); chart.container("container"); chart.draw();',
	];

$headers = array('Content-Type: application/x-www-form-urlencoded');
	
$defaults = array(
		CURLOPT_URL=>'http://localhost:3000/jpg',
		CURLOPT_POST => true,
		CURLOPT_POSTFIELDS => $params,
		CURLOPT_HTTPHEADER=> $headers
);

$ch = curl_init();
curl_setopt_array($ch, $defaults);
$picture = curl_exec($ch);
curl_close($ch);

$fh = fopen('filename.jpg', 'w');
fwrite($fh, $picture);
fclose($fh);
?>

"data-type must be one of the values: svg, script"

When I start the java server locally, and I make a post request, I get the following error:

Debug: internal, implementation, error Error: Error: got 400 response

here is my post request:

req.headers({
  "postman-token": "140201a0-f88d-e1ce-71f7-7cc5db863713",
  "content-type": "application/x-www-form-urlencoded",
  "cookie": "__lc.visitor_id.1006188=S1487415976.48ea09b190; autoinvite_callback=true; _cio=2ffabb54-4f57-e1dd-8803-0f68e415a1aa; user_segment=Prospect; lc_invitation_opened=opened; GAUI=58a82aa9b9dea; AB_TEST_VAR=a; _ga=GA1.2.928524982.1487415977; lc_window_state=minimized; __insp_wid=600032561; __insp_slim=1488518022481; __insp_nv=true; __insp_targlpu=https%3A%2F%2Fdocs.anychart.com%2F7.8.0%2FCommon_Settings%2FServer-side_Rendering; __insp_targlpt=Server-side%20Rendering%20%7C%20Common%20Settings%20%7C%20AnyChart%20Documentation%20ver.%207.8.0; __insp_norec_sess=true; _hp2_id.3941342819=%7B%22userId%22%3A%228903324589099993%22%2C%22pageviewId%22%3A%228322977263861317%22%2C%22sessionId%22%3A%221229000451437970%22%2C%22identity%22%3Anull%2C%22trackerVersion%22%3A%223.0%22%7D; _hp2_ses_props.3941342819=%7B%22r%22%3A%22http%3A%2F%2Fplayground.anychart.com%2Fgallery%2F7.13.0%2FQuadrant_Charts%2FBI_Services_Comparison%22%2C%22ts%22%3A1488519039354%2C%22d%22%3A%22playground.anychart.com%22%2C%22h%22%3A%22%2Fgallery%2F7.13.0%2FPie_and_Donut_Charts%2FPie_Chart%22%7D",
  "accept-language": "en-US,en;q=0.8",
  "accept-encoding": "gzip, deflate",
  "referer": "http://playground.anychart.com/gallery/7.13.0/Pie_and_Donut_Charts/Pie_Chart",
  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
  "upgrade-insecure-requests": "1",
  "origin": "http://playground.anychart.com",
  "cache-control": "no-cache",
  "pragma": "no-cache",
  "content-length": "13527",
  "connection": "keep-alive",
  "host": "export.anychart.com"
})

I'm just proxying to the export-server hosted on anycharts

when i try this same request in postman, it returns an image.

does anybody know what's happening?

Java 11 compatibility

I am trying to build a Docker image of the Anychart server based on Java 11, which is LTS and better suited for security-critical scenarios unlike Java 8.

Here is my Dockerfile

FROM ubuntu AS phantomjs

RUN apt update && apt install wget -y

RUN wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
RUN tar -xjf phantomjs-2.1.1-linux-x86_64.tar.bz2

#RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.30.0/geckodriver-v0.30.0-linux64.tar.gz
#RUN tar -zxf geckodriver-v0.30.0-linux64.tar.gz

#RUN wget https://chromedriver.storage.googleapis.com/94.0.4606.41/chromedriver_linux64.zip
#RUN tar -zxf chromedriver_linux64.zip

RUN wget https://static.anychart.com/cdn/export-server/export-server.jar
RUN wget https://repo1.maven.org/maven2/xerces/xercesImpl/2.12.2/xercesImpl-2.12.2.jar
RUN wget https://github.com/AnyChart/export-server/blob/master/lib/org.eclipse.wst.xml.xpath2.processor_1.1.0.jar
RUN wget https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar
RUN wget https://repo1.maven.org/maven2/org/glassfish/jaxb/jaxb-runtime/3.0.2/jaxb-runtime-3.0.2.jar
RUN wget https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api/3.0.1/jakarta.xml.bind-api-3.0.1.jar
#RUN wget http://www.jabylon.org/maven/org/eclipse/wst/xml/xpath2/processor/2.1.100/processor-2.1.100.jar

FROM openjdk:11-jre-slim

COPY --from=phantomjs /phantomjs-2.1.1-linux-x86_64 /usr/lib/
COPY --from=phantomjs /*.jar /app/
COPY settings.toml /app/
RUN ln -s /usr/lib/phantomjs-2.1.1-linux-x86_64 /usr/lib/phantomjs
RUN ln -s /usr/lib/phantomjs/bin/phantomjs /usr/bin/phantomjs

WORKDIR /app

CMD java -Dphantomjs.binary.path=/usr/bin/phantomjs -jar /app/export-server.jar -C /app/settings.toml

settings.toml

# can be "server" or "cmd"
mode = "server"
engine = "phantom"

[server]
port = 8081
host = "127.0.0.1"
allow-scripts-executing = true
log = "/var/log/export-server.log"

[server.sharing]
# MySQL settings
#port = 3306
#db = "shared_db"
#user = "export_server_user"
#password = "export_server_password"

[server.sharing.twitter]
# settings from twitter app settings for sharing in Twitter
#key = "key"
#secret = "secret"
#callback = "http://example.com/sharing/twitter_oauth"

The build succeeds, but I get a class error on startup

Exception in thread "main" java.lang.ExceptionInInitializerError

at java.base/java.lang.Class.forName0(Native Method)

at java.base/java.lang.Class.forName(Unknown Source)

at clojure.lang.RT.classForName(RT.java:2168)

at clojure.lang.RT.classForName(RT.java:2177)

at clojure.lang.RT.loadClassForName(RT.java:2196)

at clojure.lang.RT.load(RT.java:443)

at clojure.lang.RT.load(RT.java:419)

at clojure.core$load$fn__5677.invoke(core.clj:5893)

at clojure.core$load.invokeStatic(core.clj:5892)

at clojure.core$load.doInvoke(core.clj:5876)

at clojure.lang.RestFn.invoke(RestFn.java:408)

at clojure.core$load_one.invokeStatic(core.clj:5697)

at clojure.core$load_one.invoke(core.clj:5692)

at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)

at clojure.core$load_lib.invokeStatic(core.clj:5736)

at clojure.core$load_lib.doInvoke(core.clj:5717)

at clojure.lang.RestFn.applyTo(RestFn.java:142)

at clojure.core$apply.invokeStatic(core.clj:648)

at clojure.core$load_libs.invokeStatic(core.clj:5774)

at clojure.core$load_libs.doInvoke(core.clj:5758)

at clojure.lang.RestFn.applyTo(RestFn.java:137)

at clojure.core$apply.invokeStatic(core.clj:650)

at clojure.core$use.invokeStatic(core.clj:5860)

at clojure.core$use.doInvoke(core.clj:5860)

at clojure.lang.RestFn.invoke(RestFn.java:436)

at export_server.core$loading__5569__auto____4031.invoke(core.clj:1)

at export_server.core__init.load(Unknown Source)

at export_server.core__init.<clinit>(Unknown Source)

at java.base/java.lang.Class.forName0(Native Method)

at java.base/java.lang.Class.forName(Unknown Source)

at clojure.lang.RT.classForName(RT.java:2168)

at clojure.lang.RT.classForName(RT.java:2177)

at clojure.lang.RT.loadClassForName(RT.java:2196)

at clojure.lang.RT.load(RT.java:443)

at clojure.lang.RT.load(RT.java:419)

at clojure.core$load$fn__5677.invoke(core.clj:5893)

at clojure.core$load.invokeStatic(core.clj:5892)

at clojure.core$load.doInvoke(core.clj:5876)

at clojure.lang.RestFn.invoke(RestFn.java:408)

at clojure.lang.Var.invoke(Var.java:379)

at clojure.lang.Util.loadWithClass(Util.java:250)

at export_server.core.<clinit>(Unknown Source)

Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter

at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)

at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)

at java.base/java.lang.ClassLoader.loadClass(Unknown Source)

at java.base/java.lang.Class.forName0(Native Method)

at java.base/java.lang.Class.forName(Unknown Source)

at clojure.lang.RT.classForName(RT.java:2168)

at clojure.lang.RT.classForNameNonLoading(RT.java:2181)

at org.httpkit.server$loading__5569__auto____5568.invoke(server.clj:1)

at org.httpkit.server__init.load(Unknown Source)

at org.httpkit.server__init.<clinit>(Unknown Source)

... 42 more

I tried to add as many XML jars as possible to support Java 11, in particular from this discussion. But same error.

Could you advise on running Anychart server on a newer Java version?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.