You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by "Polina Georgieva (JIRA)" <ji...@apache.org> on 2019/04/02 12:36:01 UTC

[jira] [Created] (TOMEE-2503) Implementation classes of javax.websocket.server.ServerApplicationConfig are not found due to enabled metadata-complete flag

Polina Georgieva created TOMEE-2503:
---------------------------------------

             Summary: Implementation classes of javax.websocket.server.ServerApplicationConfig are not found due to enabled metadata-complete flag
                 Key: TOMEE-2503
                 URL: https://issues.apache.org/jira/browse/TOMEE-2503
             Project: TomEE
          Issue Type: Bug
            Reporter: Polina Georgieva
         Attachments: examples.zip

Hi,

When the web deployment descriptor's flag metadata-complete is enabled, any implementation classes of javax.websocket.server.ServerApplicationConfig are not found and hence the programmatic websocket endpoint registration is not working.

 

*Steps to reproduce*:

Use the example application (standard examples application distributed with Tomcat v.8.5.34):

Request [http://<host>:port/examples/websocket/echo.xhtml|http://%3Chost%3Eport/]

Then check the "programmatic API" option and click on "Connect" button.

The following error is received: Info: WebSocket connection closed, Code: 1006 is returned.

 

*I think the following code is responsible for this (based on Tomee sources v.7.0.4):*
 * In org.apache.openejb.config.DeploymentLoader. addWebModule(final WebModule webModule, final AppModule appModule) method (line 872)

the following check is made

   *if* (_isMetadataComplete_(webModule, webEjbModule)) {

                    *final* IAnnotationFinder finder = *new* org.apache.xbean.finder.AnnotationFinder(*new* ClassesArchive());  -> [case 1]

                    webModule.setFinder(finder);

                    webEjbModule.setFinder(finder);

                } *else* {

                    *final* IAnnotationFinder finder = FinderFactory._createFinder_(webModule);  -> [case 2]

                    webModule.setFinder(finder);

                    webEjbModule.setFinder(finder);

                }

Case 1  (metadata-complete=true): org.apache.xbean.finder.AnnotationFinder instance is set to the web application - with empty classInfos map.

Case 2  (metadata-complete= false): [org.apache.openejb.config.FinderFactory$OpenEJBAnnotationFinder|mailto:org.apache.openejb.config.FinderFactory$OpenEJBAnnotationFinder@109d20f2] instance with non empty classInfos (containing ServerApplicationConfig)
 *  Later in org.apache.catalina.startup.OpenEJBContextConfig.processServletContainerInitializers() method (line 543):

Case 1  (metadata-complete=true): finder cannot find any implementation classes and the org.apache.tomcat.websocket.server.WsSci intiatilizer has nothing to process

Case 2  (metadata-complete= false): correct implementation class found and mapped to the WsSci intiatilizer => everything works as expected

 

In my opinion the metadata-complete flag should not affect the finding of implementation classes and they should always be available regardless of the flag's value.

Note that the reported problems applies for other standard Java EE interfaces (for example: interface javax.faces.event.PhaseListener, interface javax.faces.convert.Converter, interface javax.faces.validator.Validator etc.) so I expect other scenarios to be broken as well.

Best Regards,

Polina

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)