[ 
https://issues.apache.org/jira/browse/CXF-4873?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Guillaume Mary updated CXF-4873:
--------------------------------

    Affects Version/s: 2.7.2
    
> javax.management.RuntimeOperationsException when register performance mbean 
> using cxf webclient with an operation's uri containing some query params
> ----------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CXF-4873
>                 URL: https://issues.apache.org/jira/browse/CXF-4873
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 2.5.2, 2.7.2
>            Reporter: Guillaume Mary
>              Labels: jmx
>
> I want to monitor my CXF REST service call, then i use the Performance MBean 
> provided by CXF.  
> One of my operation use query params :
> {code:java} 
>         @GET
>         @Path("/documents/{idDocument}")
>         @Produces(MediaType.APPLICATION_OCTET_STREAM)
>         public Response loadDocument(
>           @Context Request request, @HeaderParam("If-Modified-Since") Date 
> date,
>           @PathParam("idDocument") String idDocument,
>           @QueryParam("loadingType") String loadingType)...
> {code}
> When i call the service's operation like this :
> {code:java}    
> WebClient.create("http://host/DocumentService";).path("/documents/{idDocument}","10").query("loadingType","C").accept("*/*").get(Response.class);
> {code}
> The operation works but in the log we have this stacktrace :
> {code:java}
>     WARN - Create Counter''s ObjectName failed. {0}
>     javax.management.RuntimeOperationsException
>         at javax.management.ObjectInstance.<init>(ObjectInstance.java:97)
>         at 
> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:985)
>         at 
> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:938)
>         at 
> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:330)
>         at 
> com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:516)
>         at 
> org.apache.cxf.management.jmx.InstrumentationManagerImpl.registerMBeanWithServer(InstrumentationManagerImpl.java:331)
>         at 
> org.apache.cxf.management.jmx.InstrumentationManagerImpl.register(InstrumentationManagerImpl.java:229)
>         at 
> org.apache.cxf.management.jmx.InstrumentationManagerImpl.register(InstrumentationManagerImpl.java:246)
>         at 
> org.apache.cxf.management.jmx.InstrumentationManagerImpl.register(InstrumentationManagerImpl.java:239)
>         at 
> org.apache.cxf.management.counters.CounterRepository.createCounter(CounterRepository.java:117)
>         at 
> org.apache.cxf.management.counters.CounterRepository.increaseCounter(CounterRepository.java:93)
>         at 
> org.apache.cxf.management.interceptor.AbstractMessageResponseTimeInterceptor.increaseCounter(AbstractMessageResponseTimeInterceptor.java:142)
>         at 
> org.apache.cxf.management.interceptor.AbstractMessageResponseTimeInterceptor.endHandlingMessage(AbstractMessageResponseTimeInterceptor.java:74)
>         at 
> org.apache.cxf.management.interceptor.ResponseTimeMessageInInterceptor.handleMessage(ResponseTimeMessageInInterceptor.java:39)
>         at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
>         at 
> org.apache.cxf.jaxrs.client.ClientMessageObserver.onMessage(ClientMessageObserver.java:56)
>         at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1627)
>         at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1494)
>         at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1402)
>         at 
> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
>         at 
> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:649)
>         at 
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
>         at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
>         at 
> org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:727)
>         at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:678)
>         at org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:325)
>         at org.apache.cxf.jaxrs.client.WebClient.get(WebClient.java:422)
>         ...
>     Caused by: java.lang.IllegalArgumentException: Invalid 
> name->org.apache.cxf:bus.id=cxf2071824233,type=Performance.Counter.Client,service="{http://host/DocumentService}WebClient",port="WebClient",operation="GET:http://host/DocumentService/documents/10?loadingType=C";
>         at javax.management.ObjectInstance.<init>(ObjectInstance.java:94)...
> {code}
> I understand that the problem is when you use the WebClient to call your REST 
> service. CXF use the URI to register the MBean to monitor the service call. 
> In our case, the URI contains a question mark which is detected as a pattern 
> style for an MBean and the Mbean server avoid creating an MBean with a 
> pattern name.
> Maybe we could replace the question mark by another char.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to