Author: vitold
Date: 2009-05-08 11:13:24 -0400 (Fri, 08 May 2009)
New Revision: 2674
Modified:
ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/ParseXmlHelper.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/XmlParser.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/checker/beanchildren/ext/AbstractBeanChildrenChecker.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/XmlParserImplTest.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/schema/foo/Order.java
ri/trunk/tests/src/test/resources/org/jboss/webbeans/test/unit/xml/parser/user-defined-beans.xml
Log:
implement <Array> for method parameters
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/ParseXmlHelper.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/ParseXmlHelper.java 2009-05-08
05:54:32 UTC (rev 2673)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/ParseXmlHelper.java 2009-05-08
15:13:24 UTC (rev 2674)
@@ -324,7 +324,7 @@
return result;
}
- public static AnnotatedClass<?> obtainArrayType(Element arrayElement,
XmlEnvironment environment, Map<String, Set<String>> packagesMap)
+ private static AnnotatedClass<?> obtainArrayType(Element arrayElement,
XmlEnvironment environment, Map<String, Set<String>> packagesMap)
{
AnnotatedClass<?> arrayType = null;
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/XmlParser.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/XmlParser.java 2009-05-08 05:54:32
UTC (rev 2673)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/XmlParser.java 2009-05-08 15:13:24
UTC (rev 2674)
@@ -76,7 +76,6 @@
Document document = createDocument(url);
if (document != null)
{
- parseForArrays(document);
parseForAnnotationTypes(document);
parseForDeploy(document);
parseForBeans(document);
@@ -84,26 +83,6 @@
}
}
- private void parseForArrays(Document document)
- {
- Element root = document.getRootElement();
- checkChildrenForArray(root);
- }
-
- private void checkChildrenForArray(Element element)
- {
- Iterator<?> childIterator = element.elementIterator();
- while (childIterator.hasNext())
- {
- Element child = (Element) childIterator.next();
-
- if (XmlConstants.ARRAY.equalsIgnoreCase(child.getName()))
- ParseXmlHelper.obtainArrayType(child, environment, packagesMap);
- else
- checkChildrenForArray(child);
- }
- }
-
private void parseForAnnotationTypes(Document document)
{
Element root = document.getRootElement();
Modified:
ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/checker/beanchildren/ext/AbstractBeanChildrenChecker.java
===================================================================
---
ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/checker/beanchildren/ext/AbstractBeanChildrenChecker.java 2009-05-08
05:54:32 UTC (rev 2673)
+++
ri/trunk/impl/src/main/java/org/jboss/webbeans/xml/checker/beanchildren/ext/AbstractBeanChildrenChecker.java 2009-05-08
15:13:24 UTC (rev 2674)
@@ -18,7 +18,6 @@
import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -45,6 +44,9 @@
import org.dom4j.Namespace;
import org.jboss.webbeans.introspector.AnnotatedClass;
import org.jboss.webbeans.introspector.AnnotatedField;
+import org.jboss.webbeans.introspector.AnnotatedMethod;
+import org.jboss.webbeans.introspector.AnnotatedParameter;
+import org.jboss.webbeans.introspector.jlr.AnnotatedMethodImpl;
import org.jboss.webbeans.xml.ParseXmlHelper;
import org.jboss.webbeans.xml.XmlConstants;
import org.jboss.webbeans.xml.XmlEnvironment;
@@ -55,7 +57,7 @@
private Set<AnnotatedField<?>> beanFields;
- private List<Method> beanMethods;
+ private List<AnnotatedMethod<?>> beanMethods;
private boolean haveBeanDeploymentTypeDeclaration = false;
@@ -87,7 +89,11 @@
public void checkChildren(Element beanElement, AnnotatedClass<?> beanClass)
{
beanFields = beanClass.getFields();
- beanMethods = Arrays.asList(beanClass.getRawType().getDeclaredMethods());
+ beanMethods = new ArrayList<AnnotatedMethod<?>>();
+ for (Method method : beanClass.getRawType().getDeclaredMethods())
+ {
+ beanMethods.add(AnnotatedMethodImpl.of(method, beanClass));
+ }
checkForInterceptorChild(beanElement);
checkForDecoratorChild(beanElement);
@@ -108,7 +114,8 @@
private void checkBeanChild(Element beanChildElement, AnnotatedClass<?>
beanClass)
{
- if (XmlConstants.ARRAY.equalsIgnoreCase(beanChildElement.getName()))
+ if (ParseXmlHelper.isJavaEeNamespace(beanChildElement) &&
+ XmlConstants.ARRAY.equalsIgnoreCase(beanChildElement.getName()))
{
// bean child element declaring an array parameter of the bean constructor
AnnotatedClass<?> array = ParseXmlHelper.obtainArray(beanChildElement,
environment, packagesMap);
@@ -215,10 +222,14 @@
}
}
- for (Method method : beanMethods)
+ AnnotatedMethod<?> beanMethod = null;
+ for (AnnotatedMethod<?> method : beanMethods)
{
if (method.getName().equalsIgnoreCase(beanChildElement.getName()))
+ {
isMethod = true;
+ beanMethod = method;
+ }
}
if (isField && isMethod)
@@ -233,7 +244,7 @@
if (isMethod)
{
- checkMethodChild(beanChildElement, beanClass);
+ checkMethodChild(beanChildElement, beanMethod, beanClass);
return;
}
@@ -259,8 +270,52 @@
}
- private void checkMethodChild(Element beanChildElement, AnnotatedClass<?>
beanClass)
- {
- // TODO: not finished
+ private void checkMethodChild(Element methodElement, AnnotatedMethod<?>
beanMethod, AnnotatedClass<?> beanClass)
+ {// TODO: not finished
+ List<AnnotatedClass<?>> methodParameters = new
ArrayList<AnnotatedClass<?>>();
+
+ Iterator<?> elIterator = methodElement.elementIterator();
+ while (elIterator.hasNext())
+ {
+ Element methodChildElement = (Element)elIterator.next();
+
+ if (ParseXmlHelper.isJavaEeNamespace(methodChildElement) &&
+ XmlConstants.ARRAY.equalsIgnoreCase(methodChildElement.getName()))
+ {
+ // method child element declaring an array parameter of the method
+ AnnotatedClass<?> array =
ParseXmlHelper.obtainArray(methodChildElement, environment, packagesMap);
+ methodParameters.add(array);
+ }
+ else{
+ AnnotatedClass<?> methodChildClass =
ParseXmlHelper.loadElementClass(methodChildElement, Object.class, environment,
packagesMap);
+ Class<?> methodChildType = methodChildClass.getRawType();
+ boolean isJavaClass = !methodChildType.isEnum() &&
!methodChildType.isPrimitive() && !methodChildType.isInterface();
+ boolean isInterface = methodChildType.isInterface() &&
!methodChildType.isAnnotation();
+ if(isJavaClass || isInterface)
+ {
+ // method child element declaring a parameter of the method
+ methodParameters.add(methodChildClass);
+ }
+ }
+ }
+
+ List<? extends AnnotatedParameter<?>> parameters =
beanMethod.getParameters();
+ if (methodParameters.size() != parameters.size())
+ throw new DefinitionException("Bean '" + beanClass.getName() +
"' don't have metod with the same number of parameters as declared");
+
+ for (int i = 0; i < parameters.size(); i++)
+ {
+ if (!parameters.get(i).isAssignableFrom(methodParameters.get(i)))
+ throw new DefinitionException("Bean '" + beanClass.getName() +
"' don't have metod with same types of parameters as declared");
+ }
}
+
+
+
+
+
+
+
+
+
}
Modified:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/XmlParserImplTest.java
===================================================================
---
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/XmlParserImplTest.java 2009-05-08
05:54:32 UTC (rev 2673)
+++
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/XmlParserImplTest.java 2009-05-08
15:13:24 UTC (rev 2674)
@@ -35,7 +35,7 @@
)
public class XmlParserImplTest extends AbstractWebBeansTest
{
- //@Test
+// @Test
public void testParse()
{
XmlEnvironment parserEnv = new
MockXmlEnvironment(getResources("beans.xml"), new EjbDescriptorCache());
Modified:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/schema/foo/Order.java
===================================================================
---
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/schema/foo/Order.java 2009-05-08
05:54:32 UTC (rev 2673)
+++
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/xml/parser/schema/foo/Order.java 2009-05-08
15:13:24 UTC (rev 2674)
@@ -29,4 +29,9 @@
{
return this.strArr;
}
+
+ public void setStrArr(String[] strArr)
+ {
+ this.strArr = strArr;
+ }
}
Modified:
ri/trunk/tests/src/test/resources/org/jboss/webbeans/test/unit/xml/parser/user-defined-beans.xml
===================================================================
---
ri/trunk/tests/src/test/resources/org/jboss/webbeans/test/unit/xml/parser/user-defined-beans.xml 2009-05-08
05:54:32 UTC (rev 2673)
+++
ri/trunk/tests/src/test/resources/org/jboss/webbeans/test/unit/xml/parser/user-defined-beans.xml 2009-05-08
15:13:24 UTC (rev 2674)
@@ -35,6 +35,11 @@
<Array>
<String />
</Array>
+ <myapp:setStrArr>
+ <Array>
+ <String />
+ </Array>
+ </myapp:setStrArr>
</myapp:Order>
<!--
<myapp:PaymentService>