Client and Plan support - #36

Open
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2
Open

Client and Plan support#36
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2

Conversation

@msavy

@msavymsavy commented Apr 7, 2018

Copy link
Copy Markdown
Member

Reworked jquantins work, but excluded the deepList stuff which needs some additional discussion.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

@outofcoffee Any idea which branch I should work against?

Also just noticed a few bits I need to zap before merging, but please have a play and see if it works for you.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Declarative bits that are missing will be committed shortly

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Now I can see that the CLI needs a couple of extra commands adding to enable plans to be added to APIs (i.e. non declarative)

@msavy

msavy commented Apr 8, 2018

Copy link
Copy Markdown
MemberAuthor

@pcornish what is your philosophy when it comes to error handling? For example, at the moment with certain list commands you just get an ugly exception.

My thoughts are that we could parse the returned JSON and display the canonical message? What do you think.

Or is this already meant to happen?

e.g.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
{"type":"PlanNotFoundException","errorCode":6002,"message":"Plan does not exist: fooplanj","moreInfoUrl":null,"stacktrace":"io.apiman.manager.api.rest.contract.exceptions.PlanNotFoundException: Plan does not exist: fooplanj\n\tat io.apiman.manager.api.rest.impl.util.ExceptionFactory.planNotFoundException(ExceptionFactory.java:302)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContractInternal(OrganizationResourceImpl.java:1004)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContract(OrganizationResourceImpl.java:945)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl$Proxy$_$$_WeldClientProxy.createContract(Unknown Source)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:402)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209)\n\tat org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)\n\tat io.apiman.common.servlet.RootResourceFilter.doFilter(RootResourceFilter.java:59)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.war.TransactionWatchdogFilter.doFilter(TransactionWatchdogFilter.java:57)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.security.impl.DefaultSecurityContextFilter.doFilter(DefaultSecurityContextFilter.java:56)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.DisableCachingFilter.doFilter(DisableCachingFilter.java:52)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.ApimanCorsFilter.doFilter(ApimanCorsFilter.java:71)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.LocaleFilter.doFilter(LocaleFilter.java:61)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)\n\tat io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)\n\tat io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)\n\tat org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)\n\tat io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)\n\tat io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)\n\tat io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)\n\tat io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)\n\tat io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)\n\tat io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)\n\tat io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)\n\tat io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)\n\tat io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)\n\tat io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)\n\tat io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)\n\tat io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)\n\tat io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)\n\tat io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\n"}

vs (mocked up example) -- something better than a huge trace.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
PlanNotFoundException ErrorCode: 6002
Message: Plan does not exist: fooplanj

I'm still not quite clear whether this is meant to be happening but it's b0rked or we should be relying on CLI-side validation (which seems a lot of work and maintenance in this circumstance).

msavy added 2 commits April 9, 2018 14:39
Behaviour seemed to have changed for some reason, so took opportunity to align
dependencies with Apiman main project use the ser/deser feature to fix.
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

Okay, was having an issue that turns out to be related to a bug in Maven 3.5.0's snapshot metadata.

Will be pushing some more changes shortly, hopefully.

msavy added 4 commits April 11, 2018 15:21
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I think your recent "exception cause" changes on apiman/apiman may have had an unintended side-effect of breaking the apiman-cli tests -- as some exceptions that were 404 are now showing as 500s.

Investigating!

@msavy

Copy link
Copy Markdown
MemberAuthor

Reference for the above d9f95c2990f01197152c5d5f3ed855aca1ea5bc9

msavy added 2 commits April 12, 2018 16:54
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@outofcoffee

outofcoffee commented May 26, 2018

Copy link
Copy Markdown
Collaborator

Hi @msavy. On latest master (e35c0f0) and develop (776a17e) the tests look OK. Here are the steps I ran (straight from the travis config file):

$ docker run -d -p 8080:8080 apiman/on-wildfly10:master
$ ./gradlew test -PintegrationTest --info --stacktrace
...
BUILD SUCCESSFUL in 35s
5 actionable tasks: 3 executed, 2 up-to-date

If you have some specific tests you want me to look at let me know and I'll happily take a look.

@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I reverted a PR on apiman/apiman itself as it was causing the unintended side-effects.

@outofcoffee

Copy link
Copy Markdown
Collaborator

Ah yes, sorry, I did see that :(

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@msavy@outofcoffee@jquantin
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Client and Plan support - #36

Open
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2
Open

Client and Plan support#36
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2

Conversation

@msavy

@msavymsavy commented Apr 7, 2018

Copy link
Copy Markdown
Member

Reworked jquantins work, but excluded the deepList stuff which needs some additional discussion.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

@outofcoffee Any idea which branch I should work against?

Also just noticed a few bits I need to zap before merging, but please have a play and see if it works for you.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Declarative bits that are missing will be committed shortly

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Now I can see that the CLI needs a couple of extra commands adding to enable plans to be added to APIs (i.e. non declarative)

@msavy

msavy commented Apr 8, 2018

Copy link
Copy Markdown
MemberAuthor

@pcornish what is your philosophy when it comes to error handling? For example, at the moment with certain list commands you just get an ugly exception.

My thoughts are that we could parse the returned JSON and display the canonical message? What do you think.

Or is this already meant to happen?

e.g.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
{"type":"PlanNotFoundException","errorCode":6002,"message":"Plan does not exist: fooplanj","moreInfoUrl":null,"stacktrace":"io.apiman.manager.api.rest.contract.exceptions.PlanNotFoundException: Plan does not exist: fooplanj\n\tat io.apiman.manager.api.rest.impl.util.ExceptionFactory.planNotFoundException(ExceptionFactory.java:302)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContractInternal(OrganizationResourceImpl.java:1004)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContract(OrganizationResourceImpl.java:945)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl$Proxy$_$$_WeldClientProxy.createContract(Unknown Source)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:402)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209)\n\tat org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)\n\tat io.apiman.common.servlet.RootResourceFilter.doFilter(RootResourceFilter.java:59)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.war.TransactionWatchdogFilter.doFilter(TransactionWatchdogFilter.java:57)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.security.impl.DefaultSecurityContextFilter.doFilter(DefaultSecurityContextFilter.java:56)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.DisableCachingFilter.doFilter(DisableCachingFilter.java:52)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.ApimanCorsFilter.doFilter(ApimanCorsFilter.java:71)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.LocaleFilter.doFilter(LocaleFilter.java:61)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)\n\tat io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)\n\tat io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)\n\tat org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)\n\tat io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)\n\tat io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)\n\tat io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)\n\tat io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)\n\tat io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)\n\tat io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)\n\tat io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)\n\tat io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)\n\tat io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)\n\tat io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)\n\tat io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)\n\tat io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)\n\tat io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)\n\tat io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\n"}

vs (mocked up example) -- something better than a huge trace.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
PlanNotFoundException ErrorCode: 6002
Message: Plan does not exist: fooplanj

I'm still not quite clear whether this is meant to be happening but it's b0rked or we should be relying on CLI-side validation (which seems a lot of work and maintenance in this circumstance).

msavy added 2 commits April 9, 2018 14:39
Behaviour seemed to have changed for some reason, so took opportunity to align
dependencies with Apiman main project use the ser/deser feature to fix.
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

Okay, was having an issue that turns out to be related to a bug in Maven 3.5.0's snapshot metadata.

Will be pushing some more changes shortly, hopefully.

msavy added 4 commits April 11, 2018 15:21
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I think your recent "exception cause" changes on apiman/apiman may have had an unintended side-effect of breaking the apiman-cli tests -- as some exceptions that were 404 are now showing as 500s.

Investigating!

@msavy

Copy link
Copy Markdown
MemberAuthor

Reference for the above d9f95c2990f01197152c5d5f3ed855aca1ea5bc9

msavy added 2 commits April 12, 2018 16:54
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@outofcoffee

outofcoffee commented May 26, 2018

Copy link
Copy Markdown
Collaborator

Hi @msavy. On latest master (e35c0f0) and develop (776a17e) the tests look OK. Here are the steps I ran (straight from the travis config file):

$ docker run -d -p 8080:8080 apiman/on-wildfly10:master
$ ./gradlew test -PintegrationTest --info --stacktrace
...
BUILD SUCCESSFUL in 35s
5 actionable tasks: 3 executed, 2 up-to-date

If you have some specific tests you want me to look at let me know and I'll happily take a look.

@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I reverted a PR on apiman/apiman itself as it was causing the unintended side-effects.

@outofcoffee

Copy link
Copy Markdown
Collaborator

Ah yes, sorry, I did see that :(

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@msavy@outofcoffee@jquantin
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Client and Plan support - #36

Open
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2
Open

Client and Plan support#36
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2

Conversation

@msavy

@msavymsavy commented Apr 7, 2018

Copy link
Copy Markdown
Member

Reworked jquantins work, but excluded the deepList stuff which needs some additional discussion.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

@outofcoffee Any idea which branch I should work against?

Also just noticed a few bits I need to zap before merging, but please have a play and see if it works for you.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Declarative bits that are missing will be committed shortly

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Now I can see that the CLI needs a couple of extra commands adding to enable plans to be added to APIs (i.e. non declarative)

@msavy

msavy commented Apr 8, 2018

Copy link
Copy Markdown
MemberAuthor

@pcornish what is your philosophy when it comes to error handling? For example, at the moment with certain list commands you just get an ugly exception.

My thoughts are that we could parse the returned JSON and display the canonical message? What do you think.

Or is this already meant to happen?

e.g.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
{"type":"PlanNotFoundException","errorCode":6002,"message":"Plan does not exist: fooplanj","moreInfoUrl":null,"stacktrace":"io.apiman.manager.api.rest.contract.exceptions.PlanNotFoundException: Plan does not exist: fooplanj\n\tat io.apiman.manager.api.rest.impl.util.ExceptionFactory.planNotFoundException(ExceptionFactory.java:302)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContractInternal(OrganizationResourceImpl.java:1004)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContract(OrganizationResourceImpl.java:945)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl$Proxy$_$$_WeldClientProxy.createContract(Unknown Source)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:402)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209)\n\tat org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)\n\tat io.apiman.common.servlet.RootResourceFilter.doFilter(RootResourceFilter.java:59)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.war.TransactionWatchdogFilter.doFilter(TransactionWatchdogFilter.java:57)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.security.impl.DefaultSecurityContextFilter.doFilter(DefaultSecurityContextFilter.java:56)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.DisableCachingFilter.doFilter(DisableCachingFilter.java:52)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.ApimanCorsFilter.doFilter(ApimanCorsFilter.java:71)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.LocaleFilter.doFilter(LocaleFilter.java:61)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)\n\tat io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)\n\tat io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)\n\tat org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)\n\tat io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)\n\tat io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)\n\tat io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)\n\tat io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)\n\tat io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)\n\tat io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)\n\tat io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)\n\tat io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)\n\tat io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)\n\tat io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)\n\tat io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)\n\tat io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)\n\tat io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)\n\tat io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\n"}

vs (mocked up example) -- something better than a huge trace.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
PlanNotFoundException ErrorCode: 6002
Message: Plan does not exist: fooplanj

I'm still not quite clear whether this is meant to be happening but it's b0rked or we should be relying on CLI-side validation (which seems a lot of work and maintenance in this circumstance).

msavy added 2 commits April 9, 2018 14:39
Behaviour seemed to have changed for some reason, so took opportunity to align
dependencies with Apiman main project use the ser/deser feature to fix.
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

Okay, was having an issue that turns out to be related to a bug in Maven 3.5.0's snapshot metadata.

Will be pushing some more changes shortly, hopefully.

msavy added 4 commits April 11, 2018 15:21
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I think your recent "exception cause" changes on apiman/apiman may have had an unintended side-effect of breaking the apiman-cli tests -- as some exceptions that were 404 are now showing as 500s.

Investigating!

@msavy

Copy link
Copy Markdown
MemberAuthor

Reference for the above d9f95c2990f01197152c5d5f3ed855aca1ea5bc9

msavy added 2 commits April 12, 2018 16:54
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@outofcoffee

outofcoffee commented May 26, 2018

Copy link
Copy Markdown
Collaborator

Hi @msavy. On latest master (e35c0f0) and develop (776a17e) the tests look OK. Here are the steps I ran (straight from the travis config file):

$ docker run -d -p 8080:8080 apiman/on-wildfly10:master
$ ./gradlew test -PintegrationTest --info --stacktrace
...
BUILD SUCCESSFUL in 35s
5 actionable tasks: 3 executed, 2 up-to-date

If you have some specific tests you want me to look at let me know and I'll happily take a look.

@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I reverted a PR on apiman/apiman itself as it was causing the unintended side-effects.

@outofcoffee

Copy link
Copy Markdown
Collaborator

Ah yes, sorry, I did see that :(

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@msavy@outofcoffee@jquantin
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Client and Plan support - #36

Open
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2
Open

Client and Plan support#36
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2

Conversation

@msavy

@msavymsavy commented Apr 7, 2018

Copy link
Copy Markdown
Member

Reworked jquantins work, but excluded the deepList stuff which needs some additional discussion.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

@outofcoffee Any idea which branch I should work against?

Also just noticed a few bits I need to zap before merging, but please have a play and see if it works for you.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Declarative bits that are missing will be committed shortly

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Now I can see that the CLI needs a couple of extra commands adding to enable plans to be added to APIs (i.e. non declarative)

@msavy

msavy commented Apr 8, 2018

Copy link
Copy Markdown
MemberAuthor

@pcornish what is your philosophy when it comes to error handling? For example, at the moment with certain list commands you just get an ugly exception.

My thoughts are that we could parse the returned JSON and display the canonical message? What do you think.

Or is this already meant to happen?

e.g.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
{"type":"PlanNotFoundException","errorCode":6002,"message":"Plan does not exist: fooplanj","moreInfoUrl":null,"stacktrace":"io.apiman.manager.api.rest.contract.exceptions.PlanNotFoundException: Plan does not exist: fooplanj\n\tat io.apiman.manager.api.rest.impl.util.ExceptionFactory.planNotFoundException(ExceptionFactory.java:302)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContractInternal(OrganizationResourceImpl.java:1004)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContract(OrganizationResourceImpl.java:945)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl$Proxy$_$$_WeldClientProxy.createContract(Unknown Source)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:402)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209)\n\tat org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)\n\tat io.apiman.common.servlet.RootResourceFilter.doFilter(RootResourceFilter.java:59)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.war.TransactionWatchdogFilter.doFilter(TransactionWatchdogFilter.java:57)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.security.impl.DefaultSecurityContextFilter.doFilter(DefaultSecurityContextFilter.java:56)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.DisableCachingFilter.doFilter(DisableCachingFilter.java:52)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.ApimanCorsFilter.doFilter(ApimanCorsFilter.java:71)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.LocaleFilter.doFilter(LocaleFilter.java:61)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)\n\tat io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)\n\tat io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)\n\tat org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)\n\tat io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)\n\tat io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)\n\tat io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)\n\tat io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)\n\tat io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)\n\tat io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)\n\tat io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)\n\tat io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)\n\tat io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)\n\tat io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)\n\tat io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)\n\tat io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)\n\tat io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)\n\tat io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\n"}

vs (mocked up example) -- something better than a huge trace.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
PlanNotFoundException ErrorCode: 6002
Message: Plan does not exist: fooplanj

I'm still not quite clear whether this is meant to be happening but it's b0rked or we should be relying on CLI-side validation (which seems a lot of work and maintenance in this circumstance).

msavy added 2 commits April 9, 2018 14:39
Behaviour seemed to have changed for some reason, so took opportunity to align
dependencies with Apiman main project use the ser/deser feature to fix.
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

Okay, was having an issue that turns out to be related to a bug in Maven 3.5.0's snapshot metadata.

Will be pushing some more changes shortly, hopefully.

msavy added 4 commits April 11, 2018 15:21
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I think your recent "exception cause" changes on apiman/apiman may have had an unintended side-effect of breaking the apiman-cli tests -- as some exceptions that were 404 are now showing as 500s.

Investigating!

@msavy

Copy link
Copy Markdown
MemberAuthor

Reference for the above d9f95c2990f01197152c5d5f3ed855aca1ea5bc9

msavy added 2 commits April 12, 2018 16:54
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@outofcoffee

outofcoffee commented May 26, 2018

Copy link
Copy Markdown
Collaborator

Hi @msavy. On latest master (e35c0f0) and develop (776a17e) the tests look OK. Here are the steps I ran (straight from the travis config file):

$ docker run -d -p 8080:8080 apiman/on-wildfly10:master
$ ./gradlew test -PintegrationTest --info --stacktrace
...
BUILD SUCCESSFUL in 35s
5 actionable tasks: 3 executed, 2 up-to-date

If you have some specific tests you want me to look at let me know and I'll happily take a look.

@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I reverted a PR on apiman/apiman itself as it was causing the unintended side-effects.

@outofcoffee

Copy link
Copy Markdown
Collaborator

Ah yes, sorry, I did see that :(

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@msavy@outofcoffee@jquantin
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Client and Plan support - #36

Open
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2
Open

Client and Plan support#36
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2

Conversation

@msavy

@msavymsavy commented Apr 7, 2018

Copy link
Copy Markdown
Member

Reworked jquantins work, but excluded the deepList stuff which needs some additional discussion.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

@outofcoffee Any idea which branch I should work against?

Also just noticed a few bits I need to zap before merging, but please have a play and see if it works for you.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Declarative bits that are missing will be committed shortly

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Now I can see that the CLI needs a couple of extra commands adding to enable plans to be added to APIs (i.e. non declarative)

@msavy

msavy commented Apr 8, 2018

Copy link
Copy Markdown
MemberAuthor

@pcornish what is your philosophy when it comes to error handling? For example, at the moment with certain list commands you just get an ugly exception.

My thoughts are that we could parse the returned JSON and display the canonical message? What do you think.

Or is this already meant to happen?

e.g.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
{"type":"PlanNotFoundException","errorCode":6002,"message":"Plan does not exist: fooplanj","moreInfoUrl":null,"stacktrace":"io.apiman.manager.api.rest.contract.exceptions.PlanNotFoundException: Plan does not exist: fooplanj\n\tat io.apiman.manager.api.rest.impl.util.ExceptionFactory.planNotFoundException(ExceptionFactory.java:302)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContractInternal(OrganizationResourceImpl.java:1004)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContract(OrganizationResourceImpl.java:945)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl$Proxy$_$$_WeldClientProxy.createContract(Unknown Source)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:402)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209)\n\tat org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)\n\tat io.apiman.common.servlet.RootResourceFilter.doFilter(RootResourceFilter.java:59)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.war.TransactionWatchdogFilter.doFilter(TransactionWatchdogFilter.java:57)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.security.impl.DefaultSecurityContextFilter.doFilter(DefaultSecurityContextFilter.java:56)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.DisableCachingFilter.doFilter(DisableCachingFilter.java:52)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.ApimanCorsFilter.doFilter(ApimanCorsFilter.java:71)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.LocaleFilter.doFilter(LocaleFilter.java:61)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)\n\tat io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)\n\tat io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)\n\tat org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)\n\tat io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)\n\tat io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)\n\tat io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)\n\tat io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)\n\tat io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)\n\tat io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)\n\tat io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)\n\tat io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)\n\tat io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)\n\tat io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)\n\tat io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)\n\tat io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)\n\tat io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)\n\tat io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\n"}

vs (mocked up example) -- something better than a huge trace.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
PlanNotFoundException ErrorCode: 6002
Message: Plan does not exist: fooplanj

I'm still not quite clear whether this is meant to be happening but it's b0rked or we should be relying on CLI-side validation (which seems a lot of work and maintenance in this circumstance).

msavy added 2 commits April 9, 2018 14:39
Behaviour seemed to have changed for some reason, so took opportunity to align
dependencies with Apiman main project use the ser/deser feature to fix.
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

Okay, was having an issue that turns out to be related to a bug in Maven 3.5.0's snapshot metadata.

Will be pushing some more changes shortly, hopefully.

msavy added 4 commits April 11, 2018 15:21
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I think your recent "exception cause" changes on apiman/apiman may have had an unintended side-effect of breaking the apiman-cli tests -- as some exceptions that were 404 are now showing as 500s.

Investigating!

@msavy

Copy link
Copy Markdown
MemberAuthor

Reference for the above d9f95c2990f01197152c5d5f3ed855aca1ea5bc9

msavy added 2 commits April 12, 2018 16:54
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@outofcoffee

outofcoffee commented May 26, 2018

Copy link
Copy Markdown
Collaborator

Hi @msavy. On latest master (e35c0f0) and develop (776a17e) the tests look OK. Here are the steps I ran (straight from the travis config file):

$ docker run -d -p 8080:8080 apiman/on-wildfly10:master
$ ./gradlew test -PintegrationTest --info --stacktrace
...
BUILD SUCCESSFUL in 35s
5 actionable tasks: 3 executed, 2 up-to-date

If you have some specific tests you want me to look at let me know and I'll happily take a look.

@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I reverted a PR on apiman/apiman itself as it was causing the unintended side-effects.

@outofcoffee

Copy link
Copy Markdown
Collaborator

Ah yes, sorry, I did see that :(

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@msavy@outofcoffee@jquantin
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Client and Plan support - #36

Open
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2
Open

Client and Plan support#36
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2

Conversation

@msavy

@msavymsavy commented Apr 7, 2018

Copy link
Copy Markdown
Member

Reworked jquantins work, but excluded the deepList stuff which needs some additional discussion.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

@outofcoffee Any idea which branch I should work against?

Also just noticed a few bits I need to zap before merging, but please have a play and see if it works for you.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Declarative bits that are missing will be committed shortly

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Now I can see that the CLI needs a couple of extra commands adding to enable plans to be added to APIs (i.e. non declarative)

@msavy

msavy commented Apr 8, 2018

Copy link
Copy Markdown
MemberAuthor

@pcornish what is your philosophy when it comes to error handling? For example, at the moment with certain list commands you just get an ugly exception.

My thoughts are that we could parse the returned JSON and display the canonical message? What do you think.

Or is this already meant to happen?

e.g.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
{"type":"PlanNotFoundException","errorCode":6002,"message":"Plan does not exist: fooplanj","moreInfoUrl":null,"stacktrace":"io.apiman.manager.api.rest.contract.exceptions.PlanNotFoundException: Plan does not exist: fooplanj\n\tat io.apiman.manager.api.rest.impl.util.ExceptionFactory.planNotFoundException(ExceptionFactory.java:302)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContractInternal(OrganizationResourceImpl.java:1004)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContract(OrganizationResourceImpl.java:945)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl$Proxy$_$$_WeldClientProxy.createContract(Unknown Source)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:402)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209)\n\tat org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)\n\tat io.apiman.common.servlet.RootResourceFilter.doFilter(RootResourceFilter.java:59)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.war.TransactionWatchdogFilter.doFilter(TransactionWatchdogFilter.java:57)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.security.impl.DefaultSecurityContextFilter.doFilter(DefaultSecurityContextFilter.java:56)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.DisableCachingFilter.doFilter(DisableCachingFilter.java:52)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.ApimanCorsFilter.doFilter(ApimanCorsFilter.java:71)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.LocaleFilter.doFilter(LocaleFilter.java:61)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)\n\tat io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)\n\tat io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)\n\tat org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)\n\tat io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)\n\tat io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)\n\tat io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)\n\tat io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)\n\tat io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)\n\tat io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)\n\tat io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)\n\tat io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)\n\tat io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)\n\tat io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)\n\tat io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)\n\tat io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)\n\tat io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)\n\tat io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\n"}

vs (mocked up example) -- something better than a huge trace.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
PlanNotFoundException ErrorCode: 6002
Message: Plan does not exist: fooplanj

I'm still not quite clear whether this is meant to be happening but it's b0rked or we should be relying on CLI-side validation (which seems a lot of work and maintenance in this circumstance).

msavy added 2 commits April 9, 2018 14:39
Behaviour seemed to have changed for some reason, so took opportunity to align
dependencies with Apiman main project use the ser/deser feature to fix.
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

Okay, was having an issue that turns out to be related to a bug in Maven 3.5.0's snapshot metadata.

Will be pushing some more changes shortly, hopefully.

msavy added 4 commits April 11, 2018 15:21
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I think your recent "exception cause" changes on apiman/apiman may have had an unintended side-effect of breaking the apiman-cli tests -- as some exceptions that were 404 are now showing as 500s.

Investigating!

@msavy

Copy link
Copy Markdown
MemberAuthor

Reference for the above d9f95c2990f01197152c5d5f3ed855aca1ea5bc9

msavy added 2 commits April 12, 2018 16:54
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@outofcoffee

outofcoffee commented May 26, 2018

Copy link
Copy Markdown
Collaborator

Hi @msavy. On latest master (e35c0f0) and develop (776a17e) the tests look OK. Here are the steps I ran (straight from the travis config file):

$ docker run -d -p 8080:8080 apiman/on-wildfly10:master
$ ./gradlew test -PintegrationTest --info --stacktrace
...
BUILD SUCCESSFUL in 35s
5 actionable tasks: 3 executed, 2 up-to-date

If you have some specific tests you want me to look at let me know and I'll happily take a look.

@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I reverted a PR on apiman/apiman itself as it was causing the unintended side-effects.

@outofcoffee

Copy link
Copy Markdown
Collaborator

Ah yes, sorry, I did see that :(

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@msavy@outofcoffee@jquantin
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Client and Plan support - #36

Open
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2
Open

Client and Plan support#36
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2

Conversation

@msavy

@msavymsavy commented Apr 7, 2018

Copy link
Copy Markdown
Member

Reworked jquantins work, but excluded the deepList stuff which needs some additional discussion.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

@outofcoffee Any idea which branch I should work against?

Also just noticed a few bits I need to zap before merging, but please have a play and see if it works for you.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Declarative bits that are missing will be committed shortly

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Now I can see that the CLI needs a couple of extra commands adding to enable plans to be added to APIs (i.e. non declarative)

@msavy

msavy commented Apr 8, 2018

Copy link
Copy Markdown
MemberAuthor

@pcornish what is your philosophy when it comes to error handling? For example, at the moment with certain list commands you just get an ugly exception.

My thoughts are that we could parse the returned JSON and display the canonical message? What do you think.

Or is this already meant to happen?

e.g.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
{"type":"PlanNotFoundException","errorCode":6002,"message":"Plan does not exist: fooplanj","moreInfoUrl":null,"stacktrace":"io.apiman.manager.api.rest.contract.exceptions.PlanNotFoundException: Plan does not exist: fooplanj\n\tat io.apiman.manager.api.rest.impl.util.ExceptionFactory.planNotFoundException(ExceptionFactory.java:302)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContractInternal(OrganizationResourceImpl.java:1004)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContract(OrganizationResourceImpl.java:945)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl$Proxy$_$$_WeldClientProxy.createContract(Unknown Source)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:402)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209)\n\tat org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)\n\tat io.apiman.common.servlet.RootResourceFilter.doFilter(RootResourceFilter.java:59)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.war.TransactionWatchdogFilter.doFilter(TransactionWatchdogFilter.java:57)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.security.impl.DefaultSecurityContextFilter.doFilter(DefaultSecurityContextFilter.java:56)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.DisableCachingFilter.doFilter(DisableCachingFilter.java:52)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.ApimanCorsFilter.doFilter(ApimanCorsFilter.java:71)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.LocaleFilter.doFilter(LocaleFilter.java:61)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)\n\tat io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)\n\tat io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)\n\tat org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)\n\tat io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)\n\tat io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)\n\tat io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)\n\tat io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)\n\tat io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)\n\tat io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)\n\tat io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)\n\tat io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)\n\tat io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)\n\tat io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)\n\tat io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)\n\tat io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)\n\tat io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)\n\tat io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\n"}

vs (mocked up example) -- something better than a huge trace.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
PlanNotFoundException ErrorCode: 6002
Message: Plan does not exist: fooplanj

I'm still not quite clear whether this is meant to be happening but it's b0rked or we should be relying on CLI-side validation (which seems a lot of work and maintenance in this circumstance).

msavy added 2 commits April 9, 2018 14:39
Behaviour seemed to have changed for some reason, so took opportunity to align
dependencies with Apiman main project use the ser/deser feature to fix.
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

Okay, was having an issue that turns out to be related to a bug in Maven 3.5.0's snapshot metadata.

Will be pushing some more changes shortly, hopefully.

msavy added 4 commits April 11, 2018 15:21
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I think your recent "exception cause" changes on apiman/apiman may have had an unintended side-effect of breaking the apiman-cli tests -- as some exceptions that were 404 are now showing as 500s.

Investigating!

@msavy

Copy link
Copy Markdown
MemberAuthor

Reference for the above d9f95c2990f01197152c5d5f3ed855aca1ea5bc9

msavy added 2 commits April 12, 2018 16:54
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@outofcoffee

outofcoffee commented May 26, 2018

Copy link
Copy Markdown
Collaborator

Hi @msavy. On latest master (e35c0f0) and develop (776a17e) the tests look OK. Here are the steps I ran (straight from the travis config file):

$ docker run -d -p 8080:8080 apiman/on-wildfly10:master
$ ./gradlew test -PintegrationTest --info --stacktrace
...
BUILD SUCCESSFUL in 35s
5 actionable tasks: 3 executed, 2 up-to-date

If you have some specific tests you want me to look at let me know and I'll happily take a look.

@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I reverted a PR on apiman/apiman itself as it was causing the unintended side-effects.

@outofcoffee

Copy link
Copy Markdown
Collaborator

Ah yes, sorry, I did see that :(

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@msavy@outofcoffee@jquantin
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Client and Plan support - #36

Open
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2
Open

Client and Plan support#36
msavy wants to merge 15 commits into
apiman:masterfrom
msavy:develop-quantin-cherrypick-2

Conversation

@msavy

@msavymsavy commented Apr 7, 2018

Copy link
Copy Markdown
Member

Reworked jquantins work, but excluded the deepList stuff which needs some additional discussion.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

@outofcoffee Any idea which branch I should work against?

Also just noticed a few bits I need to zap before merging, but please have a play and see if it works for you.

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Declarative bits that are missing will be committed shortly

@msavy

msavy commented Apr 7, 2018

Copy link
Copy Markdown
MemberAuthor

Now I can see that the CLI needs a couple of extra commands adding to enable plans to be added to APIs (i.e. non declarative)

@msavy

msavy commented Apr 8, 2018

Copy link
Copy Markdown
MemberAuthor

@pcornish what is your philosophy when it comes to error handling? For example, at the moment with certain list commands you just get an ugly exception.

My thoughts are that we could parse the returned JSON and display the canonical message? What do you think.

Or is this already meant to happen?

e.g.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
{"type":"PlanNotFoundException","errorCode":6002,"message":"Plan does not exist: fooplanj","moreInfoUrl":null,"stacktrace":"io.apiman.manager.api.rest.contract.exceptions.PlanNotFoundException: Plan does not exist: fooplanj\n\tat io.apiman.manager.api.rest.impl.util.ExceptionFactory.planNotFoundException(ExceptionFactory.java:302)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContractInternal(OrganizationResourceImpl.java:1004)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl.createContract(OrganizationResourceImpl.java:945)\n\tat io.apiman.manager.api.rest.impl.OrganizationResourceImpl$Proxy$_$$_WeldClientProxy.createContract(Unknown Source)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:402)\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209)\n\tat org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)\n\tat org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)\n\tat io.apiman.common.servlet.RootResourceFilter.doFilter(RootResourceFilter.java:59)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.war.TransactionWatchdogFilter.doFilter(TransactionWatchdogFilter.java:57)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.manager.api.security.impl.DefaultSecurityContextFilter.doFilter(DefaultSecurityContextFilter.java:56)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.DisableCachingFilter.doFilter(DisableCachingFilter.java:52)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.ApimanCorsFilter.doFilter(ApimanCorsFilter.java:71)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.apiman.common.servlet.LocaleFilter.doFilter(LocaleFilter.java:61)\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\n\tat io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)\n\tat io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)\n\tat io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)\n\tat org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)\n\tat io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)\n\tat io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)\n\tat io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)\n\tat io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)\n\tat io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)\n\tat io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)\n\tat io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)\n\tat io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)\n\tat io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)\n\tat io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)\n\tat io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)\n\tat io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)\n\tat io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)\n\tat io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\n"}

vs (mocked up example) -- something better than a huge trace.

./apiman manager client contract create -o foo -n myclient -v 1.0 -an myapi -av 1 -pn fooplanj
ERROR HTTP 404 Not Found but expected 200:
PlanNotFoundException ErrorCode: 6002
Message: Plan does not exist: fooplanj

I'm still not quite clear whether this is meant to be happening but it's b0rked or we should be relying on CLI-side validation (which seems a lot of work and maintenance in this circumstance).

msavy added 2 commits April 9, 2018 14:39
Behaviour seemed to have changed for some reason, so took opportunity to align
dependencies with Apiman main project use the ser/deser feature to fix.
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

Okay, was having an issue that turns out to be related to a bug in Maven 3.5.0's snapshot metadata.

Will be pushing some more changes shortly, hopefully.

msavy added 4 commits April 11, 2018 15:21
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I think your recent "exception cause" changes on apiman/apiman may have had an unintended side-effect of breaking the apiman-cli tests -- as some exceptions that were 404 are now showing as 500s.

Investigating!

@msavy

Copy link
Copy Markdown
MemberAuthor

Reference for the above d9f95c2990f01197152c5d5f3ed855aca1ea5bc9

msavy added 2 commits April 12, 2018 16:54
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
Signed-off-by: Marc Savy <marc@rhymewithgravy.com>
@outofcoffee

outofcoffee commented May 26, 2018

Copy link
Copy Markdown
Collaborator

Hi @msavy. On latest master (e35c0f0) and develop (776a17e) the tests look OK. Here are the steps I ran (straight from the travis config file):

$ docker run -d -p 8080:8080 apiman/on-wildfly10:master
$ ./gradlew test -PintegrationTest --info --stacktrace
...
BUILD SUCCESSFUL in 35s
5 actionable tasks: 3 executed, 2 up-to-date

If you have some specific tests you want me to look at let me know and I'll happily take a look.

@msavy

Copy link
Copy Markdown
MemberAuthor

@pcornish I reverted a PR on apiman/apiman itself as it was causing the unintended side-effects.

@outofcoffee

Copy link
Copy Markdown
Collaborator

Ah yes, sorry, I did see that :(

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@msavy@outofcoffee@jquantin