Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-29485

[GSS](7.4.z) WFLY-20432 - EJB: String[] method parameter in ejb-jar.xml interceptor-binding is failing to deploy

XMLWordPrintable

      With EJB with the local business interface:

      @javax.ejb.Local
      public interface My {
          public void process(String dies);
          public void process(String dies, String[] das);
      }
      

      The EJB itself is defined as SLSB in the ejb-jar.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      <ejb-jar xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd" 
        version="3.2">
        <module-name>aa_jboss_ejb</module-name>
        <enterprise-beans>
          <session>
              <ejb-name>My</ejb-name>
              <business-local>de.My</business-local>
              <ejb-class>de.MyBeanImpl</ejb-class>
              <session-type>Stateless</session-type>
          </session>
        </enterprise-beans>
      
        <assembly-descriptor>
      
          <interceptor-binding>
              <ejb-name>My</ejb-name>
              <interceptor-class>de.MyInterceptor</interceptor-class>
              <method>
                  <method-name>process</method-name>
                  <method-params>
                      <method-param>java.lang.String</method-param>
                  </method-params>
              </method>
          </interceptor-binding>
      
          <interceptor-binding>
              <ejb-name>My</ejb-name>
              <interceptor-class>de.MyInterceptor</interceptor-class>
              <method>
                  <method-name>process</method-name>
                  <method-params>
                      <method-param>java.lang.String</method-param>
                      <method-param>java.lang.String[]</method-param>
                  </method-params>
              </method>
          </interceptor-binding>
        </assembly-descriptor>
      </ejb-jar>
      

      This leads to a failed deployment:

      16:28:26,495 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.deployment.unit."aa_jboss_interceptor_ejb-1.0.0-SNAPSHOT.jar".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."aa_jboss_interceptor_ejb-1.0.0-SNAPSHOT.jar".POST_MODULE: WFLYSRV0153: Failed to process phase POST_MODULE of deployment "aa_jboss_interceptor_ejb-1.0.0-SNAPSHOT.jar"
              at org.jboss.as.server@15.0.40.Final-redhat-00002//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:189)
              at org.jboss.msc@1.4.13.Final-redhat-00001//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)
              at org.jboss.msc@1.4.13.Final-redhat-00001//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
              at org.jboss.msc@1.4.13.Final-redhat-00001//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559)
              at org.jboss.threads@2.4.0.Final-redhat-00001//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
              at org.jboss.threads@2.4.0.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
              at org.jboss.threads@2.4.0.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
              at org.jboss.threads@2.4.0.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
              at java.base/java.lang.Thread.run(Thread.java:829)
      Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEJB0261: Could not find method de.MyBeanImpl.process with parameter types [java.lang.String, java.lang.String[]] referenced in ejb-jar.xml
              at org.jboss.as.ejb3@7.4.21.GA-redhat-00001//org.jboss.as.ejb3.deployment.processors.dd.DeploymentDescriptorInterceptorBindingsProcessor.deploy(DeploymentDescriptorInterceptorBindingsProcessor.java:222)
              at org.jboss.as.server@15.0.40.Final-redhat-00002//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:182)
              ... 8 more
      

      When changing the ejb-jar.xml to:

      <?xml version="1.0" encoding="UTF-8"?>
          ...
          <interceptor-binding>
              <ejb-name>My</ejb-name>
              <interceptor-class>de.MyInterceptor</interceptor-class>
              <method>
                  <method-name>process</method-name>
                  <method-params>
                      <method-param>java.lang.String</method-param>
                      <method-param>[Ljava.lang.String;</method-param>
                  </method-params>
              </method>
          </interceptor-binding>
        </assembly-descriptor>
      </ejb-jar>
      

      The deployment is sucessful.

      This looks to be a bug in DeploymentDescriptorInterceptorBindingsProcessor.java where a wrong comparison seem to be made if the paramter is an array?

              rhn-support-bmaxwell Brad Maxwell
              rhn-support-bmaxwell Brad Maxwell
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

                Created:
                Updated:
                Resolved: