Giter Site home page Giter Site logo

plantuml-server's Introduction

🌱 PlantUML

Generate UML diagrams from textual descriptions.

Discord server GitHub Sponsors GitHub Org's stars GitHub watchers GitHub contributors GitHub forks GitHub all releases

online rate peak

Release (latest by date) Release Date GitHub commits since latest release (by date) javadoc

Pre-release (latest by date) Pre-release Date GitHub last commit CI snapshot javadoc

ℹ️ About

PlantUML is a component that allows you to create various UML diagrams through simple textual descriptions. From sequence diagrams to deployment diagrams and beyond, PlantUML provides an easy way to create visual representations of complex systems.

πŸ—ƒοΈ Supported Diagram Types

πŸ“£ Additional Features

πŸ“– Learn More

For a more detailed overview, visit PlantUML Official Website.

πŸ›‘ Security

See Security Policy and Security overview.

πŸš€ Getting Started

Whether you're looking to use PlantUML as a standalone application or as a component in your own project, getting started is simple. Check out the official PlantUML setup guide for instructions on how to set up PlantUML on your system.

βš™οΈ Building from Source

To build PlantUML from source, you'll need to have certain prerequisites installed and follow a series of steps outlined in our build guide. Find detailed instructions in our BUILDING.md file.

🧱 Contributing

PlantUML is an open-source project, and we welcome contributions of all kinds. Whether you're helping us fix bugs, improve the docs, or spread the word, we appreciate your support. See our contributing guide for more information on how to get started.

For comprehensive and detailed documentation on using PlantUML, refer to the official Javadoc, available here. Please note that this documentation is a work in progress and may not be complete.

πŸ§‘β€πŸ€β€πŸ§‘ Support and Community

πŸ“ƒ License

PlantUML is licensed under several licenses; you can choose the one that suits you best:

For more information, please refer to the PlantUML license FAQ to help determine which license is appropriate for your use case.

plantuml-server's People

Contributors

aadrian avatar arnaudroques avatar codeprefect avatar devantler avatar ducatel avatar esler avatar fabianhauser avatar fgreinacher avatar ftomassetti avatar halindrome avatar heinrichad avatar hupling avatar jarv avatar jemerald avatar jessetan avatar lalloni avatar madduci avatar maximesinclair avatar morotti avatar mrausch avatar natescarlet avatar norbertnogacki-tomtom avatar paddy-hack avatar peterdavehello avatar roxspring avatar slavisah avatar stevehipwell avatar the-lum avatar thiyagaraj avatar translucens avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

plantuml-server's Issues

"Too Many Redirects" when using a WAR

Hello,

I want to deploy the server in an Openshift Origin cluster, which is essentially Kubernetes + a management layer on top. I used your Dockerfile as a starting point, but made a few modifications:

  1. Allow to run as an arbitrary user; Openshift does not run the containers as root.
  2. Speed-up deployment by splitting WAR generation and tool startup
  3. Set the Jetty ContextPath using a variable that is overridden in the Dockerfile

See https://github.com/woopla/plantuml-server for the modifications

Step 2 is necessary because otherwise, the start-up phase of the container will fail if it takes too long to start.

The big problem I have is that in this mode, the server enters a loop of redirects which is ended by the browser with a Too Many Redirects error. Here's an excerpt of the logfile with Jetty debug output:

2017-03-20 23:48:46.580:DBUG:oeji.nio:created SCEP@506b4efb{l(/172.17.0.1:40738)<->r(/172.17.0.5:8080),d=false,open=true,ishut=false,oshut=false,rb=false,wb=false,w=true,i=0}-{AsyncHttpConnection@5fd399cb,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-14,l=0,c=0},r=0}
2017-03-20 23:48:46.584:DBUG:oejh.HttpParser:filled 2931/2931
2017-03-20 23:48:46.589:DBUG:oejs.Server:REQUEST / on AsyncHttpConnection@5fd399cb,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-5,l=13,c=0},r=1
2017-03-20 23:48:46.589:DBUG:oejsh.ContextHandler:scope null||/ @ o.e.j.w.WebAppContext{/,[file:/app/target/plantuml/, jar:file:/app/target/plantuml/WEB-INF/lib/codemirror-3.21.jar!/META-INF/resources/]},file:/app/target/plantuml.war
2017-03-20 23:48:46.589:DBUG:oejsh.ContextHandler:context=||/ @ o.e.j.w.WebAppContext{/,[file:/app/target/plantuml/, jar:file:/app/target/plantuml/WEB-INF/lib/codemirror-3.21.jar!/META-INF/resources/]},file:/app/target/plantuml.war
2017-03-20 23:48:46.595:DBUG:oejs.session:sessionManager=org.eclipse.jetty.server.session.HashSessionManager@47b2e9e1
2017-03-20 23:48:46.595:DBUG:oejs.session:session=null
2017-03-20 23:48:46.595:DBUG:oejs.ServletHandler:servlet |/|null -> default
2017-03-20 23:48:46.597:DBUG:oejs.ServletHandler:chain=null
2017-03-20 23:48:46.599:DBUG:oejs.DefaultServlet:Resource /=file:/app/target/plantuml/
2017-03-20 23:48:46.599:DBUG:oejs.DefaultServlet:uri=/ resource=file:/app/target/plantuml/ content
2017-03-20 23:48:46.609:DBUG:oejs.DefaultServlet:Resource /welcome=null
2017-03-20 23:48:46.609:DBUG:oejs.DefaultServlet:welcome=/welcome
2017-03-20 23:48:46.610:DBUG:oejsh.ContextHandler:scope /||/welcome @ o.e.j.w.WebAppContext{/,[file:/app/target/plantuml/, jar:file:/app/target/plantuml/WEB-INF/lib/codemirror-3.21.jar!/META-INF/resources/]},file:/app/target/plantuml.war
2017-03-20 23:48:46.610:DBUG:oejsh.ContextHandler:context=||/welcome @ o.e.j.w.WebAppContext{/,[file:/app/target/plantuml/, jar:file:/app/target/plantuml/WEB-INF/lib/codemirror-3.21.jar!/META-INF/resources/]},file:/app/target/plantuml.war
2017-03-20 23:48:46.610:DBUG:oejs.session:sessionManager=org.eclipse.jetty.server.session.HashSessionManager@47b2e9e1
2017-03-20 23:48:46.610:DBUG:oejs.session:session=null
2017-03-20 23:48:46.610:DBUG:oejs.ServletHandler:servlet |/welcome|null -> plantumlservlet
2017-03-20 23:48:46.610:DBUG:oejs.ServletHandler:chain=null
2017-03-20 23:48:46.610:DBUG:oejw.WebAppClassLoader:loaded interface java.lang.CharSequence
2017-03-20 23:48:46.610:DBUG:oejw.WebAppClassLoader:loaded interface java.lang.CharSequence from null
2017-03-20 23:48:46.610:DBUG:oejw.WebAppClassLoader:loaded class java.net.HttpURLConnection
2017-03-20 23:48:46.610:DBUG:oejw.WebAppClassLoader:loaded class java.net.HttpURLConnection from null
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class javax.net.ssl.HttpsURLConnection
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class javax.net.ssl.HttpsURLConnection from null
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class java.lang.Throwable
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class java.lang.Throwable from null
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class java.lang.Exception
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class java.lang.Exception from null
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded interface javax.servlet.ServletResponse
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded interface javax.servlet.ServletResponse from sun.misc.Launcher$AppClassLoader@4b67cf4d
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded interface javax.servlet.ServletRequest
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded interface javax.servlet.ServletRequest from sun.misc.Launcher$AppClassLoader@4b67cf4d
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class java.util.regex.Pattern
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class java.util.regex.Pattern from null
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded interface javax.servlet.http.HttpServletRequest
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded interface javax.servlet.http.HttpServletRequest from sun.misc.Launcher$AppClassLoader@4b67cf4d
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class java.lang.String
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class java.lang.String from null
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class java.io.IOException
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded class java.io.IOException from null
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded interface javax.servlet.http.HttpServletResponse
2017-03-20 23:48:46.611:DBUG:oejw.WebAppClassLoader:loaded interface javax.servlet.http.HttpServletResponse from sun.misc.Launcher$AppClassLoader@4b67cf4d
2017-03-20 23:48:46.612:DBUG:oejw.WebAppClassLoader:loaded class java.lang.Object
2017-03-20 23:48:46.612:DBUG:oejw.WebAppClassLoader:loaded class java.lang.Object from null
2017-03-20 23:48:46.612:DBUG:oejw.WebAppClassLoader:loaded interface net.sourceforge.plantuml.code.Transcoder from WebAppClassLoader=plantuml@4f8e5cde
2017-03-20 23:48:46.612:DBUG:oejw.WebAppClassLoader:loaded class java.net.URL
2017-03-20 23:48:46.612:DBUG:oejw.WebAppClassLoader:loaded class java.net.URL from null
2017-03-20 23:48:46.612:DBUG:oejw.WebAppClassLoader:loaded class java.io.InputStream
2017-03-20 23:48:46.612:DBUG:oejw.WebAppClassLoader:loaded class java.io.InputStream from null
2017-03-20 23:48:46.612:DBUG:oejw.WebAppClassLoader:loaded class javax.servlet.ServletException
2017-03-20 23:48:46.612:DBUG:oejw.WebAppClassLoader:loaded class javax.servlet.ServletException from sun.misc.Launcher$AppClassLoader@4b67cf4d
2017-03-20 23:48:46.614:DBUG:oejw.WebAppClassLoader:loaded class java.util.regex.Matcher
2017-03-20 23:48:46.614:DBUG:oejw.WebAppClassLoader:loaded class java.util.regex.Matcher from null
2017-03-20 23:48:46.614:DBUG:oejw.WebAppClassLoader:loaded class java.lang.StringBuilder
2017-03-20 23:48:46.614:DBUG:oejw.WebAppClassLoader:loaded class java.lang.StringBuilder from null
2017-03-20 23:48:46.649:DBUG:oejs.Server:RESPONSE /  302 handled=true
2017-03-20 23:48:46.649:DBUG:oejs.AsyncHttpConnection:Enabled read interest SCEP@506b4efb{l(/172.17.0.1:40738)<->r(/172.17.0.5:8080),d=true,open=true,ishut=false,oshut=false,rb=false,wb=false,w=true,i=0r}-{AsyncHttpConnection@5fd399cb,g=HttpGenerator{s=4,h=0,b=-1,c=-1},p=HttpParser{s=0,l=13,c=0},r=1}
2017-03-20 23:48:46.650:DBUG:oejh.HttpParser:filled 0/0
2017-03-20 23:48:46.672:DBUG:oejh.HttpParser:filled 2967/2967
2017-03-20 23:48:46.674:DBUG:oejs.Server:REQUEST /uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 on AsyncHttpConnection@5fd399cb,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-5,l=13,c=0},r=2
2017-03-20 23:48:46.674:DBUG:oejsh.ContextHandler:scope null||/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 @ o.e.j.w.WebAppContext{/,[file:/app/target/plantuml/, jar:file:/app/target/plantuml/WEB-INF/lib/codemirror-3.21.jar!/META-INF/resources/]},file:/app/target/plantuml.war
2017-03-20 23:48:46.674:DBUG:oejsh.ContextHandler:context=||/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 @ o.e.j.w.WebAppContext{/,[file:/app/target/plantuml/, jar:file:/app/target/plantuml/WEB-INF/lib/codemirror-3.21.jar!/META-INF/resources/]},file:/app/target/plantuml.war
2017-03-20 23:48:46.674:DBUG:oejs.session:sessionManager=org.eclipse.jetty.server.session.HashSessionManager@47b2e9e1
2017-03-20 23:48:46.674:DBUG:oejs.session:session=null
2017-03-20 23:48:46.674:DBUG:oejs.ServletHandler:servlet |/uml|/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 -> plantumlservlet
2017-03-20 23:48:46.675:DBUG:oejs.ServletHandler:chain=null
2017-03-20 23:48:46.675:DBUG:oejs.Server:RESPONSE /uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000  302 handled=true
2017-03-20 23:48:46.675:DBUG:oejs.AsyncHttpConnection:Enabled read interest SCEP@506b4efb{l(/172.17.0.1:40738)<->r(/172.17.0.5:8080),d=true,open=true,ishut=false,oshut=false,rb=false,wb=false,w=true,i=1r}-{AsyncHttpConnection@5fd399cb,g=HttpGenerator{s=4,h=0,b=-1,c=-1},p=HttpParser{s=0,l=13,c=0},r=2}
2017-03-20 23:48:46.677:DBUG:oejh.HttpParser:filled 0/0
2017-03-20 23:48:46.729:DBUG:oejh.HttpParser:filled 2967/2967
2017-03-20 23:48:46.730:DBUG:oejs.Server:REQUEST /uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 on AsyncHttpConnection@5fd399cb,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-5,l=13,c=0},r=3
2017-03-20 23:48:46.730:DBUG:oejsh.ContextHandler:scope null||/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 @ o.e.j.w.WebAppContext{/,[file:/app/target/plantuml/, jar:file:/app/target/plantuml/WEB-INF/lib/codemirror-3.21.jar!/META-INF/resources/]},file:/app/target/plantuml.war
2017-03-20 23:48:46.730:DBUG:oejsh.ContextHandler:context=||/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 @ o.e.j.w.WebAppContext{/,[file:/app/target/plantuml/, jar:file:/app/target/plantuml/WEB-INF/lib/codemirror-3.21.jar!/META-INF/resources/]},file:/app/target/plantuml.war
2017-03-20 23:48:46.731:DBUG:oejs.session:sessionManager=org.eclipse.jetty.server.session.HashSessionManager@47b2e9e1
2017-03-20 23:48:46.731:DBUG:oejs.session:session=null
2017-03-20 23:48:46.731:DBUG:oejs.ServletHandler:servlet |/uml|/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 -> plantumlservlet
2017-03-20 23:48:46.731:DBUG:oejs.ServletHandler:chain=null
2017-03-20 23:48:46.731:DBUG:oejs.Server:RESPONSE /uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000  302 handled=true

There's the initial request plus a couple of HTTP 302 redirects.

I know next to nothing about Maven/Jetty etc. amy help in debugging the issue would be appreciated. I will file a PR once I get it working. While it makes the server working on OpenShift, it's still a generic Dockerfile that can be used in replacement of the existing one.

Thanks,

ClΓ©ment

Error starting userland proxy: mkdir /port/tcp:0.0.0.0:8080:tcp:172.17.0.3:8080: input/output error

Hi,

Trying to startup a docker image and getting the following error. Any suggestions please?
I've tried both Tomcat and Jetty images.

docker run -d -p 8080:8080 plantuml/plantuml-server:jetty
d965e26e5a08c0664676b4b2aecb90e3573788b04f3e2996acf09c4fa1d68fa5
docker: Error response from daemon: driver failed programming external connectivity on endpoint practical_pare (8dc80a80905e476b95b0bc76aae7e398f343517c6f7858f40e1128b4d31d7796): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:8080:tcp:172.17.0.3:8080: input/output error.

Redirections with absolute urls

Hi,
In my current setup, Plantuml is working behind a proxy and is accessible via http://somewhere.local/plantuml.
However all redirections (from platnuml) fail since it seems it assumes that the root directory is /. So you can get something like http://somewhere.local/uml/blabla instead of http://somewhere.local/plantuml/uml/blabla

Example:

  • Going to http://somewhere.local/plantuml
  • Redirected to http://somewhere.local/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000

via curl:

% curl -v -L http://somewhere.local/plantuml/
*   Trying 100.73.1.89...
* TCP_NODELAY set
* Connected to somewhere.local (100.73.1.89) port 80 (#0)
> GET /plantuml/ HTTP/1.1
> Host: somewhere.local
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Server: nginx
< Date: Thu, 03 Aug 2017 04:27:14 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< Location: http://somewhere.local/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000
<
* Ignoring the response-body
* Connection #0 to host somewhere.local left intact
* Issue another request to this URL: 'http://somewhere.local/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000'
* Found bundle for host somewhere.local: 0x7ffce7c0b590 [can pipeline]
* Re-using existing connection! (#0) with host somewhere.local
* Connected to somewhere.local (100.73.1.89) port 80 (#0)
> GET /uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 HTTP/1.1
> Host: somewhere.local
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Server: nginx
< Date: Thu, 03 Aug 2017 04:27:14 GMT
< Content-Type: text/html
< Content-Length: 162
< Connection: keep-alive
< Vary: Accept-Encoding
<
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host somewhere.local left intact

The nginx setup, if not good for some reasons:

upstream backend-plantuml {
    least_conn;
    server some-backend.local:80 weight=1;
}

location /plantuml/ {
    proxy_set_header HOST $host;
    proxy_connect_timeout 500ms; # approximate
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    rewrite ^/plantuml/(.*) /$1 break;
    proxy_pass http://backend-plantuml;
}

Test fails

I just cloned the repo and ran mvn package. Unfortunately it fails with:

2013-04-22 18:27:32.550:INFO:oejs.Server:jetty-8.0.4.v20111024
2013-04-22 18:27:32.564:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
2013-04-22 18:27:32.564:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
2013-04-22 18:27:32.569:INFO:oejs.AbstractConnector:Started SelectChannelConnector@localhost:58599 STARTING
2013-04-22 18:27:32.804:INFO:oejsl.ELContextCleaner:javax.el.BeanELResolver purged
2013-04-22 18:27:32.804:INFO:oejsh.ContextHandler:stopped o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
2013-04-22 18:27:32.869:INFO:oejs.Server:jetty-8.0.4.v20111024
2013-04-22 18:27:32.887:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
2013-04-22 18:27:32.887:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
2013-04-22 18:27:32.896:INFO:oejs.AbstractConnector:Started SelectChannelConnector@localhost:58602 STARTING
2013-04-22 18:27:33.088:INFO:oejsl.ELContextCleaner:javax.el.BeanELResolver purged
2013-04-22 18:27:33.088:INFO:oejsh.ContextHandler:stopped o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
2013-04-22 18:27:33.144:INFO:oejs.Server:jetty-8.0.4.v20111024
2013-04-22 18:27:33.158:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
2013-04-22 18:27:33.158:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
2013-04-22 18:27:33.165:INFO:oejs.AbstractConnector:Started SelectChannelConnector@localhost:58605 STARTING
2013-04-22 18:27:33.275:INFO:oejsl.ELContextCleaner:javax.el.BeanELResolver purged
2013-04-22 18:27:33.275:INFO:oejsh.ContextHandler:stopped o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
Tests run: 3, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 0.779 sec <<< FAILURE!
Running net.sourceforge.plantuml.servlet.TestSVG
2013-04-22 18:27:33.332:INFO:oejs.Server:jetty-8.0.4.v20111024
2013-04-22 18:27:33.343:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
2013-04-22 18:27:33.343:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
2013-04-22 18:27:33.349:INFO:oejs.AbstractConnector:Started SelectChannelConnector@localhost:58607 STARTING
2013-04-22 18:27:33.405:INFO:oejsl.ELContextCleaner:javax.el.BeanELResolver purged
2013-04-22 18:27:33.405:INFO:oejsh.ContextHandler:stopped o.e.j.w.WebAppContext{/plantuml,file:/Users/tobi/Projects/java/plantumlservlet/src/main/webapp/},src/main/webapp
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.131 sec <<< FAILURE!
Running net.sourceforge.plantuml.servlet.TestUtils
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec

Results :

Failed tests:
  testDefaultProxy(net.sourceforge.plantuml.servlet.TestProxy)
  testProxyWithFormat(net.sourceforge.plantuml.servlet.TestProxy)
  testSimpleSequenceDiagram(net.sourceforge.plantuml.servlet.TestSVG)

I'm on Mac 10.8.3, Java version "1.6.0_45"

any idea what is wrong? Thx

Using a different context path than root

Hello, I was trying to run the server on a different path than root, but since the the .war file was named ROOT.war it was impossible for me. I have changed this so now is possible to do it at build time like this:

docker image build --build-arg context_path=name_of_dot_war_file -t plantuml-server .

This is was my solution:

  • ARG context_path=ROOT
  • RUN rm -rf /usr/local/tomcat/webapps/ROOT
  • COPY --from=builder /app/target/plantuml.war /usr/local/tomcat/webapps/ROOT.war+
  • COPY --from=builder /app/target/plantuml.war /usr/local/tomcat/webapps/${context_path}.war

This is obiviously not the best solution since I can't run the server on for example /my/context/path, just in /my_context_path

I think that this was supported before d7a8a7e

Thank you for your help!

Create uml from git link

Given I have public link to text file with uml on gitlab or github, I may paste link into plantuml server and get image.

It would be either reasonable to create issue on github and gitlab to render plantuml inside their web interfaces, like these where done for some other kinds of text - e.g. 2d/3d models.

Broken Over HTTPS (Fix Provided)

When we run PlantUML Server over https, it generates broken URLs (http://server:443).

Here's a fix to apply to the master branch:

src/main/webapp/index.jsp
 <c:set var="cfg" value="${applicationScope['cfg']}" />
 <c:set var="contextroot" value="${pageContext.request.contextPath}" />
-<c:set var="hostpath" value="http://${pageContext.request.serverName}:${pageContext.request.serverPort}${contextroot}" />
-<c:if test="${pageContext.request.serverPort == 80 }">
-    <c:set var="hostpath" value="http://${pageContext.request.serverName}${contextroot}" />
+<c:if test="${
+  (pageContext.request.scheme == 'http' && pageContext.request.serverPort != 80) ||
+  (pageContext.request.scheme == 'https' && pageContext.request.serverPort != 443 ) }">
+    <c:set var="port" value=":${pageContext.request.serverPort}" />
 </c:if>
+<c:set var="hostpath" value="${pageContext.request.scheme}://${pageContext.request.serverName}${port}${contextroot}" />
 <c:if test="${!empty encoded}">
     <c:set var="imgurl" value="${hostpath}/png/${encoded}" />
     <c:set var="svgurl" value="${hostpath}/svg/${encoded}" />

Retrieve source from image via server?

I frequently post PlantUML diagrams on StackExchange that are direct URLs to the PlantUML.com server. Because of past problems with services that go off line and negatively affect StackExchange experience, they want the images to be hosted on stack.imgur.com.

I know that there's a PlantUML jar command, but I'm wondering how to get it through the server.

    -metadata       To retrieve PlantUML sources from PNG images

If so, we could do stuff like draw.io does: example

I tested (locally) with http://i.stack.imgur.com/HJvKF.png and -metadata recovers the source. It's just a question of providing a server hook.

Draw images for PlantUML markup reachable via URL?

It would be great if we could pass the PlantUML server an URL to a markup file as an URL parameter and get the image in return.

That way, I could put .puml files somewhere in my repo.

Then, my documentation .md files could point to something like http://www.plantuml.com/imageForUrl?url=..urlencoded_URL_of_the_raw_version_of_the_markup_file... and embed the image rendered by the server.

... at least until GitHub supports PlantUML nativaly :)

As an extra bonus, a second parameter could choose which @startuml...@enduml section to pick from the source file in case there are more than one.

Does that make sense?

Support multiple images/new page functionality

PlantUML supports the newpage mechanism that starts a new page/image for large schemas. Is it possible to generate a large image or separate images with the separate pages? At this moment only the image of the first page is returned.

I can fix this if I can find the time, but maybe it's already been taken care of?

Thanks in advance.

Use PlantUML behind a reverse proxy

Hi everyone,

i try to use plantUML behind a reverse proxy and have some problems with it.

My plantuml server ist running at:
http://plantuml.pcf.tld/

The request for plantuml goes to:
http://intra.domain.tld/plantuml which reverse proxys requests to
http://plantuml.pcf.tld/

Direct Requests to png/svg are working, for example:
http://intra.domain.tld/plantuml/png/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 -> works fine

What is not working are links in the jsp singlepage application.

Whent i try to access: http://intra.domain.tld/plantuml/
it redirects to http://intra.domain.tld/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000 -> which is the wrong context root ("uml" instead of "plantuml").

When i try to access the singlepage application with a direkt request like:
http://intra.domain.tld/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000
the page loads, but all links in build against the wrong URL ( it builds the links against http://plantuml.pcf.tld instead of http://intra.domain.tld/plantuml )

I would really like to use the jsp singlepage with the reverse Proxy. I have not found a way to fix this.
The index.jsp gets the host URI from:
<c:set var="hostpath" value="${scheme}://${pageContext.request.serverName}${port}${contextroot}" />

As the server where plantuml is running is not the same that delivers the webpages, this does not work for my scenario.

Can you make the baseurl where plantuml is building on configurable or have any advice for me?

docker image sometimes doesn't work with 'host unreachable'

Hi, I'm using the plantuml/plantuml-server image and the default uml works fine. If I copy and paste in this

@startuml

[*] --> NotShooting

state "Not Shooting State" as NotShooting {
  state "Idle mode" as Idle
  state "Configuring mode" as Configuring
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}

note right of NotShooting : This is a note on a composite state

@enduml

It breaks with the following message - any ideas?

Wed Jun 14 21:32:07 UTC 2017
Request that failed: /uml/LOwn3i8m34HtVyMf8r9_e0CBOc1XALl54D4sYKHZrAGiY7_7ILC8aWVV-LrotUwAkjxZpA4rpC4wJUI32WCgyR2PQADNGVaInOk0J9_w-u29-nMAwdSxi1kjNkOO-IA5AMINY-HWUYtgCjhW-5or4ELX2vR4cyYnV3vRRG9u_ElTu6AiXun2ejZ9TkFfmTwAJBtf0m00
Status code: 500
Exception: javax.servlet.ServletException: org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Problem accessing the absolute URL "http://utils.domain.com:8082/map/LOwn3i8m34JtVCMf8r9_e0CBOc1XALl54D4sYKHZrAGiY7_7ILCmaWVV-LrotUwAkjxZJB6rHD5verI8EWwesCDcearU1HqaYfS22dtgxmCcwbSegT_jG7vqPfbJv8i8ayck52d1_5hICjhW-5mr4_Am1INnLieJVpuxOoDe_ElTu69T08z6fiZpTgFfGS6npBq_". java.net.NoRouteToHostException: No route to host (Host unreachable)

Like I said earlier, the standard blob of text works fine:

@startuml
Bob -> Alice : hello
@enduml

Any way to make the PlantUML server accept raw or URLEncoded text?

Having to use Base64 limits usage of a PlantUML server and doesn't allow things like wiki templates to embed PlantUML source that's directly editable. For example,

http://www.plantuml.com/plantuml/proxy?uml=%40startuml%0ABob%20-%3E%20Alice%20%3A%20hello%0A%40enduml

would generate the standard Bob & Alice sequence diagram.

latest version

We wanted to install puml-server for integration to gitlab.
As per https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/administration/integration/plantuml.md, we did
git clone https://github.com/plantuml/plantuml-server.git
This built version 1.2017.14.

But I bet the latest is 1.2017.15 from
http://sourceforge.net/projects/plantuml/files/plantuml.war/download, as explained at http://plantuml.com/server.

If github doesn't have the latest version of plantuml-server, I believe it is actually harmful.

unicode error

Can not correctly recognize chinese character
group

But it works fine in online demo of official website.

The server version i use is 201709

Using with Nginx SSL termination proxy https -> http

Hi,

I'm trying to expose plantuml-server docker via Nginx with SSL enabled and while the cert works fine for server running on port 80 it doesn't for plantuml-server exposed on different port.

The setup seems to be called "Nginx proxy with SSL termination" and is similar to what's shown on image in https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-load-balancing-with-ssl-termination.

When I address the Nginx server via http it works ok but when i use https i get the following error:

:WARN:oejh.HttpParser:qtp1732398722-13: Illegal character 0x16 in state=START for buffer HeapByteBuffer@1c1b2884[p=1,l=201,c=8192,r=200]={\x16<<<\x03\x01\x00\xC4\x01\x00\x00\xC0\x03\x03\xAd\x06\x10F\x97=K...\x00\x08\n\n\x00\x1d\x00\x17\x00\x18JJ\x00\x01\x00>>>0\r\nETag: "3m0ukyV...\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00

Is there some known way to fix this? Nginx configuration seems fine and host -> docker connection is normal HTTP so there should be no problems.

Compile error when running with Java 10

I am running this locally on my mac with Java 10, and the server started fine, but on first request, I am getting the following error:

Jul 11, 2018 7:28:14 PM org.apache.jasper.compiler.Compiler generateClass
SEVERE: Error compiling file: /Users/tnguyen14/github/plantuml/plantuml-server/target/tmp/jsp/org/apache/jsp/error_jsp.java
2018-07-11 19:28:14.226:WARN:oejs.ErrorPageErrorHandler:EXCEPTION
org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP||PWC6199: Generated servlet error:|Source option 5 is no longer supported. Use 6 or later.||PWC6199: Generated servlet error:|Target option 1.5 is no longer supported. Use 1.6 or later.||
        at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:126)
        at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:296)
        at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:387)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:448)

Remove old binary files from the repositry blobs

$ git rev-list --all --objects |     sed -n $(git rev-list --objects --all | \
    cut -f1 -d' ' | \
    git cat-file --batch-check | \
    grep blob | \
    sort -n -k 3 | \
    tail -n40 | \
    while read hash type size; do
         size_in_kibibytes=$(echo $size | awk '{ foo = $1 / 1024 ; print foo "KiB" }')
         echo -n "-e s/$hash/$size_in_kibibytes/p ";
    done) |     sort -n -k1
3.9873KiB diagram/__init__.py
3.98828KiB diagram/__init__.py
4.00195KiB diagram/__init__.py
4.02051KiB diagram/plantuml.py
4.05762KiB diagram/__init__.py
4.06055KiB diagram/__init__.py
4.06836KiB diagram/__init__.py
4.125KiB diagram/__init__.py
4.18555KiB Main.sublime-menu
4.18652KiB Main.sublime-menu
4.19531KiB diagram/plantuml.py
4.19531KiB diagram/plantuml.py
4.23242KiB Main.sublime-menu
4.25KiB diagram/plantuml.py
4.25684KiB diagram/plantuml.py
4.25977KiB diagram/plantuml.py
4.25977KiB diagram/plantuml.py
4.41211KiB Syntaxes/diagram.tmLanguage
4.45703KiB Main.sublime-menu
4.55273KiB diagram/plantuml.py
4.58691KiB Syntaxes/DiagramEx.sublime-syntax
4.7832KiB diagram/plantuml.py
5.07422KiB diagram/plantuml.py
5.08398KiB diagram/plantuml.py
5.10645KiB diagram/plantuml.py
5.11719KiB diagram/plantuml.py
5.11816KiB diagram/plantuml.py
5.12793KiB diagram/plantuml.py
5.31934KiB diagram/plantuml.py
22.5107KiB samples/component2.png
46.9346KiB samples/state1.png
63.2139KiB samples/component1.png
1585.52KiB diagram/plantuml-7232.jar
1748.09KiB diagram/plantuml-7931.jar
1942.46KiB diagram/plantuml-7958.jar
2010.62KiB diagram/plantuml-7963.jar
2162.41KiB diagram/plantuml-7981.jar
2723.62KiB diagram/plantuml-8024.jar
5379.99KiB diagram/plantuml-8050.jar
9206.35KiB diagram/plantuml-8054.jar

frontpage redirect

i've setup docker image which is behind haproxy, which itself is on https.

now if i access the service over https, it redirects to http url. it's apparently due haproxy connecting over http and plantuml not being able to understand that.

  1. how to configure it to redirect to https url?
$ curl -i https://plantuml.example.net
HTTP/1.1 302 Found
Connection: close
Location: http://plantuml.example.net/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000
Server: Jetty(9.4.6.v20170531)

Lifetime statements activate/deactivate don't work in sequence diagram with allow_mixing

@startuml
allow_mixing

Interface ServerCapabilities {
}
Interface ClientCapabilities {
}

Interface Initialize {

}
Interface ResourcePath {

}
Interface DidOpenedNotification {

}

Interface GoalsRequest {

}

Interface GoalsResponse {

}

Interface Goal {

}

Interface ResourceFilter {

}

Interface BuildNotification {

}

Interface BuildStatusNotification {
	
}

Actor User
Entity WSExplorer
Entity BSDplugin
Entity BSDServer

User -> WSExplorer :open
activate WSExplorer
WSExplorer -> BSDServer: start

activate BSDServer
deactivate BSDServer
deactivate WSExplorer

@enduml

Beta Gantt feature not available in docker server

Hi,

I encounter an error when trying to draw Gantt (beta, I know) diagrams even with the demo diagram code available on plantuml site.

@startgantt
[Prototype design] lasts 15 days
[Test prototype] lasts 10 days
@endgantt

Neither Image, txt or svg format works.
Image shows a square with only "plantuml diagram" text.
SVG and TXT format throw the following error :

Sorry, but things didn't work out as planned.

Fri Dec 01 12:19:01 UTC 2017
Request that failed: /txt/SoWkIImgIK_CAodXYWueoY_9BwaiI5L8IItEJC-BLSX9B2ufLZ0qLKX9h2pcYWv9BIvHA82fWaiRGAGTKlDIm2O10000
Status code: 500
Exception: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

Is it implemented in this docker release ?
Il use the latest image from docker hub.

$ docker pull plantuml/plantuml-server:jetty
jetty: Pulling from plantuml/plantuml-server
Digest: sha256:2f630034b6875e08904e3d74e09a5ee25b88fd5afb16034031ef8e235d4b22ca
Status: Image is up to date for plantuml/plantuml-server:jetty

Thanks.

Support block numbers/ids in URL

Thanks for the excellent work on PlantUML. We get an incredible amount of use out of it.

Do you have any plans to support block numbers and ids in URLs? With the include directive, you can do this:

!include foo.txt!MY_OWN_ID.

It would be nice to be able to do the same with urls, like:

https://www.planttext.com/plantuml/img/SoWkIImg?block=MY_OWN_ID

Generate EPS using PlantUML server

The command line version of PlantUML supports many different output options, including EPS using the -teps option, which looks better than png when included in a LaTeX document.
PlantUML server only supports png and svg output.

Sometimes Missing Response-Headers for broken PNG images

Hi,
I extended the sendDiagram()method in DiagramResponse.java with 3 new headers:

void sendDiagram(String uml) throws IOException {
      if (StringUtils.isDiagramCacheable(uml)) {
         response.addHeader(HttpHeaders.CACHE_CONTROL, "public");
         response.addHeader(HttpHeaders.CACHE_CONTROL, "max-age=" + CACHE_CONTROL_MAX_AGE_IN_SECONDS);
      }
      response.addHeader("Access-Control-Allow-Origin", "*");

      response.setContentType(getContentType());

      final SourceStringReader reader = new SourceStringReader(uml);
      reader.generateImage(response.getOutputStream(), new FileFormatOption(format, false));
   }

I want this diagram to be rendered (which will fail because of the wrong syntax):

Bob -|-> Alice : hello

My expectation:

The response headers are always set and not missing.

My results:

Used: PlantUML Server / version 8037

With JMeter:
GET /plantuml/png/SyfFKj3LhT6rKt3CoKnELR1Io4ZDoSdN1G00 (broken image)
GET /plantuml/svg/SyfFKj3LhT6rKt3CoKnELR1Io4ZDoSdN1G00 (broken image)
#2000 samples each

Jetty localhost:8080

Format Keep Alive NO Keep Alive
png X OK
svg OK OK

Tomcat7 localhost:8080

Format Keep Alive NO Keep Alive
png X X
svg OK OK

X := Access-Control-Allow-Origin (and often all other response Headers) missing

plantuml-stdlib is not included with this server

I've started server using docker

docker run -d -p 8080:8080 plantuml/plantuml-server:jetty

and tried to render example from plantuml-stdlib on my local server:

@startuml
!include <aws/common>
!include <aws/Storage/AmazonS3/AmazonS3>
!include <aws/Storage/AmazonS3/bucket/bucket>

AMAZONS3(s3_internal)
AMAZONS3(s3_partner,"Vendor's S3")
s3_internal <- s3_partner
@enduml

but got an error:

image


It works correctly on the official server.

Emojis in UML Diagrams

Emojis, as cute and silly as they seem are to me a very powerful means of providing a quick summary of what I want to display.

Unfortunately it's currently not possible to include emojis in plantuml diagrams:

@startuml
usecase "πŸ›  Implement the changes" as Implement

:Company: --> Implement
@enduml

The above does not generate the desired UML Image.

Current Result

sowkiimgastduiejjareb4vlkfemv_o21s_swfpktdiy4emiz5i5v8p4lfjkoym5n6a431unbnd-ra5yngmlwgwk7pa4gsfu2ix8bw00

Desired result

sowkiimgastduiejjareb4vlkd9j00fft8asrdpkl1a5aenkxuicnbpqr68bxshyx0mnbvlpvcv1obwbboakhxsix4dgnwh8k2u0

Add a couple of rest calls to support a more interactive editor..?

I'm getting a ton of use out of plantuml these days. Having content embedded in the url is awesome!

I was messing around with a little cleaner online editor, and I ran into the issue of a couple of rest calls that seem to be missing, and would be helpful:

  • Decode the diagram and return it as text
  • Accept a diagram content and return it as a url (maybe I should just do encoding in JS?)

Anywho, if I get more time and interest down the line, I might flush these out more on the Java side. Thanks.

Add fonts to docker image

Hi there,

The list of fonts installed on the official docker image is:

image

It would be great to add a few!

Cheers,

Jun

Support POST requests

Because GET requests have a char length limit

from urllib.parse import urlencode
from urllib.request import Request, urlopen

url = 'http://localhost:8080/plantuml/post'
post_fields = {'source': r'@startuml\na --> b\na <-- b\n@enduml'}

request = Request(url, urlencode(post_fields).encode())
answer = urlopen(request).read().decode()
print(answer)

Would be useful for internal application as:

  1. https://github.com/qjebbs/vscode-plantuml
  2. https://github.com/pkucmus/sublime-plantuml

With this they can render the images much faster and can handle big diagrams:

Plugin supports two renders: Local and PlantUMLServer.

Local is the default and traditional way. If you care more about export speed, you should try PlantUMLServer.

Local: 6 documents, 9 digrams, 14 files exported in 24.149 seconds
PlantUMLServer: 6 documents, 9 digrams, 14 files exported in 1.564 seconds

No metadata in generated images

The latest server (downloaded today) outputs images without the source metadata.

$ curl -s http://localhost:8080/plantuml/png/SyfFKj2rKt3CoKnELR1Io4ZDoSclg000 > test.png
$ plantuml -metadata test.png
------------------------
test.png

null
------------------------

The plantuml.com instance and older versions (not sure how old) work fine.

Error message not useful when Proxy fails with source not containing @startuml/@enduml

I mistakenly tried to use the proxy with a file that didn't have @startuml/@enduml around the PlantUML text. For example, using http://www.plantuml.com/plantuml/proxy?fmt=svg&src=https://raw.githubusercontent.com/fuhrmanator/gti792-peets/master/OOAD/test.puml the proxy fails with a message as follows:

Sorry, but things didn't work out as planned.

Wed Jan 06 17:25:10 UTC 2016
Request that failed: /plantuml/proxy
Status code: 500
Exception: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

It would be better if there was a cleaner error message, to indicate the real problem. Ideally, this would be in the image that is supposed to be returned, since many of us are using /proxy in markdown.

java.lang.IllegalArgumentException: Cannot decode webjars/codemirror/3.21/lib/codemirror.js

The server is running on AWS with mvn jetty:run command:

java.lang.IllegalArgumentException: Cannot decode webjars/codemirror/3.21/lib/codemirror.js
at net.sourceforge.plantuml.code.AsciiEncoder.decode(AsciiEncoder.java:62)
at net.sourceforge.plantuml.code.TranscoderImpl.decode(TranscoderImpl.java:69)
at net.sourceforge.plantuml.code.TranscoderSmart.decode(TranscoderSmart.java:48)
at net.sourceforge.plantuml.servlet.PlantUmlServlet.getTextFromUrl(PlantUmlServlet.java:138)
at net.sourceforge.plantuml.servlet.PlantUmlServlet.doGet(PlantUmlServlet.java:89)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:558)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:488)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:973)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:907)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
at org.eclipse.jetty.server.Server.handle(Server.java:346)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:442)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:924)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)

Alpine-based image

I made a Linux Alpine image which seems to work just like the tomcat version but is a lot smaller (meaning it starts faster and takes less memory as well).

Here it's, and it should be easy to apply that to the Dockerfile.tomcat:

FROM tomcat:9-alpine

ENV LC_CTYPE en_US.UTF-8

RUN set -x \
    # Remove existing wars
 && rm -r /usr/local/tomcat/webapps/* \
    # Make dot executable available
 && apk add --no-cache curl graphviz ttf-dejavu \
    # Install PlantUML from http://plantuml.com/server
 && curl -Lo /usr/local/tomcat/webapps/plantuml.war http://sourceforge.net/projects/plantuml/files/plantuml.war/download \
    # Clean-up
 && apk del --purge curl

I can provide a PR, but it's just about using tomcat:9-alpine and then apk add --no-cache instead of apt-get install -y.

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.