Giter Site home page Giter Site logo

apiman-cli's Introduction

Verify Build Workflow Apiman Cypress

Apiman (Open Source API Management)

⚡️⚡️ Apiman 4 is under active development ⚡️⚡️

Apiman is a flexible and open source API Management platform.

With just a few clicks you can get Apiman running, putting a platform at your fingertips that covers the whole API Management lifecycle. Whether you want to offer existing APIs to external consumers in a secure way, or have a centralised location to discover and govern APIs, Apiman has you covered.

But that's not all. Apiman is designed to be easy to customise, and you can implement your own functionality by writing simple Java plugins.

🗞️ Apiman Newsletter

Did you know, we have an Apiman newsletter now! We'll inform you of the latest Apiman releases as soon as they happen, along with great Apiman-related content. The latest Apiman news, blogs, tutorials, software engineering topics, and more. No spam, no nonsense.

⚡️ Quick links

🐒 Monorepo

⚠️ We may move stuff around as we settle on a finalised monorepo structure post-merge.

📖 Requirements

  • Java 11+
  • To build Apiman with tests: Docker or an equivalent container engine. This is for running tests with testcontainers.
  • Naturally, if you're using an Apiman container, you'll need it for runtime too!

🏃‍♂️ Quickstart

You can look at the Apiman quickstarts on apiman.io.

Or, you can build and run our 'server-all' quickstart to try everything out immediately.

Here's what you need to do:

echo "Cloning Apiman"
git clone https://github.com/apiman/apiman.git && cd apiman

echo "Building Apiman"
./fastbuild.sh

echo "Starting a Keycloak container with a demo Apiman realm"
cd tools/server-all/target/docker
docker compose up -d

echo "Starting Apiman WildFly Quickstart" && cd ../
./wildfly-dev-server/bin/standalone.sh

Once Apiman has started up, and if all went well, you can point your browser to the API Manager via http://localhost:8080/apimanui/ and log in (either register a new user or log in as the admin):

  • Username: admin
  • Password: admin123!

You can log into the Keycloak admin console via http://localhost:8085/admin (same credentials as above).

This quickstart seeds a bunch of content into apiman. This is not strictly necessary, but it does populate the API Manager with some data so that it doesn't feel so lonely the first time you log in.

There's also a handy echo service available at http://localhost:8080/services/echo - it's useful for demos. You're welcome!

⚠️ Please don't use Apiman's default usernames, passwords, keys, certificates, etc., in production.

⚒️ Build Apiman

Fast and easy

The easiest way to build quickly (without tests) is to run our fastbuild script. It's in the root of the project. If you have mvnd the build will be faster.

git clone https://github.com/apiman/apiman.git && cd apiman
./fastbuild.sh 

I want to run the tests

First, build the parent pom (it's in /parent), then you can build the main project from the top level.

echo "Building Apiman Parent..."
cd parent
../mvnw clean install

cd ..
echo "Building the main Apiman project..."
./mvnw clean install

👷 Contribute to Apiman

Apiman is open source, and we welcome anybody who wants to participate and contribute!

If you want to fix a bug or make any changes, please log an issue in GitHub Issues describing the bug or new feature.

You can also join our discussion forums if you want help, or to discuss a more complex issue.

There are lots of different workflows for contributing. Feel free to use one that suits you. We're endeavouring to pull together a more detailed contribution document that we'll upload soon 🙌.

🔎 Developer Portal

Apiman also comes with a skinnable developer portal which you can let external developers sign up to your APIs in a streamlined API marketplace experience.

🙋 Looking for support?

Check out Apiman's support page where you can find Apiman experts to help you.

apiman-cli's People

Contributors

haines avatar msavy avatar outofcoffee avatar pcornish avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

apiman-cli's Issues

Thoughts about adding support for apiman-gateway-api

First, a few thoughts about what I'd like to achieve:

  • At the moment the 'Headless JSON' Registry's format is slightly difficult to use. In particular this is because (for example) you need to provide the full plugin implementation URI which requires digging around in the plugin's schema and all sorts of unpleasantness which isn't easy to discover. One option is to change that is to modify the registry in some way (dodgy for a few reasons), but I was thinking a nice alternative might be to extend the apiman-cli to generate the JSON in a more friendly way.

For example: plugin:io.apiman.plugins:apiman-plugins-simple-header-policy:1.3.1.Final:war/io.apiman.plugins.simpleheaderpolicy.SimpleHeaderPolicy

  • There's a similar issue for the 3scale registry policy overlay; adding policies has the same drawbacks (the plugin config needs to be escaped, plugin implementation URL is complex). For example. It's a workaround until deeper integration arrives hopefully, but makes things more useable in the interim.

  • I'd also like to just allow the apiman-cli to interact with the gateway API directly (which is something you guys proposed some time ago, and makes plenty of sense).

With these goals in mind, I spent some time today playing around with apiman-cli to see what it would take to support these different things. It quickly become obvious that it's going to be a bit more challenging than the manager API for a few reasons:

As it has a much coarser granularity than the management API I think it's less practical to construct everything using a "single shot" command (although not impossible, I suppose). For example, in the management API you can create an empty API shell, then repeatedly add stuff to it until you're done (finally publishing). In the gateway API it's the opposite: what you publish is what you get, you can't bolt stuff on later (unless you decide to retire, etc).

That means you need to define the whole thing up-front, which means we either:

  1. Only support the declarative style in this case (the advantage over plain JSON being we can do things such as looking up plugins to resolve the correct implementation URI, escape the config, etc).

  2. Or, have a 'git style' system where you can run multiple commands to build up state until a commit is explicitly executed. I would imagine this could be done via an intermediary file or something. I guess this would be significantly more complex.

  3. Still go for single shot, but with really long command sequences (!!).

Here's the schema for the Gateway API btw -- https://gist.github.com/msavy/f79766b4f448672cdaf84ce4159ba2e9

I'm still completely open minded about how to proceed. I realise we've added quite a lot of good functionality lately but its probably more difficult to use than I'd like.

Travis build failing due to broken plugin test

The Travis build is failing due to a broken test.

The cause is:

type":"PluginNotFoundException","errorCode":12002,"message":"Plugin does not exist: 1"

The test assumes a predicable ID for the created plugin but this is not so. Need to update test to use the response of listing plugins to get the right ID.

Compilation failures on master?

@outofcoffee When I compile, I see this. Is this something you know about?

[msavy@mmbp apiman-cli](master)$ gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
Download https://repo1.maven.org/maven2/org/rnorth/duct-tape/duct-tape/1.0.4/duct-tape-1.0.4.pom
Download https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-13.0.pom
Download https://repo1.maven.org/maven2/org/rnorth/duct-tape/duct-tape/1.0.4/duct-tape-1.0.4.jar
Download https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-13.0.jar
:processTestResources
:testClasses
:test

io.apiman.cli.ApiTest > classMethod FAILED
    java.lang.RuntimeException

io.apiman.cli.GatewayTest > classMethod FAILED
    java.lang.RuntimeException

io.apiman.cli.OrgTest > classMethod FAILED
    java.lang.RuntimeException

io.apiman.cli.PluginTest > classMethod FAILED
    java.lang.RuntimeException

io.apiman.cli.action.DeclarativeTest > classMethod FAILED
    java.lang.RuntimeException

8 tests completed, 5 failed
:test FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///Users/msavy/apiman/apiman-cli/build/reports/tests/index.html

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 10 mins 8.679 secs

script interpreted by sh which doesn't understand [[ in if statements.

Steps to reproduce (Linux)..

Download zip file, unzip, enter folder, then..

root@test>./gradlew clean build
:clean UP-TO-DATE
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
Download https://repo1.maven.org/maven2/org/rnorth/duct-tape/duct-tape/1.0.4/duct-tape-1.0.4.pom
Download https://repo1.maven.org/maven2/org/mockito/mockito-core/1.10.19/mockito-core-1.10.19.pom
Download https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-13.0.pom
Download https://repo1.maven.org/maven2/org/objenesis/objenesis/2.1/objenesis-2.1.pom
Download https://repo1.maven.org/maven2/org/objenesis/objenesis-parent/2.1/objenesis-parent-2.1.pom
Download https://repo1.maven.org/maven2/org/rnorth/duct-tape/duct-tape/1.0.4/duct-tape-1.0.4.jar
Download https://repo1.maven.org/maven2/org/mockito/mockito-core/1.10.19/mockito-core-1.10.19.jar
Download https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-13.0.jar
Download https://repo1.maven.org/maven2/org/objenesis/objenesis/2.1/objenesis-2.1.jar
:processTestResources
:testClasses
:test
:check
:build

BUILD SUCCESSFUL

Total time: 5.4 secs

This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.9/userguide/gradle_daemon.html
root@test>ls -al
total 96
drwxr-xr-x 7 root root 4096 Feb 6 16:33 .
drwxr-xr-x 25 root root 4096 Feb 6 16:32 ..
-rwxr-xr-x 1 root root 449 Feb 2 23:46 apiman
-rw-r--r-- 1 root root 150 Feb 2 23:46 apiman.bat
drwxr-xr-x 9 root root 4096 Feb 6 16:33 build
-rw-r--r-- 1 root root 2089 Feb 2 23:46 build.gradle
-rw-r--r-- 1 root root 1565 Feb 2 23:46 CHANGELOG.md
drwxr-xr-x 4 root root 4096 Feb 2 23:46 examples
-rw-r--r-- 1 root root 29 Feb 2 23:46 .gitignore
drwxr-xr-x 3 root root 4096 Feb 2 23:46 gradle
drwxr-xr-x 3 root root 4096 Feb 6 16:33 .gradle
-rwxr-xr-x 1 root root 4971 Feb 2 23:46 gradlew
-rw-r--r-- 1 root root 2314 Feb 2 23:46 gradlew.bat
-rw-r--r-- 1 root root 10173 Feb 2 23:46 LICENSE
-rw-r--r-- 1 root root 551 Feb 2 23:46 NOTICE
-rw-r--r-- 1 root root 8852 Feb 2 23:46 README.md
-rw-r--r-- 1 root root 630 Feb 2 23:46 settings.gradle
drwxr-xr-x 4 root root 4096 Feb 2 23:46 src
-rw-r--r-- 1 root root 262 Feb 2 23:46 .travis.yml
root@test>./apiman
./apiman: 7: ./apiman: [[: not found
./apiman: 22: ./apiman: [[: not found
Error: Unable to access jarfile ./build/libs/apiman-cli.jar
root@test>

Then adapt file apiman to replace shebang sh with bash.

Then a gradle problem is seen when apiman file is invoked..

root@test>./apiman
./gradlew: 154: ./gradlew: Syntax error: "(" unexpected
root@test>

Defining new api with yaml file: setting publicAPI or publicServer to true does not work

I'm using Apiman 1.2.1 on Wildfly 9, and the latest version of apiman-cli (d22e6ea). I'm using this simple yaml:


---
system:
  gateways: []
  plugins: []
org:
  name: "myorg"
  description: "myorg descr"
  apis:
    - name: "someapi4"
      description: "someapi descr"
      initialVersion: "1.0"
      published: true
      config:
        endpoint: "${myApiEndPoint}"
        endpointType: "rest"
        #note the following line:
        publicAPI: true
        gateway: "TheGateway"
      policies: []

and use it with:

./apiman apply --server http://localhost:8080/apiman -f ../apiman_settings.yml -P myApiEndPoint=http://myapi:8080/ --serverVersion v12x

The api is created, but not set public (checkbox on "Make this API public" is not set). Publishing therefore fails, with a stacktrace:

INFO  Loaded declaration: ../apiman_settings.yml
INFO  Org already exists: myorg
INFO  API already exists: someapi4
INFO  Configuring API: someapi4
ERROR Error in Apply declaration
io.apiman.cli.exception.CommandException: Error applying declaration
        at io.apiman.cli.core.declarative.command.ApplyCommand.performAction(ApplyCommand.java:105) ~[apiman-cli.jar:?]
        at io.apiman.cli.command.AbstractCommand.run(AbstractCommand.java:126) [apiman-cli.jar:?]
        at io.apiman.cli.command.AbstractCommand.run(AbstractCommand.java:155) [apiman-cli.jar:?]
        at io.apiman.cli.Cli.main(Cli.java:37) [apiman-cli.jar:?]
Caused by: io.apiman.cli.exception.DeclarativeException: Unable to publish API 'someapi4' in state: Created
        at io.apiman.cli.core.declarative.command.ApplyCommand.publish(ApplyCommand.java:401) ~[apiman-cli.jar:?]
        at io.apiman.cli.core.declarative.command.ApplyCommand.lambda$null$27(ApplyCommand.java:235) ~[apiman-cli.jar:?]
        at java.util.ArrayList.forEach(ArrayList.java:1249) ~[?:1.8.0_71]
        at io.apiman.cli.core.declarative.command.ApplyCommand.lambda$applyApis$28(ApplyCommand.java:222) ~[apiman-cli.jar:?]
        at java.util.Optional.ifPresent(Optional.java:159) ~[?:1.8.0_71]
        at io.apiman.cli.core.declarative.command.ApplyCommand.applyApis(ApplyCommand.java:219) ~[apiman-cli.jar:?]
        at io.apiman.cli.core.declarative.command.ApplyCommand.lambda$applyDeclaration$17(ApplyCommand.java:138) ~[apiman-cli.jar:?]
        at java.util.Optional.ifPresent(Optional.java:159) ~[?:1.8.0_71]
        at io.apiman.cli.core.declarative.command.ApplyCommand.applyDeclaration(ApplyCommand.java:124) ~[apiman-cli.jar:?]
        at io.apiman.cli.core.declarative.command.ApplyCommand.performAction(ApplyCommand.java:103) ~[apiman-cli.jar:?]
        ... 3 more

Note that I've used publicAPI, as found in io.apiman.cli.core.api.model.ApiConfig, instead of publicService as still mentioned in the README.md. (Using publicService doesn't work either.)

Wait for apiman to be ready

Add a feature to wait for apiman to be ready, with a given timeout. Use rnorth/ducttape for retry.

This will help when scripting the deployment of configuration to a server that has just been started.

Add functionality to create client applications and contracts

The CLI currently does not provide a command to create client applications or contracts between client applications and apis.

It would be a useful feature if these things could be created using the declarative mode (similar to how plugins etc can be configured from a yaml or json file).

Code formatting profile

I noticed you guys have a particular style for laying out things such as lambdas, streams, etc.

Do you have a code formatting profile you could share? For example, eclipse, IntelliJ, etc.

Declarative support for properties file

In addition to properties provided to the CLI command directly, it should be possible to specify the path to a properties file containing key-value pairs.

Apiman docker init with declarative file launches error

Hello,

I created apiman with DockerFile and i execute a script for adding apis, organization and policies.
I used the example declarative file in apiman-cli project. But the ones that use Cache Policy do not work. The "log-headers-policy" of example works but not other. I also replaced the Cache Policy with Cors Policy and it didn't work either.
I can see api, organization and gateway created correctly.

Did you already test these files?
Can any one help me please?

Command for yaml file

java -jar /opt/apiman-cli/lib/apiman-cli.jar manager apply -f /opt/jboss/wildfly/common-api-config-ORIGINAL.yml --debug

Logs

I have "java.lang.Exception: Error: storage transaction is still open for request: /organizations/test/apis/example/versions/1.0/policie" message.

{"id":1007,"type":"Api","organizationId":"test","entityId":"example","entityVersion":"1.0","name":"Log Headers Policy","configuration":"{\n  \"direction\" : \"both\"\n}","createdBy":"admin","createdOn":1645431220241,"modifiedBy":"admin","modifiedOn":1645431220241,"definition":{"id":"log-headers-policy","policyImpl":"plugin:io.apiman.plugins:apiman-plugins-log-policy:1.4.3.Final:war/io.apiman.plugins.log_policy.LogHeadersPolicy","name":"Log Headers Policy","description":"A policy that logs the headers to std out.  Useful to analyse inbound HTTP traffic to the gateway when added as the first policy in the chain or to analyse outbound 
HTTP traffic from the gateway when added as the last policy in the chain.","icon":"fire","templates":[],"pluginId":1000,"formType":"JsonSchema","form":"schemas/log-policyDef.schema","deleted":false},"orderIndex":1}    
apiman      | <--- END HTTP (854-byte body)
apiman      | 08:13:40.256 [main] INFO  io.apiman.cli.managerapi.service.PolicyServiceImpl - Adding policy 'CachingPolicy' to API: example
apiman      | ---> HTTP POST http://localhost:8080/apiman/organizations/test/apis/example/versions/1.0/policies
apiman      | Authorization: Basic YWRtaW46YWRtaW4xMjMh
apiman      | Content-Type: application/json; charset=UTF-8
apiman      | Content-Length: 82
apiman      |
apiman      | {
apiman      |   "definitionId" : "CachingPolicy",
apiman      |   "configuration" : "{\n  \"ttl\" : 60\n}"
apiman      | }
apiman      | ---> END HTTP (82-byte body)
apiman      | 08:13:40,332 ERROR [stderr] (default task-1) java.lang.Exception: Error: storage transaction is still open for request: /organizations/test/apis/example/versions/1.0/policies
apiman      | 08:13:40,332 ERROR [stderr] (default task-1)      at deployment.apiman.war//io.apiman.manager.api.war.TransactionWatchdogFilter.doFilter(TransactionWatchdogFilter.java:60)
apiman      | 08:13:40,332 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
apiman      | 08:13:40,333 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
apiman      | 08:13:40,333 ERROR [stderr] (default task-1)      at deployment.apiman.war//io.apiman.common.servlet.DisableCachingFilter.doFilter(DisableCachingFilter.java:52)
apiman      | 08:13:40,333 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
apiman      | 08:13:40,333 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
apiman      | 08:13:40,333 ERROR [stderr] (default task-1)      at deployment.apiman.war//io.apiman.common.servlet.ApimanCorsFilter.doFilter(ApimanCorsFilter.java:88)
apiman      | 08:13:40,333 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
apiman      | 08:13:40,333 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
apiman      | 08:13:40,333 ERROR [stderr] (default task-1)      at deployment.apiman.war//io.apiman.common.servlet.LocaleFilter.doFilter(LocaleFilter.java:61)
apiman      | 08:13:40,334 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
apiman      | 08:13:40,334 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
apiman      | 08:13:40,334 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
apiman      | 08:13:40,334 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)    
apiman      | 08:13:40,334 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
apiman      | 08:13:40,334 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
apiman      | 08:13:40,334 ERROR [stderr] (default task-1)      at [email protected]//org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
apiman      | 08:13:40,335 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
apiman      | 08:13:40,335 ERROR [stderr] (default task-1)      at [email protected]//org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)
apiman      | 08:13:40,335 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
apiman      | 08:13:40,335 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117)
apiman      | 08:13:40,335 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
apiman      | 08:13:40,335 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)
apiman      | 08:13:40,335 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
apiman      | 08:13:40,336 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)     
apiman      | 08:13:40,336 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)       
apiman      | 08:13:40,336 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
apiman      | 08:13:40,336 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
apiman      | 08:13:40,336 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)     
apiman      | 08:13:40,336 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
apiman      | 08:13:40,336 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
apiman      | 08:13:40,337 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
apiman      | 08:13:40,337 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
apiman      | 08:13:40,337 ERROR [stderr] (default task-1)      at [email protected]//org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
apiman      | 08:13:40,337 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
apiman      | 08:13:40,337 ERROR [stderr] (default task-1)      at [email protected]//org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
apiman      | 08:13:40,337 ERROR [stderr] (default task-1)      at [email protected]//org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)
apiman      | 08:13:40,337 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
apiman      | 08:13:40,338 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
apiman      | 08:13:40,338 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269)
apiman      | 08:13:40,338 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78)
apiman      | 08:13:40,338 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133)
apiman      | 08:13:40,338 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130)
apiman      | 08:13:40,338 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)apiman      | 08:13:40,338 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
apiman      | 08:13:40,338 ERROR [stderr] (default task-1)      at [email protected]//org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
apiman      | 08:13:40,339 ERROR [stderr] (default task-1)      at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
apiman      | 08:13:40,339 ERROR [stderr] (default task-1)      at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
apiman      | 08:13:40,339 ERROR [stderr] (default task-1)      at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
apiman      | 08:13:40,339 ERROR [stderr] (default task-1)      at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
apiman      | 08:13:40,339 ERROR [stderr] (default task-1)      at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
apiman      | 08:13:40,339 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249)
apiman      | 08:13:40,339 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78)
apiman      | 08:13:40,340 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99)
apiman      | 08:13:40,340 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.server.Connectors.executeRootHandler(Connectors.java:387)
apiman      | 08:13:40,340 ERROR [stderr] (default task-1)      at [email protected]//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:841)
apiman      | 08:13:40,340 ERROR [stderr] (default task-1)      at [email protected]//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
apiman      | 08:13:40,340 ERROR [stderr] (default task-1)      at [email protected]//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
apiman      | 08:13:40,340 ERROR [stderr] (default task-1)      at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
apiman      | 08:13:40,340 ERROR [stderr] (default task-1)      at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
apiman      | 08:13:40,341 ERROR [stderr] (default task-1)      at [email protected]//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1280)
apiman      | 08:13:40,341 ERROR [stderr] (default task-1)      at java.base/java.lang.Thread.run(Thread.java:834)
apiman      | 08:13:40,342 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /apiman/organizations/test/apis/example/versions/1.0/policies: javax.servlet.ServletException: java.lang.Exception: Error: storage transaction is still open for request: /organizations/test/apis/example/versions/1.0/policies
apiman      |   at deployment.apiman.war//io.apiman.manager.api.war.TransactionWatchdogFilter.doFilter(TransactionWatchdogFilter.java:64)
apiman      |   at [email protected]//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
apiman      |   at [email protected]//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
apiman      |   at deployment.apiman.war//io.apiman.common.servlet.DisableCachingFilter.doFilter(DisableCachingFilter.java:52)
apiman      |   at [email protected]//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
apiman      |   at [email protected]//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
apiman      |   at deployment.apiman.war//io.apiman.common.servlet.ApimanCorsFilter.doFilter(ApimanCorsFilter.java:88)
apiman      |   at [email protected]//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
apiman      |   at [email protected]//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
apiman      |   at deployment.apiman.war//io.apiman.common.servlet.LocaleFilter.doFilter(LocaleFilter.java:61)
apiman      |   at [email protected]//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
apiman      |   at [email protected]//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
apiman      |   at [email protected]//io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
apiman      |   at [email protected]//io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
apiman      |   at [email protected]//io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
apiman      |   at [email protected]//io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
apiman      |   at [email protected]//org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
apiman      |   at [email protected]//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
apiman      |   at [email protected]//org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)
apiman      |   at [email protected]//io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
apiman      |   at [email protected]//io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117)
apiman      |   at [email protected]//io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
apiman      |   at [email protected]//io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)
apiman      |   at [email protected]//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
apiman      |   at [email protected]//io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
apiman      |   at [email protected]//io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
apiman      |   at [email protected]//io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
apiman      |   at [email protected]//io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
apiman      |   at [email protected]//io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
apiman      |   at [email protected]//io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
apiman      |   at [email protected]//io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
apiman      |   at [email protected]//io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
apiman      |   at [email protected]//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
apiman      |   at [email protected]//org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
apiman      |   at [email protected]//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
apiman      |   at [email protected]//org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
apiman      |   at [email protected]//org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)
apiman      |   at [email protected]//io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
apiman      |   at [email protected]//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
apiman      |   at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269)
apiman      |   at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78)
apiman      |   at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133)
apiman      |   at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130)
apiman      |   at [email protected]//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
apiman      |   at [email protected]//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
apiman      |   at [email protected]//org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
apiman      |   at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)apiman      |   at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)apiman      |   at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)apiman      |   at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)apiman      |   at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)apiman      |   at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249)
apiman      |   at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78)
apiman      |   at [email protected]//io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99)
apiman      |   at [email protected]//io.undertow.server.Connectors.executeRootHandler(Connectors.java:387)
apiman      |   at [email protected]//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:841)
apiman      |   at [email protected]//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
apiman      |   at [email protected]//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
apiman      |   at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
apiman      |   at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
apiman      |   at [email protected]//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1280)
apiman      |   at java.base/java.lang.Thread.run(Thread.java:834)
apiman      | Caused by: java.lang.Exception: Error: storage transaction is still open for request: /organizations/test/apis/example/versions/1.0/policies
apiman      |   at deployment.apiman.war//io.apiman.manager.api.war.TransactionWatchdogFilter.doFilter(TransactionWatchdogFilter.java:60)
apiman      |   ... 61 more

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.