Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-5415

javax.management.RuntimeOperationsException when register performance mbean using cxf webclient with service name contains ?

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.7.7
    • 2.7.8, 3.0.0-milestone2
    • JAX-RS
    • WIN7
      Salesforce service with Auth2 Bearer authorization

    • Unknown

    Description

      In CXF-4873 you guys fixed escape ? problem in OPERATION part.
      But in service name, it can still contains a ? character.
      For example, when I try to connect Salesforce with Auth2 bearer authorization,
      I got the callback service address QName similar like this:

      {https://na7.salesforce.com/id/00DA0000000ajozMAA/005A0000000qeS5IAI?oauth_token=00DA0000000ajoz%21AQ4AQI9IkV9EjnMLiXWUMvYMjQPGexBrTGJSduVIpYx09NI3Rv0rVX5QMQiD_mS7OK6TbMVSzL.451_bRpcwHbhQ9se_fttQ}tRESTClient
      

      Then below error may appear:

      2013-11-22 09:57:14,864 | WARN  | 1074256089-10261 | ctMessageResponseTimeInterceptor | ctMessageResponseTimeInterceptor  147 | 124 - org.apache.cxf.c
      xf-rt-management - 2.7.7 | Create Counter''s ObjectName failed. {0}
      javax.management.RuntimeOperationsException
      Create Counter''s ObjectName failed. {0}
      Caused by: java.lang.IllegalArgumentException: Repository: cannot add mbean for pattern name org.apache.cxf:bus.id=esb_demo.OAuth2SalesforceUserInfo_ContextMap-cxf786212177,type=Performance.Counter.Client,service="https://na7.salesforce.com/id/00DA0000000ajozMAA/005A0000000qeS5IAI?oauth_token=00DA0000000ajoz%21AQ4AQI9IkV9EjnMLiXWUMvYMjQPGexBrTGJSduVIpYx09NI3Rv0rVX5QMQiD_mS7OK6TbMVSzL.451_bRpcwHbhQ9se_fttQ}tRESTClient",port="tRESTClient"
      

      So the escape ? should also be fixed on ServiceName when create the Counter''s ObjectName .

      Attachments

        Issue Links

          Activity

            Same problem but in another case.

            ttoommbb Zhangbohong GAO added a comment - Same problem but in another case.

            I was reluctant at first to fix it because it is really a WebClient creation bug/limitation (see CXF-5418) or possibly of the custom code that a query may leak into its QName, however just for the sake of avoiding such exceptions it makes sense to escape '?'.
            Please consider using an absolute path only to uniquely identify a given WebClient. Query is an optional part of the request itself and it will be shown as part of the (JMX) operation property. The same WebClient may have more queries added to it, so it is better to keep them out of the service target identification.
            WebClient itself won't get queries added to its QName starting from 3.0.0-milestone2. If you use UriInfo then consider using UriInfo.getAbsolutePath to get the queries stripped off.

            Thanks

            sergey_beryozkin Sergey Beryozkin added a comment - I was reluctant at first to fix it because it is really a WebClient creation bug/limitation (see CXF-5418 ) or possibly of the custom code that a query may leak into its QName, however just for the sake of avoiding such exceptions it makes sense to escape '?'. Please consider using an absolute path only to uniquely identify a given WebClient. Query is an optional part of the request itself and it will be shown as part of the (JMX) operation property. The same WebClient may have more queries added to it, so it is better to keep them out of the service target identification. WebClient itself won't get queries added to its QName starting from 3.0.0-milestone2. If you use UriInfo then consider using UriInfo.getAbsolutePath to get the queries stripped off. Thanks

            People

              sergey_beryozkin Sergey Beryozkin
              ttoommbb Zhangbohong GAO
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: