Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@
import org.jboss.weld.bootstrap.enablement.GlobalEnablementBuilder;
import org.jboss.weld.bootstrap.enablement.ModuleEnablement;
import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
import org.jboss.weld.bootstrap.spi.BeanDiscoveryMode;
import org.jboss.weld.bootstrap.spi.BeansXml;
import org.jboss.weld.bootstrap.spi.Filter;
import org.jboss.weld.bootstrap.spi.Metadata;
import org.jboss.weld.config.WeldConfiguration;
Expand Down Expand Up @@ -263,7 +265,11 @@ public void createBeans(Environment environment) {
}
beanDeployer.addBuiltInBean(new RequestContextControllerBean(beanManager));

if (beanDeploymentArchive.getBeansXml() != null && beanDeploymentArchive.getBeansXml().isTrimmed()) {
BeansXml beansXml = beanDeploymentArchive.getBeansXml();
if (beansXml != null && beansXml.isTrimmed()) {
if (beansXml.getBeanDiscoveryMode() != BeanDiscoveryMode.ALL) {
throw BootstrapLogger.LOG.trimmingNonExplicitBeanArchive(beansXml.getUrl(), beansXml.getBeanDiscoveryMode());
}
beanDeployer.getEnvironment().trim();
}
beanDeployer.createClassBeans();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -349,4 +349,7 @@ public interface BootstrapLogger extends WeldLogger {
@Message(id = 184, value = "BeforeBeanDiscovery.addInvokable() called by {0} for {1}", format = Format.MESSAGE_FORMAT)
void addInvokableCalled(Object extensionName, Object type);

@Message(id = 185, value = "Archive trimming is permitted only for explicit bean archives. Found trimmed bean archive with discovery mode {1} and with URL {0}", format = Format.MESSAGE_FORMAT)
DeploymentException trimmingNonExplicitBeanArchive(Object beansXmlUrl, Object beansXmlDiscoveryMode);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.jboss.weld.tests.xml.broken.trimming;

import jakarta.enterprise.context.Dependent;

@Dependent
public class DummyBean {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.jboss.weld.tests.xml.broken.trimming;

import jakarta.enterprise.inject.spi.DeploymentException;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.ShouldThrowException;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.BeanArchive;
import org.jboss.shrinkwrap.api.BeanDiscoveryMode;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.weld.test.util.Utils;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(Arquillian.class)
public class ImplicitArchiveTrimmingTest {

@Deployment
@ShouldThrowException(DeploymentException.class)
public static Archive<?> deploy() {
return ShrinkWrap.create(BeanArchive.class, Utils.getDeploymentNameAsHash(ImplicitArchiveTrimmingTest.class))
.trim()
.beanDiscoveryMode(BeanDiscoveryMode.ANNOTATED)
.addPackage(ImplicitArchiveTrimmingTest.class.getPackage());
}

@Test
public void testExceptionThrown() {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,9 @@ public interface BeanArchive extends JavaArchive {
* Sets bean-discovery-mode to annotated
*/
BeanArchive annotated();

/**
* Adds the trim element to beans.xml
*/
BeanArchive trim();
}
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,10 @@ public BeanArchive beanDiscoveryMode(BeanDiscoveryMode mode) {
public BeanArchive annotated() {
return beanDiscoveryMode(BeanDiscoveryMode.ANNOTATED);
}

@Override
public BeanArchive trim() {
descriptor.trim();
return covarientReturn();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,14 @@ public BeanDiscoveryMode getBeanDiscoveryMode() {
};

private static final String CLOSING_TAG_PREFIX = "</";
private static final String CLOSING_TAG_EMPTY = "/>";
private static final String OPENING_TAG_PREFIX = "<";
private static final String TAG_SUFFIX = ">";
private static final String TAG_SUFFIX_NEW_LINE = ">\n";
private static final String TAG_SUFFIX_SELF_CLOSE_NEW_LINE = " />\n";
private static final String ALTERNATIVES_ELEMENT_NAME = "alternatives";
private static final String DECORATORS_ELEMENT_NAME = "decorators";
private static final String INTERCEPTORS_ELEMENT_NAME = "interceptors";
private static final String CLASS = "class";

private static final String SCAN_ELEMENT_NAME = "scan";
Expand All @@ -37,11 +40,14 @@ public BeanDiscoveryMode getBeanDiscoveryMode() {
private static final String NAME_ATTRIBUTE_NAME = "name";
private static final String VALUE_ATTRIBUTE_NAME = "value";

private static final String TRIM_ELEMENT_NAME = "trim";

private final List<Class<?>> alternatives;
private final List<Class<?>> interceptors;
private final List<Class<?>> decorators;
private final List<Class<?>> stereotypes;
private final List<Exclude> excludeFilters;
private boolean trimArchive;

private BeanDiscoveryMode mode = BeanDiscoveryMode.ANNOTATED;

Expand Down Expand Up @@ -215,6 +221,11 @@ public BeansXml excludeFilters(Exclude... filters) {
return this;
}

public BeansXml trim() {
this.trimArchive = true;
return this;
}

public BeanDiscoveryMode getBeanDiscoveryMode() {
return mode;
}
Expand All @@ -226,20 +237,21 @@ public void setBeanDiscoveryMode(BeanDiscoveryMode mode) {
@Override
public InputStream openStream() {
StringBuilder xml = new StringBuilder();
xml.append("<beans version=\"1.1\" bean-discovery-mode=\"");
xml.append("<beans version=\"4.1\" bean-discovery-mode=\"");
xml.append(getBeanDiscoveryMode().getValue());
xml.append("\">\n");
appendExcludeFilters(excludeFilters, xml);
appendAlternatives(alternatives, stereotypes, xml);
appendSection("interceptors", CLASS, interceptors, xml);
appendSection("decorators", CLASS, decorators, xml);
appendSection(INTERCEPTORS_ELEMENT_NAME, CLASS, interceptors, xml);
appendSection(DECORATORS_ELEMENT_NAME, CLASS, decorators, xml);
appendTrimming(trimArchive, xml);
xml.append("</beans>");

return new ByteArrayInputStream(xml.toString().getBytes());
}

private void appendExcludeFilters(List<Exclude> filters, StringBuilder xml) {
if (filters.size() > 0) {
if (!filters.isEmpty()) {
xml.append(OPENING_TAG_PREFIX).append(SCAN_ELEMENT_NAME).append(TAG_SUFFIX_NEW_LINE);
for (Exclude ex : filters) {
xml.append(OPENING_TAG_PREFIX).append(EXCLUDE_ELEMENT_NAME);
Expand All @@ -264,7 +276,7 @@ private static void appendAttribute(String name, String value, StringBuilder xml
}

private static void appendAlternatives(List<Class<?>> alternatives, List<Class<?>> stereotypes, StringBuilder xml) {
if (alternatives.size() > 0 || stereotypes.size() > 0) {
if (!alternatives.isEmpty() || !stereotypes.isEmpty()) {
xml.append(OPENING_TAG_PREFIX).append(ALTERNATIVES_ELEMENT_NAME).append(TAG_SUFFIX_NEW_LINE);
appendClasses(CLASS, alternatives, xml);
appendClasses("stereotype", stereotypes, xml);
Expand All @@ -273,13 +285,19 @@ private static void appendAlternatives(List<Class<?>> alternatives, List<Class<?
}

private static void appendSection(String name, String subName, List<Class<?>> classes, StringBuilder xml) {
if (classes.size() > 0) {
if (!classes.isEmpty()) {
xml.append(OPENING_TAG_PREFIX).append(name).append(TAG_SUFFIX_NEW_LINE);
appendClasses(subName, classes, xml);
xml.append(CLOSING_TAG_PREFIX).append(name).append(TAG_SUFFIX_NEW_LINE);
}
}

private static void appendTrimming(boolean trimArchive, StringBuilder xml) {
if (trimArchive) {
xml.append(OPENING_TAG_PREFIX).append(TRIM_ELEMENT_NAME).append(CLOSING_TAG_EMPTY);
}
}

private static void appendClasses(String name, List<Class<?>> classes, StringBuilder xml) {
for (Class<?> clazz : classes) {
xml.append(OPENING_TAG_PREFIX).append(name).append(TAG_SUFFIX).append(clazz.getName()).append(CLOSING_TAG_PREFIX)
Expand Down
Loading