You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2017/05/26 20:26:14 UTC
svn commit: r1796338 - in /openwebbeans/trunk:
webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
webbeans-tck/standalone-suite.xml
Author: struberg
Date: Fri May 26 20:26:13 2017
New Revision: 1796338
URL: http://svn.apache.org/viewvc?rev=1796338&view=rev
Log:
OWB-1182 fix InjectionPoint serialisation
and also disable challenged TCK test
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
openwebbeans/trunk/webbeans-tck/standalone-suite.xml
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java?rev=1796338&r1=1796337&r2=1796338&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointImpl.java Fri May 26 20:26:13 2017
@@ -184,11 +184,7 @@ class InjectionPointImpl implements Inje
// and it's Qualifiers
Set<Annotation> qualifiers = ownerBean.getQualifiers();
- for (Annotation qualifier : qualifiers)
- {
- out.writeObject(Character.valueOf('-')); // throw-away delimiter so alternating annotations don't get swallowed in the read.
- out.writeObject(qualifier);
- }
+ writeQualifiers(out, qualifiers);
}
else
{
@@ -196,6 +192,7 @@ class InjectionPointImpl implements Inje
{
Class<?> beanClass = ((AnnotatedMember) annotated).getDeclaringType().getJavaClass();
out.writeObject(beanClass);
+ out.writeObject(Character.valueOf('~'));
}
else
{
@@ -203,12 +200,12 @@ class InjectionPointImpl implements Inje
}
}
- out.writeObject(Character.valueOf('~'));
-
+
if(injectionMember instanceof Field)
{
out.writeByte(0);
out.writeUTF(injectionMember.getName());
+ writeQualifiers(out, qualifierAnnotations);
}
if(injectionMember instanceof Method)
@@ -239,55 +236,49 @@ class InjectionPointImpl implements Inje
out.flush();
}
-
+
@SuppressWarnings("unchecked")
private void readObject(java.io.ObjectInputStream inp) throws IOException, ClassNotFoundException
{
ObjectInputStream in = new OwbCustomObjectInputStream(inp, WebBeansUtil.getCurrentClassLoader());
- Class<?> beanClass = (Class<?>)in.readObject();
- Set<Annotation> anns = new HashSet<>();
+ Class<?> ownerBeanClass = (Class<?>)in.readObject();
+ Set<Annotation> ownerQualifiers = readQualifiers(in);
+
WebBeansContext webBeansContext = WebBeansContext.currentInstance();
AnnotatedElementFactory annotatedElementFactory = webBeansContext.getAnnotatedElementFactory();
- while(!in.readObject().equals('~')) // read throw-away '-' or '~' terminal delimiter.
- {
- Annotation ann = (Annotation) in.readObject(); // now read the annotation.
- anns.add(ann);
- }
-
//process annotations
BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
- Set<Bean<?>> beans = beanManager.getBeans(beanClass, anns.toArray(new Annotation[anns.size()]));
+ Set<Bean<?>> beans = beanManager.getBeans(ownerBeanClass,
+ ownerQualifiers.toArray(new Annotation[ownerQualifiers.size()]));
ownerBean = beanManager.resolve(beans);
- if (ownerBean != null)
- {
- qualifierAnnotations = anns;
- }
// determine type of injection point member (0=field, 1=method, 2=constructor) and read...
int c = in.readByte();
if(c == 0)
{
String fieldName = in.readUTF();
- Field field = webBeansContext.getSecurityService().doPrivilegedGetDeclaredField(beanClass, fieldName);
+ Field field = webBeansContext.getSecurityService().doPrivilegedGetDeclaredField(ownerBeanClass, fieldName);
injectionMember = field;
- AnnotatedType<?> annotatedType = annotatedElementFactory.newAnnotatedType(beanClass);
+ AnnotatedType<?> annotatedType = annotatedElementFactory.newAnnotatedType(ownerBeanClass);
annotated = annotatedElementFactory.newAnnotatedField(field, annotatedType);
injectionType = field.getGenericType();
+
+ qualifierAnnotations = readQualifiers(in);
}
else if(c == 1)
{
String methodName = in.readUTF();
Class<?>[] parameters = (Class<?>[])in.readObject();
- Method method = webBeansContext.getSecurityService().doPrivilegedGetDeclaredMethod(beanClass, methodName, parameters);
+ Method method = webBeansContext.getSecurityService().doPrivilegedGetDeclaredMethod(ownerBeanClass, methodName, parameters);
injectionMember = method;
- AnnotatedType<?> annotatedType = annotatedElementFactory.newAnnotatedType(beanClass);
+ AnnotatedType<?> annotatedType = annotatedElementFactory.newAnnotatedType(ownerBeanClass);
AnnotatedMethod<Object> am = (AnnotatedMethod<Object>)annotatedElementFactory.
newAnnotatedMethod((Method) injectionMember,annotatedType);
List<AnnotatedParameter<Object>> annParameters = am.getParameters();
@@ -300,7 +291,7 @@ class InjectionPointImpl implements Inje
Class<?>[] parameters = (Class<?>[])in.readObject();
try
{
- injectionMember = beanClass.getConstructor(parameters);
+ injectionMember = ownerBeanClass.getConstructor(parameters);
}
catch(NoSuchMethodException e)
@@ -308,7 +299,7 @@ class InjectionPointImpl implements Inje
injectionMember = null;
}
- AnnotatedType<Object> annotatedType = (AnnotatedType<Object>)annotatedElementFactory.newAnnotatedType(beanClass);
+ AnnotatedType<Object> annotatedType = (AnnotatedType<Object>)annotatedElementFactory.newAnnotatedType(ownerBeanClass);
AnnotatedConstructor<Object> am = annotatedElementFactory
.newAnnotatedConstructor((Constructor<Object>) injectionMember,annotatedType);
List<AnnotatedParameter<Object>> annParameters = am.getParameters();
@@ -321,6 +312,58 @@ class InjectionPointImpl implements Inje
transientt = in.readBoolean();
}
+ private void writeQualifiers(ObjectOutputStream out, Set<Annotation> qualifiers) throws IOException
+ {
+ for (Annotation qualifier : qualifiers)
+ {
+ out.writeObject(Character.valueOf('-')); // throw-away delimiter so alternating annotations don't get swallowed in the read.
+ out.writeObject(qualifier);
+ }
+
+ // terminate character
+ out.writeObject(Character.valueOf('~'));
+ }
+
+ private Set<Annotation> readQualifiers(ObjectInputStream in) throws IOException, ClassNotFoundException
+ {
+ Set<Annotation> qualifiers = new HashSet<>();
+ while(!in.readObject().equals('~')) // read throw-away '-' or '~' terminal delimiter.
+ {
+ Annotation ann = (Annotation) in.readObject(); // now read the annotation.
+ qualifiers.add(ann);
+ }
+ return qualifiers;
+ }
+
+ @Override
+ public boolean equals(Object o)
+ {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ InjectionPointImpl that = (InjectionPointImpl) o;
+
+ if (transientt != that.transientt) return false;
+ if (delegate != that.delegate) return false;
+ if (!qualifierAnnotations.equals(that.qualifierAnnotations)) return false;
+ if (ownerBean != null ? !ownerBean.equals(that.ownerBean) : that.ownerBean != null) return false;
+ if (!injectionMember.equals(that.injectionMember)) return false;
+ if (!injectionType.equals(that.injectionType)) return false;
+ return annotated != null ? annotated.equals(that.annotated) : that.annotated == null;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int result = qualifierAnnotations.hashCode();
+ result = 31 * result + (ownerBean != null ? ownerBean.hashCode() : 0);
+ result = 31 * result + injectionMember.hashCode();
+ result = 31 * result + injectionType.hashCode();
+ result = 31 * result + (annotated != null ? annotated.hashCode() : 0);
+ result = 31 * result + (transientt ? 1 : 0);
+ result = 31 * result + (delegate ? 1 : 0);
+ return result;
+ }
public String toString()
{
Modified: openwebbeans/trunk/webbeans-tck/standalone-suite.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-tck/standalone-suite.xml?rev=1796338&r1=1796337&r2=1796338&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-tck/standalone-suite.xml (original)
+++ openwebbeans/trunk/webbeans-tck/standalone-suite.xml Fri May 26 20:26:13 2017
@@ -56,6 +56,16 @@
<classes>
+ <!-- Tests broken in the CDI-2.0 TCK: -->
+
+ <!-- https://issues.jboss.org/projects/CDITCK/issues/CDITCK-576 -->
+ <class name="org.jboss.cdi.tck.tests.context.passivating.dependency.builtin.BuiltinBeanPassivationDependencyTest">
+ <methods>
+ <exclude name="testInjectionPoint"/>
+ </methods>
+ </class>
+
+
<!--
Tests broken in the CDI-1.2 TCK: